From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6183 invoked by alias); 11 Feb 2003 13:44:35 -0000 Mailing-List: contact cgen-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cgen-owner@sources.redhat.com Received: (qmail 6175 invoked from network); 11 Feb 2003 13:44:35 -0000 Received: from unknown (HELO wrzx35.rz.uni-wuerzburg.de) (132.187.3.35) by 172.16.49.205 with SMTP; 11 Feb 2003 13:44:35 -0000 Received: from wrzx30.rz.uni-wuerzburg.de (wrzx30.rz.uni-wuerzburg.de [132.187.1.30]) by wrzx35.rz.uni-wuerzburg.de (8.8.8/8.8.8/uniwue-MM-1.05) with ESMTP id OAA185295 for ; Tue, 11 Feb 2003 14:44:34 +0100 (CET) Received: from virusscan (localhost [127.0.0.1]) by wrzx30.rz.uni-wuerzburg.de (Postfix) with ESMTP id CCF3644FAF for ; Tue, 11 Feb 2003 14:44:33 +0100 (CET) Received: from wrzx37.rz.uni-wuerzburg.de ([132.187.3.37]) by virusscan (wrzx30 [132.187.1.30:25]) (amavisd-new) with ESMTP id 05434-10 for ; Tue, 11 Feb 2003 14:44:33 +0100 (CET) Received: from spamchecker (localhost [127.0.0.1]) by wrzx37.rz.uni-wuerzburg.de (Postfix) with ESMTP id 05DC1A319 for ; Tue, 11 Feb 2003 14:44:33 +0100 (CET) Received: from wpax16.physik.uni-wuerzburg.de (wpax16.physik.uni-wuerzburg.de [132.187.42.16]) by wrzx37.rz.uni-wuerzburg.de (Postfix) with ESMTP id DC4CBA1A2 for ; Tue, 11 Feb 2003 14:44:32 +0100 (CET) Received: from localhost (mlkessle@localhost) by wpax16.physik.uni-wuerzburg.de (8.10.0/8.10.0) with ESMTP id h1BDj2w21017 for ; Tue, 11 Feb 2003 14:45:02 +0100 (MET) Date: Tue, 11 Feb 2003 13:44:00 -0000 From: Manuel Kessler X-Sender: mlkessle@wpax16.physik.uni-wuerzburg.de To: cgen@sources.redhat.com Subject: Re: Again: variable width instructions (fwd) Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="2005231591-851401618-1044971068=:21013" Content-ID: X-Spam-Status: No, hits=-11.8 required=8.0 tests=LOCAL_CLIENT,LOCAL_SENDER,NICE_HELO,SPAM_PHRASE_00_01, USER_AGENT_PINE version=2.43-string_20021002 X-Spam-Level: X-Virus-Scanned: by amavisd-new (Rechenzentrum Universitaet Wuerzburg) X-SW-Source: 2003-q1/txt/msg00042.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --2005231591-851401618-1044971068=:21013 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII Content-ID: Content-length: 5343 Sorry for disturbing again, of course I forgot the attachment :-( Thanks first to Doug and Jan for their helpful comments. On Sun, 9 Feb 2003, Doug Evans wrote: > Things might actually be working ok, depending upon whether or not > $0x80000000, etc. are valid symbols. What's happening is that > gas is interpreting them as symbols ($ doesn't prefix constants in > fr30 assembler). If you had included -r in the arguments to objdump > you would have seen the following. Live and learn I guess. :-) Feeling a little embarrassed, but who knows fr30 assembler anyway ;-) > Regarding problems specifying ciscy fields in m16c.cpu, Jan is right. > You (probably) want to use the full form of define-ifield for these. > It's unfortunate that I didn't create a shorthand version of the > full form of define-ifield, I think its absence has led to some confusion. > E.g. You don't need #lsb0 = #f, it just makes the abbreviated short forms > dnf and df [sic (*1)] work better. Yes, I have been playing with lsb0=#t and #f, and I think there is some problem with #t, possibly only in combination with little endian. Attached you will find my updated m16c.cpu file, which nearly works with xxx-insn-bitsize 16. As I need constant fields in the second byte, I probably cannot go down to 8 currently, but that's ok for me now. For testing, I defined some ifields with the full form, especially take a look at f-opc1b, which is an opcode part in the second byte. If I define it with word-offset 8 and start 5, the opcode part (0x2f) does not end up in the corresponding bits of the second byte, but gets added to the first byte! However, if I define it with word-offset 0 and start 13, the behaviour is correct?!? Interestingly enough, the nearly identical definition of the register part in the second byte (which is obviously not constant, but depends on the chosen register) is working both ways. To make matters worse, in one combination of lsb0, word-offset and xxx-bitsize (can't remember exactly, and am too lazy to reproduce, so feel very free to ignore this paragraph), the assembled bytes were correct, but objdump couldn't disassemble them back, so some information was included in the assembler, but missing in the disassembler or vice versa. Anyway, there is a way to do it, so it's okay. The problem occurs if I go to the variant including 8bit displacement, which is 24bit long (negi8). If I leave the displacement field out (disp8), the two opcodes in the first two bytes get assembled correctly, but naturally the displacement is missing. If I include the displacement field in the instruction definition, the displacement gets filled in the correct place and the next instruction starts at the correct position 24bits later, but the two opcode bytes get screwed up. More specifically, the opcode part which belongs to bits 0-6 (lsb0=#t) of the second byte, vanishes completely, as do bits 6-7 of the first byte, and bits 4-5 of the first byte show up in their proper positions in the second byte. So that's the current state of affairs. Feel free again to comment on the attached m16c.cpu file. > I went to savannah.nongnu.org and checked out and built an m16c toolchain > (but using the m16c.cpu file you included in your message). Thank you very much for getting this far! > I can see some of the problems you're having. For example, > > neg.b 4[a0] > > disassembles to > > 0: a2 2f 04 42 *unknown* > > but it's only a 3 byte insn. It is clear that any unknown instruction gets disassebled as base-insn-bitsize, but if it gets disassembled, then with the proper length. > You really do want to use the proper values of 8 for base-insn-size, etc. > > (default-insn-bitsize 8) > (base-insn-bitsize 8) > (default-insn-word-bitsize ???) > > Off the top of my head I dunno what's a good value for > default-insn-word-bitsize for the m16c. > > Given that base-insn-bitsize is 8 you'll want to use the full form of > define-ifield, or the macros that are in your m16.cpu file: dif and dnif (*2). > > There's one more problem though. Cgen current doesn't support ifields > with constant values beyond base-insn-size. There are hooks for this > in various places, but no one has finished the work. It's straightforward, > more leg-work than brain-work. I'll make a point of getting to it > this week (can't promise an ETA, but we shall see). Of course I do want the correct xxx-bitsize, but as I need the constant ifields beyond 8 bits I (currently, at least) have little choice. 16 would be fine, if I can make it work. Thanks again for all the help up to now, but gratefuls as I am I will still beg for more :-) Ciao, Manuel ______________________________________________________________________ Dr. Manuel Kessler, Dipl.-Phys. Institut fuer Aerodynamik und Gasdynamik Universitaet Stuttgart Pfaffenwaldring 21 ( ( ( ( ___________.^.___________ ) ) ) ) 70550 Stuttgart / Germany _\I/_ /\_|_/\ Phone: +49 711 685 3435 \_(_)_/ Fax: +49 711 685 3438 ./ \. E-Mail: kessler@iag.uni-stuttgart.de WWW: http://www.iag.uni-stuttgart.de/people/manuel.kessler ______________________________________________________________________ --2005231591-851401618-1044971068=:21013 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME="m16c.cpu" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME="m16c.cpu" Content-length: 16922 OyBPcGVuIHF1ZXN0aW9uczoNCjsgLSB3aHkgZG9lc24ndCAkc2l6ZSB3b3Jr IGluIGRpc2Fzc2VtYmx5Pz8/DQo7IC0gd2h5IGRvIHdlIGhhdmUgdG8gdXNl IGJhc2UtaW5zbi1iaXRzaXplPTE2LzMyID8NCjsgLSBhZGRyZXNzL2luZGV4 IHJlZ2lzdGVycyBhcmUgY3VycmVudGx5IFdJLCBidXQgc2hvdWxkIGJlIEFJ DQo7ICAgLT4gQ0dFTiBwcm9ibGVtLCBldmVuIGlmIEhJIC0+IHNlbWFudGlj IGFjY2VzcyB0byB3aXRoIG1lbSBkb2Vzbid0IHdvcmsNCg0KOyBNaXRzdWJp c2hpIE0xNkMgQ1BVIGRlc2NyaXB0aW9uLiAgLSotIFNjaGVtZSAtKi0NCjsg Q29weXJpZ2h0IChDKSAyMDAyIE1hbnVlbCBLZXNzbGVyDQoNCihpbmNsdWRl ICJzaW1wbGlmeS5pbmMiKQ0KDQo7IEZJWE1FOiBEZWxldGUgc2lnbiBleHRl bnNpb24gb2YgYWNjdW11bGF0b3IgcmVzdWx0cy4NCjsgU2lnbiBleHRlbnNp b24gaXMgZG9uZSB3aGVuIGFjY3VtdWxhdG9yIGlzIHJlYWQuDQoNCjsgZGVm aW5lLWFyY2ggbXVzdCBhcHBlYXIgZmlyc3QNCg0KKGRlZmluZS1hcmNoDQog IChuYW1lIG0xNmMpIDsgbmFtZSBvZiBjcHUgZmFtaWx5DQogIChjb21tZW50 ICJNaXRzdWJpc2hpIE0xNkMiKQ0KICAoZGVmYXVsdC1hbGlnbm1lbnQgYWxp Z25lZCkNCiAgKGluc24tbHNiMD8gI3QpDQogIChtYWNocyBtMTZjOHgpDQog IChtYWNocyBtMTZjNnggbTE2Yzh4IG0zMmM4eCkNCiAgKGlzYXMgbTE2YykN CikNCg0KOyBJbnN0cnVjdGlvbiBzZXQgcGFyYW1ldGVycy4NCjsgRklYTUU6 IEkgdGhpbmsgOC84Lzggd291bGQgYmUgbW9yZSBjb3JyZWN0LCBidXQgY29u c3RhbnQgZmllbGRzIHNlZW0gdG8gYmUNCjsgbm90IGFsbG93ZWQgYmV5b25k IGJhc2UtaW5zbi1iaXRzaXplLCBhbmQgaXQgc2VlbXMgdG8gd29yayAobW9z dGx5KSBvaw0KOyB0aGlzIHdheS4gUGVyaGFwcyBjb21lIGJhY2sgdG8gdGhp cyBpc3N1ZSBsYXRlci4NCihkZWZpbmUtaXNhDQogIChuYW1lIG0xNmMpDQog IChkZWZhdWx0LWluc24tYml0c2l6ZSAxNikNCiAgKGJhc2UtaW5zbi1iaXRz aXplIDE2KQ0KICAoZGVmYXVsdC1pbnNuLXdvcmQtYml0c2l6ZSAxNikNCikN Cg0KOyBDcHUgZmFtaWx5IGRlZmluaXRpb25zLg0KDQooZGVmaW5lLWNwdQ0K ICA7IGNwdSBuYW1lcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gdGhlIGFyY2hp dGVjdHVyZSBuYW1lIGFuZCBtYWNoaW5lIG5hbWVzLg0KICA7IFRoZSAiYiIg c3VmZml4IHN0YW5kcyBmb3IgImJhc2UiIGFuZCBpcyB0aGUgY29udmVudGlv bi4NCiAgOyBUaGUgImYiIHN1ZmZpeCBzdGFuZHMgZm9yICJmYW1pbHkiIGFu ZCBpcyB0aGUgY29udmVudGlvbi4NCiAgKG5hbWUgbTE2Y2JmKQ0KICAoY29t bWVudCAiTWl0c3ViaXNoaSBNMTZDNnggYmFzZSBmYW1pbHkiKQ0KICAoZW5k aWFuIGxpdHRsZSkNCikNCg0KKGRlZmluZS1jcHUNCiAgKG5hbWUgbTMyY2Yp DQogIChjb21tZW50ICJNaXRzdWJpc2hpIE0xNkM4eC9NMzJDOHggZmFtaWx5 IikNCiAgKGVuZGlhbiBsaXR0bGUpDQogIDsgR2VuZXJhdGVkIGZpbGVzIGhh dmUgYW4gIngiIHN1ZmZpeC4NCiAgKGZpbGUtdHJhbnNmb3JtICJ4IikNCikN Cg0KKGRlZmluZS1tYWNoDQogIChuYW1lIG0xNmM2eCkNCiAgKGNvbW1lbnQg IkdlbmVyaWMgTTE2QzZ4IGNwdSIpDQogIChjcHUgbTE2Y2JmKQ0KKQ0KDQoo ZGVmaW5lLW1hY2gNCiAgKG5hbWUgbTE2Yzh4KQ0KICAoY29tbWVudCAiR2Vu ZXJpYyBNMTZDOHggY3B1IikNCiAgKGNwdSBtMzJjZikNCikNCg0KKGRlZmlu ZS1tYWNoDQogIChuYW1lIG0zMmM4eCkNCiAgKGNvbW1lbnQgIkdlbmVyaWMg TTMyQzh4IGNwdSIpDQogIChjcHUgbTMyY2YpDQopDQoNCjsgTW9kZWwgZGVz Y3JpcHRpb25zLg0KDQooZGVmaW5lLW1vZGVsDQogIChuYW1lIG0xNmM2MCkg KGNvbW1lbnQgIk0xNkMvNjAiKSAoYXR0cnMpDQogIChtYWNoIG0xNmM2eCkN CiAgKHBpcGVsaW5lIGFsbCAiIiAoKSAoKGZldGNoKSAoZGVjb2RlKSAoZXhl Y3V0ZSkgKHdyaXRlYmFjaykpKQ0KICAodW5pdCB1LWV4ZWMgIkV4ZWN1dGlv biBVbml0IiAoKQ0KCTEgMSA7IGlzc3VlIGRvbmUNCgkoKSAoKSAoKSAoKSkN CikNCg0KKGRlZmluZS1tb2RlbA0KICAobmFtZSBtMTZjODApIChjb21tZW50 ICJNMTZDLzgwIikgKGF0dHJzKQ0KICAobWFjaCBtMTZjOHgpDQogIChwaXBl bGluZSBhbGwgIiIgKCkgKChmZXRjaCkgKGRlY29kZSkgKGV4ZWN1dGUpICh3 cml0ZWJhY2spKSkNCiAgKHVuaXQgdS1leGVjICJFeGVjdXRpb24gVW5pdCIg KCkNCgkxIDEgOyBpc3N1ZSBkb25lDQoJKCkgKCkgKCkgKCkpDQopDQoNCihk ZWZpbmUtbW9kZWwNCiAgKG5hbWUgbTMyYzgwKSAoY29tbWVudCAiTTMyQy84 MCIpIChhdHRycykNCiAgKG1hY2ggbTMyYzh4KQ0KICAocGlwZWxpbmUgYWxs ICIiICgpICgoZmV0Y2gpIChkZWNvZGUpIChleGVjdXRlKSAod3JpdGViYWNr KSkpDQogICh1bml0IHUtZXhlYyAiRXhlY3V0aW9uIFVuaXQiICgpDQoJMSAx IDsgaXNzdWUgZG9uZQ0KCSgpICgpICgpICgpKQ0KKQ0KDQo7IHJlZ2lzdGVy IGZpbGUgZGVmaW5pdGlvbnMNCihkZWZpbmUta2V5d29yZA0KICAobmFtZSBn cjgtbmFtZXMpDQogIChwcmludC1uYW1lIGgtZ3I4KQ0KICAocHJlZml4ICIi KQ0KICAodmFsdWVzIChyMGggMCkgKHIxaCAxKSAocjBsIDIpIChyMWwgMykp DQopDQoNCihkZWZpbmUtaGFyZHdhcmUNCiAgKG5hbWUgaC1ncjgpDQogIChj b21tZW50ICI4IGJpdCBnZW5lcmFsIHJlZ2lzdGVycyIpDQogIChhdHRycyBW SVJUVUFMIFBST0ZJTEUpDQogICh0eXBlIHJlZ2lzdGVyIFFJICg0KSkNCiAg KGluZGljZXMgZXh0ZXJuLWtleXdvcmQgZ3I4LW5hbWVzKQ0KICAoZ2V0IChp bmRleCkNCiAgICAgICAoaWYgKGd0IGluZGV4IDEpDQoJICAgKHJlZyBRSSBo LWdyIGluZGV4KQ0KCSAgIChiaXRmaWVsZCAocmVnIGgtZ3IgKGFkZCBpbmRl eCAyKSkgMTUgOCkpKQ0KICAoc2V0IChpbmRleCBuZXd2YWwpDQogICAgICAg KGlmIChndCBpbmRleCAxKQ0KCSAgIChzZXQgKGJpdGZpZWxkIChyZWcgaC1n ciBpbmRleCkgOCA4KSBuZXd2YWwpDQoJICAgKHNldCAoYml0ZmllbGQgKHJl ZyBoLWdyIChhZGQgaW5kZXggMikpIDE1IDgpIG5ld3ZhbCkpKQ0KKQ0KDQoo ZGVmaW5lLWtleXdvcmQNCiAgKG5hbWUgZ3ItbmFtZXMpDQogIChwcmludC1u YW1lIGgtZ3IpDQogIChwcmVmaXggIiIpDQogICh2YWx1ZXMgKHIyIDApIChy MyAxKSAocjAgMikgKHIxIDMpKQ0KKQ0KDQooZGVmaW5lLWhhcmR3YXJlDQog IChuYW1lIGgtZ3IpDQogIChjb21tZW50ICJnZW5lcmFsIHJlZ2lzdGVycyIp DQogIChhdHRycyBQUk9GSUxFIENBQ0hFLUFERFIpDQogICh0eXBlIHJlZ2lz dGVyIEhJICg0KSkNCiAgKGluZGljZXMgZXh0ZXJuLWtleXdvcmQgZ3ItbmFt ZXMpDQopDQoNCihkZWZpbmUta2V5d29yZA0KICAobmFtZSBhci1uYW1lcykN CiAgKHByaW50LW5hbWUgaC1hcikNCiAgKHByZWZpeCAiIikNCiAgKHZhbHVl cyAoYTAgMCkgKGExIDEpKQ0KKQ0KDQooZGVmaW5lLWhhcmR3YXJlDQogIChu YW1lIGgtYXIpDQogIChjb21tZW50ICJhZGRyZXNzIHJlZ2lzdGVycyIpDQog IChhdHRycyBWSVJUVUFMIFBST0ZJTEUpDQogICh0eXBlIHJlZ2lzdGVyIFdJ ICgyKSkNCiAgKGluZGljZXMgZXh0ZXJuLWtleXdvcmQgYXItbmFtZXMpDQog IChnZXQgKGluZGV4KSAocmVnIGgtaXIgaW5kZXgpKQ0KICAoc2V0IChpbmRl eCBuZXd2YWwpIChzZXQgcmVnIGgtaXIgaW5kZXggbmV3dmFsKSkNCikNCg0K KGRlZmluZS1rZXl3b3JkDQogIChuYW1lIGJyLW5hbWVzKQ0KICAocHJpbnQt bmFtZSBoLWJyKQ0KICAocHJlZml4ICIiKQ0KICAodmFsdWVzIChzYiAwKSAo ZmIgMSkpDQopDQoNCihkZWZpbmUtaGFyZHdhcmUNCiAgKG5hbWUgaC1icikN CiAgKGNvbW1lbnQgImFkZHJlc3MgcmVnaXN0ZXJzIikNCiAgKGF0dHJzIFZJ UlRVQUwgUFJPRklMRSkNCiAgKHR5cGUgcmVnaXN0ZXIgV0kgKDIpKQ0KICAo aW5kaWNlcyBleHRlcm4ta2V5d29yZCBici1uYW1lcykNCiAgKGdldCAoaW5k ZXgpIChyZWcgaC1pciAoYWRkIGluZGV4IDIpKSkNCiAgKHNldCAoaW5kZXgg bmV3dmFsKSAoc2V0IHJlZyBoLWlyIChhZGQgaW5kZXggMikgbmV3dmFsKSkN CikNCg0KKGRlZmluZS1rZXl3b3JkDQogIChuYW1lIGlyLW5hbWVzKQ0KICAo cHJpbnQtbmFtZSBoLWlyKQ0KICAocHJlZml4ICIiKQ0KICAodmFsdWVzIChh MCAwKSAoYTEgMSkgKHNiIDIpIChmYiAzKSkNCikNCg0KKGRlZmluZS1oYXJk d2FyZQ0KICAobmFtZSBoLWlyKQ0KICAoY29tbWVudCAiaW5kZXggcmVnaXN0 ZXJzIikNCiAgKGF0dHJzIFBST0ZJTEUgQ0FDSEUtQUREUikNCiAgKHR5cGUg cmVnaXN0ZXIgV0kgKDQpKQ0KICAoaW5kaWNlcyBleHRlcm4ta2V5d29yZCBp ci1uYW1lcykNCikNCg0KKGRlZmluZS1rZXl3b3JkDQogIChuYW1lIGdyMzIt bmFtZXMpDQogIChwcmludC1uYW1lIGgtZ3IzMikNCiAgKHByZWZpeCAiIikN CiAgKHZhbHVlcyAocjJyMCAwKSAocjNyMSAxKSkNCikNCg0KKGRlZmluZS1o YXJkd2FyZQ0KICAobmFtZSBoLWdyMzIpDQogIChjb21tZW50ICIzMiBiaXQg Y29tYmluZWQgZ2VuZXJhbCByZWdpc3RlcnMiKQ0KICAoYXR0cnMgVklSVFVB TCBQUk9GSUxFKQ0KICAodHlwZSByZWdpc3RlciBXSSAoMTYpKQ0KICAoaW5k aWNlcyBleHRlcm4ta2V5d29yZCBncjMyLW5hbWVzKQ0KICAoZ2V0IChpbmRl eCkgKGFkZCAocmVnIEhJIGgtZ3IgKGFkZCAobXVsIGluZGV4IDIpIDEpKQ0K ICAJCQkJCShzbGwgKHJlZyBISSBoLWdyIChtdWwgaW5kZXggMikpIDE2KSkp DQogIChzZXQgKGluZGV4IG5ld3ZhbCkgKHBhcmFsbGVsIDsgRklYTUUgZG8g Ym90aCBoYWx2ZXM/Pw0KICAJCShzZXQgKHN1YndvcmQgSEkgaC1nciAocmVn IGgtZ3IgaW5kZXgpIDE1IDE2KSBuZXd2YWwpKSkNCikNCg0KKGRlZmluZS1r ZXl3b3JkDQogIChuYW1lIGNyOC1uYW1lcykNCiAgKHByaW50LW5hbWUgaC1j cjgpDQogIChwcmVmaXggIiIpDQogICh2YWx1ZXMgKGRjdDAgMCkgKGRjdDEg MSkgKGZsZyAyKSAoc3ZmIDMpDQoJKGRyYzAgNCkgKGRyYzEgNSkgKGRtZDAg NikgKGRtZDEgNykpDQopDQoNCihkZWZpbmUtaGFyZHdhcmUNCiAgKG5hbWUg aC1jcjgpDQogIChjb21tZW50ICI4IGJpdCBjb250cm9sIHJlZ2lzdGVycyIp DQogIChhdHRycyBQUk9GSUxFIENBQ0hFLUFERFIpDQogICh0eXBlIHJlZ2lz dGVyIFFJICg4KSkNCiAgKGluZGljZXMgZXh0ZXJuLWtleXdvcmQgY3I4LW5h bWVzKQ0KKQ0KDQooZGVmaW5lLWtleXdvcmQNCiAgKG5hbWUgY3IyNGEtbmFt ZXMpDQogIChwcmludC1uYW1lIGgtY3IyNGEpDQogIChwcmVmaXggIiIpDQog ICh2YWx1ZXMgKGludGIgMCkgKHNwIDEpIChzYiAyKSAoZmIgMykgKHN2cCA0 KSAodmN0IDUpIChpc3AgNykpDQopDQoNCihkZWZpbmUtaGFyZHdhcmUNCiAg KG5hbWUgaC1jcjI0YSkNCiAgKGNvbW1lbnQgIjI0IGJpdCBjb250cm9sIHJl Z2lzdGVycyIpDQogIChhdHRycyBQUk9GSUxFIENBQ0hFLUFERFIpDQogICh0 eXBlIHJlZ2lzdGVyIFdJICg4KSkNCiAgKGluZGljZXMgZXh0ZXJuLWtleXdv cmQgY3IyNGEtbmFtZXMpDQopDQoNCihkZWZpbmUta2V5d29yZA0KICAobmFt ZSBjcjI0Yi1uYW1lcykNCiAgKHByaW50LW5hbWUgaC1jcjI0YikNCiAgKHBy ZWZpeCAiIikNCiAgKHZhbHVlcyAoZG1hMCAyKSAoZG1hMSAzKSAoZHJhMCA0 KSAoZHJhMSA1KSAoZHNhMCA2KSAoZHNhMSA3KSkNCikNCg0KKGRlZmluZS1o YXJkd2FyZQ0KICAobmFtZSBoLWNyMjRiKQ0KICAoY29tbWVudCAiMjQgYml0 IGNvbnRyb2wgcmVnaXN0ZXJzIikNCiAgKGF0dHJzIFBST0ZJTEUgQ0FDSEUt QUREUikNCiAgKHR5cGUgcmVnaXN0ZXIgV0kgKDgpKQ0KICAoaW5kaWNlcyBl eHRlcm4ta2V5d29yZCBjcjI0Yi1uYW1lcykNCikNCg0KKGRlZmluZS1oYXJk d2FyZQ0KICAobmFtZSBoLXNpemUpDQogIChjb21tZW50ICJzaXplIHN1ZmZp eCIpDQogICh0eXBlIGltbWVkaWF0ZSAoVUlOVCAxKSkNCiAgKHZhbHVlcyBr ZXl3b3JkICIuIiAoKGIgMCkgKHcgMSkgKSkNCikNCg0KOyBGb3IgY29uZGJp dCBvcGVyYW5kLiAgRklYTUU6IE5lZWQgdG8gYWxsb3cgc3BlYyBvZiBnZXQv c2V0IG9mIG9wZXJhbmRzLg0KOyBIYXZpbmcgdGhpcyBzZXBhcmF0ZSBmcm9t IGgtcHN3IGtlZXBzIHRoZSBwYXJ0cyB0aGF0IHVzZSBpdCBzaW1wbGVyDQo7 IFtzaW5jZSB0aGV5IGdyZWF0bHkgb3V0bnVtYmVyIHRob3NlIHRoYXQgdXNl IGgtcHN3XS4NCg0KKGRzaCBoLWNvbmQgImNvbmRpdGlvbiBiaXQiICgpIChy ZWdpc3RlciBCSSkpDQoNCihkbmggaC1wYyAicHJvZ3JhbSBjb3VudGVyIiAo UEMgUFJPRklMRSkgKHBjKSAoKSAoKSAoKSkNCg0KOyBvcGVyYW5kIGZpZWxk cw0KOyBjb3BpZWQgZnJvbSBpYTMyLmNwdQ0KOyBUaGVyZSBjdXJyZW50bHkg ZG9lc24ndCBleGlzdCBzaG9ydGhhbmQgbWFjcm9zIGZvciBDSVNDIElTQSdz LA0KOyBzbyBkZWZpbmUgb3VyIG93bi4NCjsgRElGOiBkZWZpbmUtaWEzMi1m aWVsZA0KOyBETklGOiBkZWZpbmUtbm9ybWFsLWlhMzItZmllbGQNCg0KKGRl ZmluZS1wbWFjcm8gKGRpZiB4LW5hbWUgeC1jb21tZW50IHgtYXR0cnMgeC13 b3JkLW9mZnNldCB4LXdvcmQtbGVuZ3RoIHgtc3RhcnQgeC1sZW5ndGggeC1t b2RlIHgtZW5jb2RlIHgtZGVjb2RlKQ0KICAoZGVmaW5lLWlmaWVsZA0KICAg IChuYW1lIHgtbmFtZSkNCiAgICAoY29tbWVudCB4LWNvbW1lbnQpDQogICAg KC5zcGxpY2UgYXR0cnMgKC51bnNwbGljZSB4LWF0dHJzKSkNCiAgICAod29y ZC1vZmZzZXQgeC13b3JkLW9mZnNldCkNCiAgICAod29yZC1sZW5ndGggeC13 b3JkLWxlbmd0aCkNCiAgICAoc3RhcnQgeC1zdGFydCkNCiAgICAobGVuZ3Ro IHgtbGVuZ3RoKQ0KICAgIChtb2RlIHgtbW9kZSkNCiAgICAoZW5jb2RlIHgt ZW5jb2RlKQ0KICAgIChkZWNvZGUgeC1kZWNvZGUpDQogICAgKQ0KKQ0KDQoo ZGVmaW5lLXBtYWNybyAoZG5pZiB4LW5hbWUgeC1jb21tZW50IHgtYXR0cnMg eC13b3JkLW9mZnNldCB4LXdvcmQtbGVuZ3RoIHgtc3RhcnQgeC1sZW5ndGgp DQogIChkaWYgeC1uYW1lIHgtY29tbWVudCB4LWF0dHJzIHgtd29yZC1vZmZz ZXQgeC13b3JkLWxlbmd0aCB4LXN0YXJ0IHgtbGVuZ3RoDQogICAgICAgVUlO VCAjZiAjZikNCikNCg0KOyBvcGVyYW5kIDEgbW9kZSBzZWxlY3QNCihkbmYg Zi1vcDFtICAgICAgIm9wMW0iICAgICAoKSA0IDEpDQo7IG9wZXJhbmQgMSBk aXNwbGFjZW1lbnQgc2l6ZSBzZWxlY3QNCihkbmYgZi1vcDFpICAgICAgIm9w MWkiICAgICAoKSA1IDIpDQo7IG9wZXJhbmQgMSByZWdpc3RlciBzZWxlY3QN CihkbmYgZi1vcDFyLSAgICAgICJvcDFyIiAgICAgKCkgMTUgMikNCjsgb3Bl cmFuZCAxIGFkZHJlc3MgbW9kZSBzZWxlY3QNCihkbmYgZi1vcDFhbSAgICAg Im9wMWFtIiAgICAoKSAxNSAxKQ0KOyBvcGVyYW5kIDEgYWRkcmVzcyByZWdp c3RlciBzZWxlY3QNCihkbmYgZi1vcDFhciAgICAgIm9wMWFyIiAgICAoKSAx NCAxKQ0KKGRlZmluZS1pZmllbGQNCiAgKG5hbWUgZi1vcDFyKQ0KICAoY29t bWVudCAib3AxciIpDQogIChhdHRycykNCiAgKHdvcmQtb2Zmc2V0IDApDQog ICh3b3JkLWxlbmd0aCA4KQ0KICAoc3RhcnQgMTUpDQogIChsZW5ndGggMikN CiAgKG1vZGUgVUlOVCkNCikNCg0KDQo7IGRpdG8gZm9yIG9wZXJhbmQgMg0K KGRuZiBmLW9wMm0gICAgICAib3AybSIgICAgICgpIDYgMSkNCihkbmYgZi1v cDJpICAgICAgIm9wMmkiICAgICAoKSA1IDIpDQooZG5mIGYtb3AyciAgICAg ICJvcDJyIiAgICAgKCkgMTMgMikNCjsoZG5tZiBmLW9wMiAgICAgICJvcDIi ICAgICAgKCkgVUlOVCAoZi1vcDJtIGYtb3AyaSBmLW9wMnIpICNmICNmKQ0K DQo7IG9wZXJhbmQgc2l6ZSBzZWxlY3QNCihkbmYgZi1zaXplICAgICAgInNp emUiICAgICAoKSAwIDEpDQoNCjsgY29uZGl0aW9uIHNlbGVjdA0KKGRuZiBm LWNvbmQgICAgICAiY29uZCIgICAgICgpIDEyIDQpDQoNCihkZWZpbmUtaWZp ZWxkDQogIChuYW1lIGYtZGlzcDgpDQogIChjb21tZW50ICJkaXNwOCIpDQog IChhdHRycykNCiAgKHdvcmQtb2Zmc2V0IDE2KQ0KICAod29yZC1sZW5ndGgg OCkNCiAgKHN0YXJ0IDcpDQogIChsZW5ndGggOCkNCiAgKG1vZGUgVUlOVCkN CikNCg0KKGRmIGYtZGlzcDgtICAgICAgImRpc3A4IiAgICAoKSAyMyA4IElO VCAjZiAjZikNCihkZiBmLWRpc3AxNiAgICAgImRpc3AxNiIgICAoKSAzMSAx NiBJTlQgI2YgI2YpDQooZGYgZi1kaXNwMjQgICAgICJkaXNwMjQiICAgKCkg MzkgMjQgSU5UICNmICNmKQ0KKGRub3AgZGlzcDggICAgICAiZGlzcDgiICAg ICgpIGgtaWFkZHIgZi1kaXNwOCkNCihkbm9wIGRpc3AxNiAgICAgImRpc3Ax NiIgICAoKSBoLWlhZGRyIGYtZGlzcDE2KQ0KKGRub3AgZGlzcDI0ICAgICAi ZGlzcDI0IiAgICgpIGgtaWFkZHIgZi1kaXNwMjQpDQoNCjsgSW5zdHJ1Y3Rp b24gZmllbGRzLg0KDQooZGVmaW5lLXBtYWNybyAoYnVpbGQtaGV4MSBudW0p ICguaGV4IG51bSAxKSkNCihkZWZpbmUtcG1hY3JvIChidWlsZC1oZXgyIG51 bSkgKC5oZXggbnVtIDIpKQ0KDQooZG5mIGYtb3Bjb2RlICJzaW5nbGUgaW5z biBieXRlIiAgICAgICAgICgpIDcgOCkNCihkZWZpbmUtaWZpZWxkDQogIChu YW1lIGYtb3BjMSkNCiAgKGNvbW1lbnQgIm9wYzEiKQ0KICAoYXR0cnMpDQog ICh3b3JkLW9mZnNldCAwKQ0KICAod29yZC1sZW5ndGggOCkNCiAgKHN0YXJ0 IDcpDQogIChsZW5ndGggNCkNCiAgKG1vZGUgVUlOVCkNCikNCihkZWZpbmUt aWZpZWxkDQogIChuYW1lIGYtb3BjMWIpDQogIChjb21tZW50ICJvcGMxYiIp DQogIChhdHRycykNCiAgKHdvcmQtb2Zmc2V0IDApDQogICh3b3JkLWxlbmd0 aCA4KQ0KICAoc3RhcnQgMTMpDQogIChsZW5ndGggNikNCiAgKG1vZGUgVUlO VCkNCikNCg0KKGRuZiBmLW9wYzEtICAgIm9wY29kZSBzaW5nbGUgb3BlcmFu ZCIgICAgKCkgNyA0KQ0KKGRuZiBmLW9wYzFiLSAgIm9wY29kZSBzaW5nbGUg b3BlcmFuZCAjMiIgKCkgMTMgNikNCihkbmYgZi1vcGMxbSAgIm9wY29kZSBt b2RlIiAgICAgICAgICAgICAgKCkgMyAzKQ0KKGRuZiBmLW9wY3MgICAib3Bj b2RlIHNpemUiICAgICAgICAgICAgICAoKSAwIDEpDQoNCg0KOyBpbnNuLW9w Y29kZQ0KOyAiMDAiIC4uLiAiRkYiDQo7KGRlZmluZS1ub3JtYWwtaW5zbi1l bnVtIGluc24tb3Bjb2RlICJpbnNuIG9wY29kZSBlbnVtcyIgKCkgT1BfIGYt b3Bjb2RlDQo7ICAoLm1hcCAudXBjYXNlICgubWFwIGJ1aWxkLWhleDIgKC5p b3RhIDI1NikpKQ0KOykNCg0KOyBpbnNuLW9wMTogYml0cyA3LTQNCihkZWZp bmUtbm9ybWFsLWluc24tZW51bSBpbnNuLW9wMSAiaW5zbiBvcGNvZGUgZW51 bXMgKDEgb3ApIiAoKSBPUDFfIGYtb3BjMQ0KICAoLm1hcCAudXBjYXNlICgu bWFwIGJ1aWxkLWhleDEgKC5pb3RhIDE2KSkpDQopDQo7IGluc24tb3AxOiBi aXRzIDEzLTgNCjsoZGVmaW5lLW5vcm1hbC1pbnNuLWVudW0gaW5zbi1vcDFi ICJpbnNuIG9wY29kZSBlbnVtcyAoMSBvcCwgIzIpIiAoKSBPUDFCXyBmLW9w YzFiDQo7ICAoLm1hcCAudXBjYXNlICgubWFwIGJ1aWxkLWhleDIgKC5pb3Rh IDY0KSkpDQo7KQ0KOyBpbnNuLW9wMW06IGJpdHMgMy0xDQooZGVmaW5lLW5v cm1hbC1pbnNuLWVudW0gaW5zbi1vcDFtICJpbnNuIG9wY29kZSBtb2RlcyAo MSBvcCkiICgpIE9QMU1fIGYtb3BjMW0NCgkoIkEiICI4QSIgIjE2QSIgIjI0 QSIgIlIiKQ0KKQ0KOyBpbnNuLW9wMXM6IGJpdCAwDQooZGVmaW5lLW5vcm1h bC1pbnNuLWVudW0gaW5zbi1vcDFzICJpbnNuIG9wY29kZSBzaXplIiAoKSBP UFNfIGYtb3Bjcw0KCSgiQiIgIlciKQ0KKQ0KOyBpbnNuLW9wMWFtOiBiaXQg MTUNCihkZWZpbmUtbm9ybWFsLWluc24tZW51bSBpbnNuLW9wMWFtICJpbnNu IG9wY29kZSBhZGRyZXNzIG1vZGUgKDEgb3ApIiAoKSBPUDFBTV8gZi1vcDFh bQ0KCSgiSSIgIkQiKSA7IGRpcmVjdC9pbmRpcmVjdCBhMC9hMSByZXNwZWN0 aXZlbHkgW2EwXS9bYTFdDQopDQoNCihkZWZpbmUtYXR0cg0KICAoZm9yIG9w ZXJhbmQpDQogICh0eXBlIGJvb2xlYW4pDQogIChuYW1lIEhBU0gtUFJFRklY KQ0KICAoY29tbWVudCAiaW1tZWRpYXRlcyBoYXZlIGFuIG9wdGlvbmFsICcj JyBwcmVmaXgiKQ0KKQ0KDQooZG5vcCBzciAgICAgInNvdXJjZSByZWdpc3Rl ciIgICAgICAgICAgICAgICgpIGgtZ3IgICBmLW9wMnIpDQooZG5vcCBkciAg ICAgImRlc3RpbmF0aW9uIHJlZ2lzdGVyIiAgICAgICAgICgpIGgtZ3IgICBm LW9wMXIpDQooZG5vcCBzcjggICAgInNvdXJjZSByZWdpc3RlciIgICAgICAg ICAgICAgICgpIGgtZ3I4ICBmLW9wMnIpDQooZG5vcCBkcjggICAgImRlc3Rp bmF0aW9uIHJlZ2lzdGVyIiAgICAgICAgICgpIGgtZ3I4ICBmLW9wMXIpDQoo ZG5vcCBpciAgICAgImluZGV4IHJlZ2lzdGVyIiAgICAgICAgICAgICAgICgp IGgtaXIgICBmLW9wMXIpDQooZG5vcCBhciAgICAgImFkZHJlc3MgcmVnaXN0 ZXIiICAgICAgICAgICAgICgpIGgtYXIgICBmLW9wMWFyKQ0KDQooZG5vcCBz aXplICAgInNpemUgc3VmZml4IiAgICAgICAgICAgICAgICAgICgpIGgtc2l6 ZSBmLW9wY3MpDQoNCjsoZG5vcCBzaSAgICAgInNvdXJjZSBpbmRpcmVjdCIg ICAgICAgICAgICAgICgpIGgtZ3IgICBmLW9wMnIpDQo7KGRub3AgZGkgICAg ICJkZXN0aW5hdGlvbiBpbmRpcmVjdCIgICAgICAgICAoKSBoLWdyICAgZi1v cDFyKQ0KDQo7IEluc3RydWN0aW9ucw0KDQooZG5pIG5vcCAibm9wIg0KICAg ICAoKQ0KICAgICAibm9wIg0KICAgICAoKyAoZi1vcGNvZGUgI3hERSkpDQog ICAgIChub3ApDQogICAgICgpDQopDQoNCjtORUcuc2l6ZSAxMDEwZGRkUyBk ZDEwMTExMQ0KOyBkZGQ9MTAwIGZvciByOC9yMTYNCihkbmkgbmVnICJuZWci DQogICAgICgpDQogICAgICJuZWcudyAkZHIiDQogICAgICgrIChmLW9wYzEg I3hBKSBPUDFNX1IgT1BTX1cgKGYtb3BjMWIgI3gyZikgZHIpDQogICAgIChz ZXQgZHIgKG5lZyBkcikpDQogICAgICgpDQopDQooZG5taSBuZWctICJuZWcg YWxpYXMiDQogICAgIChOTy1ESVMpDQogICAgICJuZWcgJGRyIg0KICAgICAo ZW1pdCBuZWcgZHIpDQopDQoNCihkbmkgbmVnOCAibmVnOCINCiAgICAgKCkN CiAgICAgIm5lZy5iICRkcjgiDQogICAgICgrIChmLW9wYzEgI3hBKSBPUDFN X1IgT1BTX0IgKGYtb3BjMWIgI3gyZikgZHI4KQ0KICAgICAoc2V0IGRyOCAo bmVnIGRyOCkpDQogICAgICgpDQopDQooZG5taSBuZWc4LSAibmVnOCBhbGlh cyINCiAgICAgKE5PLURJUykNCiAgICAgIm5lZyAkZHI4Ig0KICAgICAoZW1p dCBuZWc4IGRyOCkNCikNCg0KKGRuaSBuZWdhICJuZWdhIg0KICAgICAoKQ0K ICAgICAibmVnLncgJGFyIg0KICAgICAoKyAoZi1vcGMxICN4QSkgT1AxTV9B IE9QU19XIChmLW9wYzFiICN4MkYpIE9QMUFNX0QgYXIpDQogICAgIChzZXQg YXIgKGFuZCAobmVnIGFyKSA2NTUzNSkpDQogICAgICgpDQopDQooZG5taSBu ZWdhLSAibmVnYSBhbGlhcyINCiAgICAgKE5PLURJUykNCiAgICAgIm5lZyAk YXIiDQogICAgIChlbWl0IG5lZ2EgYXIpDQopDQoNCjsgZGRkPTAwMDEgZm9y IGEwL2ExDQooZG5pIG5lZ2FpdyAibmVnYWl3Ig0KICAgICAoKQ0KICAgICAi bmVnJHNpemUgWyRhcl0iDQogICAgICgrIChmLW9wYzEgI3hBKSBPUDFNX0Eg c2l6ZSAoZi1vcGMxYiAjeDJGKSBPUDFBTV9JIGFyKQ0KICAgICAoaWYgc2l6 ZQ0KICAgICAJKHNldCAobWVtIEhJIGFyKSAobmVnIChtZW0gSEkgYXIpKSkN CiAgICAgCShzZXQgKG1lbSBRSSBhcikgKG5lZyAobWVtIFFJIGFyKSkpDQog ICAgICkNCiAgICAgKCkNCikNCg0KKGRuaSBuZWdpOCAibmVnaTgiDQogICAg IChSRUxBWEFCTEUpDQogICAgICJuZWckc2l6ZSAkZGlzcDhbJGlyXSINCiAg ICAgKCsgKGYtb3BjMSAjeEEpIE9QMU1fOEEgc2l6ZSAoZi1vcGMxYiAjeDJG KSBpciBkaXNwOCkNCiAgICAgKGlmIHNpemUNCiAgICAgCShzZXQgKG1lbSBI SSAoYWRkIGlyIGRpc3A4KSkgKG5lZyAobWVtIEhJIChhZGQgaXIgZGlzcDgp KSkpDQogICAgIAkoc2V0IChtZW0gUUkgKGFkZCBpciBkaXNwOCkpIChuZWcg KG1lbSBRSSAoYWRkIGlyIGRpc3A4KSkpKQ0KICAgICApDQogICAgICgpDQop DQo7KGRubWkgbmVnYi0gIm5lZy5YIDBbJGJyXSBhbGlhcyINCjsgICAgIChO Ty1ESVMpDQo7ICAgICAibmVnJHNpemUgWyRicl0iDQo7ICAgICAoZXhwYW5k IG5lZyQxIDBbJDJdKQ0KOykNCg0KDQooZG5pIG5lZ2kxNiAibmVnaTE2Ig0K ICAgICAoKQ0KICAgICAibmVnJHNpemUgJGRpc3AxNlskaXJdIg0KICAgICAo KyAoZi1vcGMxICN4QSkgT1AxTV8xNkEgc2l6ZSAoZi1vcGMxYiAjeDJGKSBp ciBkaXNwMTYpDQogICAgIChpZiBzaXplDQogICAgIAkoc2V0IChtZW0gSEkg KGFkZCBpciBkaXNwMTYpKSAobmVnIChtZW0gSEkgKGFkZCBpciBkaXNwMTYp KSkpDQogICAgIAkoc2V0IChtZW0gUUkgKGFkZCBpciBkaXNwMTYpKSAobmVn IChtZW0gUUkgKGFkZCBpciBkaXNwMTYpKSkpDQogICAgICkNCiAgICAgKCkN CikNCg0KDQoNCg0KDQoNCg== --2005231591-851401618-1044971068=:21013--