Re: Re: simulated arm/gripper
Tim Oates <[email protected]> Mon, 25 Jul 2005 14:34:57 -0400 (EDT)
| Newsgroups | gmane.comp.breve |
|---|---|
| Message-ID | <Pine.LNX.4.30.0507251426180.19617-101000@ite336-pc-01.cs.umbc.edu> |
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 [email protected] for more info. --1434600542-14261042-1122316497=:19617 Content-Type: TEXT/PLAIN; charset=US-ASCII Andrei, Attached to this mail is a tar file with my current arm code. Just untar it and run breve on ArmDemo.tz. You'll have to use the latest breve beta or the servo classes I wrote won't work correctly. The code isn't as clean as I'd like, but it should be pretty readable. As for instability, I have noticed that small changes in the order in which things are linked or the choice of the root link can lead to dramatically different behaviors. In some cases, however, I've done dumb things like fixing the arm at a point that's closer to the floor than the arm is long, and the simulation does the best it can to deal with that, which usually involves lots of flailing around. Comments/questions on the attached code are welcome. One kink I'd like to work out has to do with orienting the arm. I've got a method called "attach" that allows you to specify a link and location on the link where you'd like the arm to be attached. I'd also like to specify an orientation. If I use set-relative-rotation, I get the orientation, but the physics engine tries to swing the arm from its current orientation to the new one in one tick, and the arm flails wildly as it tries to return its joints to their nominal positions. I'd like to know how to rotate the arm without having this happen. I suspect it might have something to do with the timing of the set-relative-rotation, e.g. before the other components of the arm are linked together. - tim On Mon, 25 Jul 2005, Andrei Androsoff wrote: > Tim, all, > > I've been trying to build an articulated arm too and have been > running into a lot of problems with the physics engine. It seems that > if I add too many links to my MultiBody, the arm tends to fly apart > or fly away (!) when the simulation starts (often preceded by a > painful-looking squirming and wiggling). If I tweak the physical > dimensions of the Joints or Shapes it often removes the problem, > until I move a particular joint too far, and then the machine flies > apart. > > Sometimes the coordinate system of child objects seems to get messed > up as well - moving a parent object will cause the child to rotate > (e.g. flexing your elbow will cause your wrist to twist). Again if > you make the joint a little bigger or longer, keeping the normals the > same, the problem will go away or get worse). I don't know of any > more genteel way to put it other than the physics engine is "freaking > out". > > I have also built walking robots and experienced similar problems. > The behaviour is sometimes determinate (same thing happens every time > you start the sim) but sometimes it actually varies between runs (no > random numbers in the code of course). > > Tim, since you say your arm works, did you run into anything like > this? Any pointers? Does anybody else experience these things? > > By the way, I'm not enabling self-collisions and I'm not using set- > relative-rotation for any of the joints. All my joints are instances > of a subclass of RevoluteJoint. > > I know this screams for a code example but I want to clean it up a > bit and see if there is any obvious fix in the meantime. > > Andrei > > > _______________________________________________ > breve mailing list > [email protected] > http://lists.spiderland.org/mailman/listinfo/breve > --------------------------------------- Tim Oates, Assistant Professor Department of CS and EE University of Maryland Baltimore County (410) 455-3082 http://www.cs.umbc.edu/~oates --1434600542-14261042-1122316497=:19617 Content-Type: APPLICATION/x-tar; name="demo.tar" Content-Transfer-Encoding: BASE64 Content-ID: <[email protected]> Content-Description: Content-Disposition: attachment; filename="demo.tar" ZGVtby8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAADAwNDA3NTUAMDAwMjAwMgAwMDAwMDI0ADAwMDAwMDAwMDAw ADEwMjcxMjI3MzQxADAxMDc2NQAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG9hdGVz AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3RhZmYAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAABkZW1vL0FybS50egAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAyMDAyADAw MDAwMjQAMDAwMDAwMTYyNDAAMTAyNzEyMjcxMzYAMDEyMDY1ACAwAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAHVzdGFyICAAb2F0ZXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz dGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMKIyBBIDYgRE9G IGFybSAoMiBET0Ygc2hvdWxkZXIsIDEgRE9GIGVsYm93LCAyIERPRiB3cmlz dCwgMSBET0YgZ3JpcHBlcikuCiMKCkB1c2UgSm9pbnQuCkB1c2UgTXVsdGlC b2R5LgpAdXNlIExpbmsuCkB1c2UgU2hhcGUuCkB1c2UgU3RhdGlvbmFyeS4K QHVzZSBSZXZvbHV0ZVNlcnZvLgpAdXNlIFVuaXZlcnNhbFNlcnZvLgoKCgpA ZGVmaW5lIEJBU0VfSEVJR0hUIDAuMS4KCgoKTXVsdGlCb2R5IDogQXJtIHsK CgogICAgKyB2YXJpYWJsZXM6CgogICAgICAgIGJhc2UsIGJhc2VTaGFwZSAo b2JqZWN0KS4gICAgICAgICAgICAgICAgICAgICAjIEJhc2UKICAgICAgICB1 cHBlcmFybSwgdXBwZXJhcm1TaGFwZSAob2JqZWN0KS4gICAgICAgICAgICAg IyBVcHBlciBhcm0KICAgICAgICBmb3JlYXJtLCBmb3JlYXJtU2hhcGUgKG9i amVjdCkuICAgICAgICAgICAgICAgIyBGb3JlYXJtCiAgICAgICAgcGFsbSwg cGFsbVNoYXBlIChvYmplY3QpLiAgICAgICAgICAgICAgICAgICAgICMgUGFs bQogICAgICAgIGdyaXBwZXIxLCBncmlwcGVyMiwgZ3JpcHBlclNoYXBlIChv YmplY3QpLiAgICAjIEdyaXBwZXJzCiAgICAgICAgYmFzZUpvaW50LCBzaG91 bGRlciwgZWxib3csIHdyaXN0IChvYmplY3QpLiAgICMgSm9pbnRzCiAgICAg ICAgcHJpc21hdGljMSwgcHJpc21hdGljMiAob2JqZWN0KS4gICAgICAgICAg ICAgICMgSm9pbnRzCiAgICAgICAgdXBwZXJhcm1MZW5ndGgsIHBhbG1XaWR0 aCwgd2lkdGggKGZsb2F0KS4KICAgICAgICBncmlwcGVyUG9zaXRpb24gKGZs b2F0KS4KICAgICAgICBqb2ludFZlbG9jaXR5LCBncmlwcGVyVmVsb2NpdHkg KGZsb2F0KS4KCgogICAgIwogICAgIyBBcm1zIG11c3QgYmUgaW5pdGlhbGl6 ZWQgdXNpbmcgdGhpcyBtZXRob2QgdG8gc3BlY2lmaXkgcGFyYW1ldGVycwog ICAgIwogICAgKyB0byBpbml0LXdpdGggdXBwZXJhcm1MZW5ndGggdGhlVXBw ZXJhcm1MZW5ndGggKGZsb2F0KQogICAgICAgICAgICAgICAgICAgZm9yZWFy bUxlbmd0aCB0aGVGb3JlYXJtTGVuZ3RoIChmbG9hdCkKICAgICAgICAgICAg ICAgICAgIHBhbG1XaWR0aCB0aGVQYWxtV2lkdGggKGZsb2F0KQogICAgICAg ICAgICAgICAgICAgZ3JpcHBlckxlbmd0aCB0aGVHcmlwcGVyTGVuZ3RoIChm bG9hdCkKICAgICAgICAgICAgICAgICAgIHdpZHRoIHRoZVdpZHRoIChmbG9h dCkKICAgICAgICAgICAgICAgICAgIGNvbG9yIHRoZUNvbG9yID0gKDAuMywg MC4zLCAwLjMpICh2ZWN0b3IpOgoKICAgICAgICAjIENyZWF0ZSBTaGFwZXMK ICAgICAgICBiYXNlU2hhcGUgPSAKICAgICAgICAgIChuZXcgQ3ViZSBpbml0 LXdpdGggc2l6ZSAoMiAqIHRoZVdpZHRoLCBCQVNFX0hFSUdIVCwgMiAqIHRo ZVdpZHRoKSkuCiAgICAgICAgdXBwZXJhcm1TaGFwZSA9IAogICAgICAgICAg KG5ldyBDdWJlIGluaXQtd2l0aCBzaXplICh0aGVXaWR0aCwgdGhlVXBwZXJh cm1MZW5ndGgsIHRoZVdpZHRoKSkuCiAgICAgICAgZm9yZWFybVNoYXBlID0g CiAgICAgICAgICAobmV3IEN1YmUgaW5pdC13aXRoIHNpemUgKHRoZVdpZHRo LCB0aGVGb3JlYXJtTGVuZ3RoLCB0aGVXaWR0aCkpLgogICAgICAgIHBhbG1T aGFwZSA9IAogICAgICAgICAgKG5ldyBDdWJlIGluaXQtd2l0aCBzaXplICh0 aGVQYWxtV2lkdGgsIHRoZVdpZHRoLCB0aGVXaWR0aCkpLgogICAgICAgIGdy aXBwZXJTaGFwZSA9IAogICAgICAgICAgKG5ldyBDdWJlIGluaXQtd2l0aCBz aXplICh0aGVXaWR0aCwgdGhlR3JpcHBlckxlbmd0aCwgdGhlV2lkdGgpKS4K CiAgICAgICAgIyBDcmVhdGUgbGlua3MKICAgICAgICBiYXNlID0gbmV3IExp bmsuCiAgICAgICAgdXBwZXJhcm0gPSBuZXcgTGluay4KICAgICAgICBmb3Jl YXJtID0gbmV3IExpbmsuCiAgICAgICAgcGFsbSA9IG5ldyBMaW5rLgogICAg ICAgIGdyaXBwZXIxID0gbmV3IExpbmsuCiAgICAgICAgZ3JpcHBlcjIgPSBu ZXcgTGluay4KCiAgICAgICAgIyBJbml0aWFsaXplIHNoYXBlcwogICAgICAg IGJhc2Ugc2V0LXNoYXBlIHRvIGJhc2VTaGFwZS4KICAgICAgICB1cHBlcmFy bSBzZXQtc2hhcGUgdG8gdXBwZXJhcm1TaGFwZS4KICAgICAgICBmb3JlYXJt IHNldC1zaGFwZSB0byBmb3JlYXJtU2hhcGUuCiAgICAgICAgcGFsbSBzZXQt c2hhcGUgdG8gcGFsbVNoYXBlLgogICAgICAgIGdyaXBwZXIxIHNldC1zaGFw ZSB0byBncmlwcGVyU2hhcGUuCiAgICAgICAgZ3JpcHBlcjIgc2V0LXNoYXBl IHRvIGdyaXBwZXJTaGFwZS4KCiAgICAgICAgIyBJbml0aWFsaXplIGNvbG9y cwogICAgICAgIGJhc2Ugc2V0LWNvbG9yIHRvIHRoZUNvbG9yLgogICAgICAg IHVwcGVyYXJtIHNldC1jb2xvciB0byB0aGVDb2xvci4KICAgICAgICBmb3Jl YXJtIHNldC1jb2xvciB0byB0aGVDb2xvci4KICAgICAgICBwYWxtIHNldC1j b2xvciB0byB0aGVDb2xvci4KICAgICAgICBncmlwcGVyMSBzZXQtY29sb3Ig dG8gdGhlQ29sb3IuCiAgICAgICAgZ3JpcHBlcjIgc2V0LWNvbG9yIHRvIHRo ZUNvbG9yLgoKICAgICAgICAjIE1pc2MgaW5pdGlhbGl6YXRpb25zCiAgICAg ICAgZ3JpcHBlcjEgc2V0LW11IHRvIDEwMDAwMC4wLgogICAgICAgIGdyaXBw ZXIyIHNldC1tdSB0byAxMDAwMDAuMC4KCiAgICAgICAgIyBDb25uZWN0IGJh c2UgYW5kIHVwcGVyIGFybSB2aWEgc2hvdWxkZXIgICAgICAgIAogICAgICAg IHNob3VsZGVyID0gbmV3IFVuaXZlcnNhbFNlcnZvLgogICAgICAgIHNob3Vs ZGVyIGxpbmsgcGFyZW50IGJhc2UgdG8tY2hpbGQgdXBwZXJhcm0KICAgICAg ICAgICAgICAgICB3aXRoLXBhcmVudC1wb2ludCAoMCwgLUJBU0VfSEVJR0hU LCAwKSAKICAgICAgICAgICAgICAgICB3aXRoLWNoaWxkLXBvaW50ICgwLCB0 aGVVcHBlcmFybUxlbmd0aC8yLCAwKSAKICAgICAgICAgICAgICAgICB3aXRo LW5vcm1hbCAoMCwgMSwgMCkuCiAgICAgICAgc2hvdWxkZXIgc2V0LXN0cmVu Z3RoLWxpbWl0IHRvIChzaG91bGRlciBnZXQtc3RyZW5ndGgtaGFyZC1saW1p dCkuCgogICAgICAgICMgQ29ubmVjdCB1cHBlciBhcm0gYW5kIGZvcmVhcm0g dmlhIGVsYm93CiAgICAgICAgZWxib3cgPSBuZXcgUmV2b2x1dGVTZXJ2by4K ICAgICAgICBlbGJvdyBsaW5rIHBhcmVudCB1cHBlcmFybSB0by1jaGlsZCBm b3JlYXJtCiAgICAgICAgICAgICAgICAgICB3aXRoLXBhcmVudC1wb2ludCAo MCwgLXRoZVVwcGVyYXJtTGVuZ3RoLzIsIDApIAogICAgICAgICAgICAgICAg ICAgd2l0aC1jaGlsZC1wb2ludCAoMCwgdGhlRm9yZWFybUxlbmd0aC8yLCAw KSAKICAgICAgICAgICAgICAgICAgIHdpdGgtbm9ybWFsICgxLCAwLCAwKS4K ICAgICAgICBlbGJvdyBzZXQtc3RyZW5ndGgtbGltaXQgdG8gKGVsYm93IGdl dC1zdHJlbmd0aC1oYXJkLWxpbWl0KS4KCiAgICAgICAgIyBDb25uZWN0IGZv cmVhcm0gYW5kIHBhbG0gdmlhIHdyaXN0CiAgICAgICAgd3Jpc3QgPSBuZXcg VW5pdmVyc2FsU2Vydm8uCiAgICAgICAgd3Jpc3QgbGluayBwYXJlbnQgZm9y ZWFybSB0by1jaGlsZCBwYWxtCiAgICAgICAgICAgICAgICAgICB3aXRoLXBh cmVudC1wb2ludCAoMCwgLXRoZUZvcmVhcm1MZW5ndGgvMiwgMCkgCiAgICAg ICAgICAgICAgICAgICB3aXRoLWNoaWxkLXBvaW50ICgwLCAwLCAwKSAKICAg ICAgICAgICAgICAgICAgIHdpdGgtbm9ybWFsICgwLCAxLCAwKS4KICAgICAg ICB3cmlzdCBzZXQtc3RyZW5ndGgtbGltaXQgdG8gKHdyaXN0IGdldC1zdHJl bmd0aC1oYXJkLWxpbWl0KS4KCiAgICAgICAgIyBDb25uZWN0IGdyaXBwZXIg dG8gcGFsbSB2aWEgcHJpc21hdGljIGpvaW50CiAgICAgICAgcHJpc21hdGlj MSA9IG5ldyBQcmlzbWF0aWNKb2ludC4KICAgICAgICBwcmlzbWF0aWMxIGxp bmsgcGFyZW50IHBhbG0gdG8tY2hpbGQgZ3JpcHBlcjEKICAgICAgICAgICAg ICAgICAgICB3aXRoLW5vcm1hbCAoMSwgMCwgMCkKICAgICAgICAgICAgICAg ICAgICB3aXRoLXBhcmVudC1wb2ludCAoLXRoZVBhbG1XaWR0aC8yLCB0aGVX aWR0aC8yLCAwKQogICAgICAgICAgICAgICAgICAgIHdpdGgtY2hpbGQtcG9p bnQgKDAsIHRoZUdyaXBwZXJMZW5ndGgvMiwgMCkuCiAgICAgICAgcHJpc21h dGljMSBzZXQtc3RyZW5ndGgtbGltaXQgdG8gKHByaXNtYXRpYzEgZ2V0LXN0 cmVuZ3RoLWhhcmQtbGltaXQpLgogICAgICAgIHByaXNtYXRpYzEgc2V0LWpv aW50LWxpbWl0cyAKICAgICAgICAgICAgICAgICAgIG1heCAwLjAKICAgICAg ICAgICAgICAgICAgIG1pbiAtdGhlUGFsbVdpZHRoLzIgKyB0aGVXaWR0aC8y LgoKICAgICAgICAjIENvbm5lY3QgZ3JpcHBlciB0byBwYWxtIHZpYSBwcmlz bWF0aWMgam9pbnQKICAgICAgICBwcmlzbWF0aWMyID0gbmV3IFByaXNtYXRp Y0pvaW50LgogICAgICAgIHByaXNtYXRpYzIgbGluayBwYXJlbnQgcGFsbSB0 by1jaGlsZCBncmlwcGVyMgogICAgICAgICAgICAgICAgICAgd2l0aC1ub3Jt YWwgKDEsIDAsIDApCiAgICAgICAgICAgICAgICAgICB3aXRoLXBhcmVudC1w b2ludCAodGhlUGFsbVdpZHRoLzIsIHRoZVdpZHRoLzIsIDApCiAgICAgICAg ICAgICAgICAgICB3aXRoLWNoaWxkLXBvaW50ICgwLCB0aGVHcmlwcGVyTGVu Z3RoLzIsIDApLgogICAgICAgIHByaXNtYXRpYzIgc2V0LXN0cmVuZ3RoLWxp bWl0IHRvIChwcmlzbWF0aWMyIGdldC1zdHJlbmd0aC1oYXJkLWxpbWl0KS4K ICAgICAgICBwcmlzbWF0aWMyIHNldC1qb2ludC1saW1pdHMgbWluIDAuMCAK ICAgICAgICAgICAgICAgICAgIG1heCB0aGVQYWxtV2lkdGgvMiAtIHRoZVdp ZHRoLzIuCgogICAgICAgICMgQ3JlYXRlIGJhc2Ugam9pbnQuCiAgICAgICAg YmFzZUpvaW50ID0gbmV3IEZpeGVkSm9pbnQuCgogICAgICAgICMgU3RvcmUg c29tZSB2YWx1ZXMgZm9yIHVzZSBieSBvdGhlciBtZXRob2RzCiAgICAgICAg dXBwZXJhcm1MZW5ndGggPSB0aGVVcHBlcmFybUxlbmd0aC4KICAgICAgICBw YWxtV2lkdGggPSB0aGVQYWxtV2lkdGguCiAgICAgICAgd2lkdGggPSB0aGVX aWR0aC4KICAgICAgICBncmlwcGVyUG9zaXRpb24gPSAxLgogICAgICAgIGpv aW50VmVsb2NpdHkgPSAxLgogICAgICAgIGdyaXBwZXJWZWxvY2l0eSA9IDAu NS4KCiAgICAgICAgc2VsZiBzZXQtcm9vdCB0byBiYXNlLgoKICAgICAgICBy ZXR1cm4gc2VsZi4KCgogICMgCiAgIyBBdHRhY2ggdGhlIGFybSB0byB0aGVQ YXJlbnQgb2JqZWN0IGF0IHRoZUxvY2F0aW9uIG9uIHBhcmVudAogICMKICAr IHRvIGF0dGFjaCB0byB0aGVQYXJlbnQgKG9iamVjdCkgYXQgdGhlTG9jYXRp b24gKHZlY3Rvcik6CgogICAgICAgYmFzZUpvaW50IGxpbmsgcGFyZW50IHRo ZVBhcmVudCB0by1jaGlsZCBiYXNlIAogICAgICAgICAgICAgICAgICAgICAg d2l0aC1wYXJlbnQtcG9pbnQgdGhlTG9jYXRpb24KICAgICAgICAgICAgICAg ICAgICAgIHdpdGgtY2hpbGQtcG9pbnQgKDAsIC11cHBlcmFybUxlbmd0aC8y LCAwKS4KCgogICsgdG8gc2V0LWpvaW50LXZlbG9jaXR5IHRvIHRoZVZlbG9j aXR5IChmbG9hdCk6CgogICAgICBqb2ludFZlbG9jaXR5ID0gdGhlVmVsb2Np dHkuCgoKICArIHRvIHNldC1ncmlwcGVyLXZlbG9jaXR5IHRvIHRoZVZlbG9j aXR5IChmbG9hdCk6CiAKICAgICAgZ3JpcHBlclZlbG9jaXR5ID0gdGhlVmVs b2NpdHkuCgoKICArIHRvIHNldC1lbGJvdy1hbmdsZSB0byBhbmdsZSAoZmxv YXQpOgoKICAgICAgZWxib3cgc2V0LWFuZ2xlIHRvIGFuZ2xlLgoKCiAgKyB0 byBzZXQtd3Jpc3QtYW5nbGUxIHRvIGFuZ2xlIChmbG9hdCk6CgogICAgICB3 cmlzdCBzZXQtYW5nbGUxIHRvIGFuZ2xlLgoKCiAgKyB0byBzZXQtd3Jpc3Qt YW5nbGUyIHRvIGFuZ2xlIChmbG9hdCk6CgogICAgICB3cmlzdCBzZXQtYW5n bGUyIHRvIGFuZ2xlLgoKCiAgKyB0byBzZXQtc2hvdWxkZXItYW5nbGUxIHRv IGFuZ2xlIChmbG9hdCk6CgogICAgICBzaG91bGRlciBzZXQtYW5nbGUxIHRv IGFuZ2xlLgoKCiAgKyB0byBzZXQtc2hvdWxkZXItYW5nbGUyIHRvIGFuZ2xl IChmbG9hdCk6CgogICAgICBzaG91bGRlciBzZXQtYW5nbGUyIHRvIGFuZ2xl LgoKCiAgKyB0byBzZXQtZ3JpcHBlci1wb3NpdGlvbiB0byBwb3NpdGlvbiAo ZmxvYXQpOgoKICAgICAgIGdyaXBwZXJQb3NpdGlvbiA9IHBvc2l0aW9uLgoK CiAgKyB0byBpdGVyYXRlOgoKICAgICAgIHBvc2l0aW9uMSwgcG9zaXRpb24y IChmbG9hdCkuICAgIyBDdXJyZW50IGdyaXBwZXIgcG9zaXRpb25zCiAgICAg ICB0YXJnZXQxLCB0YXJnZXQyIChmbG9hdCkuICAgICAgICMgVGFyZ2V0IGdy aXBwZXIgcG9zaXRpb25zCgoKICAgICAgICMgVXBkYXRlIGpvaW50IHZlbG9j aXRpZXMKICAgICAgIHNob3VsZGVyIHNldC12ZWxvY2l0eSB0byBqb2ludFZl bG9jaXR5LgogICAgICAgZWxib3cgc2V0LXZlbG9jaXR5IHRvIGpvaW50VmVs b2NpdHkuCiAgICAgICB3cmlzdCBzZXQtdmVsb2NpdHkgdG8gam9pbnRWZWxv Y2l0eS4KCgogICAgICAgIyBDb21wdXRlIGFuZCBzZXQgdmVsb2NpdHkgZm9y IGdyaXBwZXIxCiAgICAgICBwb3NpdGlvbjEgPSAocHJpc21hdGljMSBnZXQt am9pbnQtcG9zaXRpb24pLgogICAgICAgdGFyZ2V0MSA9IC0oMSAtIGdyaXBw ZXJQb3NpdGlvbikgKiAocGFsbVdpZHRoLzIgLSB3aWR0aC8yKS4KCiAgICAg ICBpZiAoYWJzKHBvc2l0aW9uMSAtIHRhcmdldDEpIDwgMC4wNSkgOiB7CiAg ICAgICAgIHByaXNtYXRpYzEgc2V0LWpvaW50LXZlbG9jaXR5IHRvIDAuCiAg ICAgICB9IGVsc2UgewogICAgICAgICBpZiAocG9zaXRpb24xIDwgdGFyZ2V0 MSkgOgogICAgICAgICAgIHByaXNtYXRpYzEgc2V0LWpvaW50LXZlbG9jaXR5 IHRvIGdyaXBwZXJWZWxvY2l0eS4KICAgICAgICAgZWxzZQogICAgICAgICAg IHByaXNtYXRpYzEgc2V0LWpvaW50LXZlbG9jaXR5IHRvIC1ncmlwcGVyVmVs b2NpdHkuCiAgICAgICB9CgoKICAgICAgICMgQ29tcHV0ZSBhbmQgc2V0IHZl bG9jaXR5IGZvciBncmlwcGVyMgogICAgICAgcG9zaXRpb24yID0gKHByaXNt YXRpYzIgZ2V0LWpvaW50LXBvc2l0aW9uKS4KICAgICAgIHRhcmdldDIgPSAo MSAtIGdyaXBwZXJQb3NpdGlvbikgKiAocGFsbVdpZHRoLzIgLSB3aWR0aC8y KS4KCiAgICAgICBpZiAoYWJzKHBvc2l0aW9uMiAtIHRhcmdldDIpIDwgMC4w NSkgOiB7CiAgICAgICAgIHByaXNtYXRpYzIgc2V0LWpvaW50LXZlbG9jaXR5 IHRvIDAuCiAgICAgICB9IGVsc2UgewogICAgICAgICBpZiAocG9zaXRpb24y IDwgdGFyZ2V0MikgOgogICAgICAgICAgIHByaXNtYXRpYzIgc2V0LWpvaW50 LXZlbG9jaXR5IHRvIGdyaXBwZXJWZWxvY2l0eS4KICAgICAgICAgZWxzZQog ICAgICAgICAgIHByaXNtYXRpYzIgc2V0LWpvaW50LXZlbG9jaXR5IHRvIC1n cmlwcGVyVmVsb2NpdHkuCiAgICAgICB9Cn0KAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAGRlbW8vQXJtRGVtby50egAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMDIwMDIA MDAwMDAyNAAwMDAwMDAwNjQ2MwAxMDI3MTIyNzMwMAAwMTI2NzEAIDAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAdXN0YXIgIABvYXRlcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AHN0YWZmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwojIEEgZGVt byBzY3JpcHQgZm9yIHRoZSA2IERPRiBhcm0KIwojIDA3LzE1LzA1IEpUTyAt IENyZWF0ZWQKIwoKCgpAdXNlIFBoeXNpY2FsQ29udHJvbC4KQHVzZSBBcm0u CgoKCkNvbnRyb2xsZXIgQXJtVGVzdC4KCgoKUGh5c2ljYWxDb250cm9sIDog QXJtVGVzdCB7CgoKICAgICsgdmFyaWFibGVzOgoKICAgICAgICBhcm0gKG9i amVjdCkuICAgICAgICAjIFRoZSBhcm0KICAgICAgICBzdGF0ZSAoaW50KS4g ICAgICAgICAjIEN1cnJlbnQgc3RhdGUgb2YgZGVtbyBmaW5pdGUgc3RhdGUg bWFjaGluZQogICAgICAgIGJveCAob2JqZWN0KS4gICAgICAgICMgQW4gb2Jq ZWN0IGZvciB0aGUgYXJtIHRvIGludGVyYWN0IHdpdGgKICAgICAgICBib3hT aGFwZSAob2JqZWN0KS4gICAjIFNoYXBlIG9mIHRoZSBvYmplY3QKCgogICAg KyB0byBpbml0OgoKICAgICAgICAjIFNldCB1cCBlbnZpcm9ubWVudAogICAg ICAgIHNlbGYgc2V0LWJhY2tncm91bmQtY29sb3IgdG8gKC40LCAuNCwgLjQp LgogICAgICAgIG5ldyBTdGF0aW9uYXJ5IAogICAgICAgICAgICByZWdpc3Rl ciB3aXRoLXNoYXBlIChuZXcgQ3ViZSBpbml0LXdpdGggc2l6ZSAoMTAwLCAw LjEsIDEwMCkpIAogICAgICAgICAgICAgICAgICAgICBhdC1sb2NhdGlvbiAo MCwgMCwgMCkuCgogICAgICAgICMgQ3JlYXRlIGFuIG9iamVjdCB0byBpbnRl cmFjdCB3aXRoIAogICAgICAgIGJveFNoYXBlID0gKG5ldyBDdWJlIGluaXQt d2l0aCBzaXplICgxLCA2LCAxKSkuCiAgICAgICAgYm94U2hhcGUgc2V0LW1h c3MgdG8gMC41LgogICAgICAgIGJveCA9IG5ldyBNb2JpbGUuCiAgICAgICAg Ym94IHNldC1zaGFwZSB0byBib3hTaGFwZS4KICAgICAgICBib3ggbW92ZSB0 byAoMi41LCA0LCAyLjUpLgogICAgICAgIGJveCBlbmFibGUtcGh5c2ljcy4K ICAgICAgICBib3ggc2V0LW11IHRvIDEwMDAwMC4KICAgICAgICBib3ggc2V0 LWUgdG8gMC4wLgogICAgICAgIGJveCBzZXQtY29sb3IgdG8gKDAuOCwgMC4w LCAwLjApLgoKICAgICAgICAjIENyZWF0ZSBhcm0KICAgICAgICBhcm0gPSAo bmV3IEFybSBpbml0LXdpdGggdXBwZXJhcm1MZW5ndGggNC4wCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhcm1MZW5ndGggNC4wCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbG1XaWR0aCAzLjAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpcHBlckxlbmd0 aCAzLjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgg MC41KS4KICAgICAgICBhcm0gYXR0YWNoIHRvIDAgYXQgKDAsIDEyLCAwKS4K ICAgICAgICBhcm0gc2V0LWpvaW50LXZlbG9jaXR5IHRvIDAuNS4KICAgICAg ICBhcm0gc2V0LWdyaXBwZXItdmVsb2NpdHkgdG8gMC41LgoKICAgICAgICAj IFNldCB1cCB2aWV3cG9pbnQgICAgICAgIAogICAgICAgIHNlbGYgcG9pbnQt Y2FtZXJhIGF0ICgwLCAxMCwgMCkgZnJvbSAoMTUsIDIwLCAxNSkuCiAgICAg ICAgc2VsZiB3YXRjaCBpdGVtIGFybS4KCiAgICAgICAgIyBSdW4gdGhlIGRl bW8KICAgICAgICBzdGF0ZSA9IDAuCiAgICAgICAgc2VsZiBzY2hlZHVsZSBt ZXRob2QtY2FsbCAiZGVtbyIgYXQtdGltZSAoKGNvbnRyb2xsZXIgZ2V0LXRp bWUpICsgMTUpLgoKCiAgKyB0byBkZW1vOgoKICAgICAgIyBCZW5kIGVsYm93 IAogICAgICBpZiAoc3RhdGUgPT0gMCkgOiB7CiAgICAgICAgYXJtIHNldC1l bGJvdy1hbmdsZSB0byBQSS8yLgogICAgICB9CgogICAgICAjIFJvdGF0ZSBz aG91bGRlciBvbiBmaXJzdCBheGlzCiAgICAgIGlmIChzdGF0ZSA9PSAxKSA6 IHsKICAgICAgICBhcm0gc2V0LXNob3VsZGVyLWFuZ2xlMSB0byBQSS4KICAg ICAgfQoKICAgICAgIyBSb3RhdGUgc2hvdWxkZXIgb24gc2Vjb25kIGF4aXMK ICAgICAgaWYgKHN0YXRlID09IDIpIDogewogICAgICAgIGFybSBzZXQtc2hv dWxkZXItYW5nbGUyIHRvIFBJLgogICAgICB9CgogICAgICAjIFJvdGF0ZSB3 cmlzdCBvbiBmaXJzdCBheGlzCiAgICAgIGlmIChzdGF0ZSA9PSAzKSA6IHsK ICAgICAgICBhcm0gc2V0LXdyaXN0LWFuZ2xlMSB0byBQSS4KICAgICAgfQoK ICAgICAgIyBSb3RhdGUgd3Jpc3Qgb24gc2Vjb25kIGF4aXMKICAgICAgaWYg KHN0YXRlID09IDQpIDogewogICAgICAgIGFybSBzZXQtd3Jpc3QtYW5nbGUy IHRvIFBJLzIuCiAgICAgIH0KCiAgICAgICMgUm90YXRlIHdyaXN0IGJhY2sK ICAgICAgaWYgKHN0YXRlID09IDUpIDogewogICAgICAgIGFybSBzZXQtd3Jp c3QtYW5nbGUxIHRvIDAuCiAgICAgICAgYXJtIHNldC13cmlzdC1hbmdsZTIg dG8gMC4KICAgICAgfQoKICAgICAgIyBDbG9zZSBncmlwcGVyCiAgICAgIGlm IChzdGF0ZSA9PSA2KSA6IHsKICAgICAgICBhcm0gc2V0LWdyaXBwZXItcG9z aXRpb24gdG8gMC4wLgogICAgICB9CgogICAgICAjIFBpY2sgdXAgYm94CiAg ICAgIGlmIChzdGF0ZSA9PSA3KSA6IHsKICAgICAgICBhcm0gc2V0LWdyaXBw ZXItcG9zaXRpb24gdG8gMS4wLgogICAgICAgIGFybSBzZXQtc2hvdWxkZXIt YW5nbGUxIHRvIC0wLjg1LgogICAgICAgIGFybSBzZXQtc2hvdWxkZXItYW5n bGUyIHRvIDAuMC4KICAgICAgICBhcm0gc2V0LWVsYm93LWFuZ2xlIHRvIFBJ LzIuCiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZSA9PSA4KSA6IHsKICAgICAg ICBhcm0gc2V0LWVsYm93LWFuZ2xlIHRvIDAuNi4KICAgICAgfQoKICAgICAg aWYgKHN0YXRlID09IDkpIDogewogICAgICAgIGFybSBzZXQtZ3JpcHBlci1w b3NpdGlvbiB0byAwLjAuCiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZSA9PSAx MCkgOiB7CiAgICAgICAgYXJtIHNldC1lbGJvdy1hbmdsZSB0byBQSS8yLgog ICAgICB9CgogICAgICBpZiAoc3RhdGUgPT0gMTEpIDogewogICAgICAgIGFy bSBzZXQtc2hvdWxkZXItYW5nbGUyIHRvIC1QSS8yLgogICAgICB9CgogICAg ICBpZiAoc3RhdGUgPT0gMTIpIDogewogICAgICAgIGFybSBzZXQtZ3JpcHBl ci1wb3NpdGlvbiB0byAxLjAuCiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZSA9 PSAxMykgOiB7CiAgICAgICAgYXJtIHNldC1zaG91bGRlci1hbmdsZTEgdG8g MC4wLgogICAgICAgIGFybSBzZXQtc2hvdWxkZXItYW5nbGUyIHRvIDAuMC4K ICAgICAgICBhcm0gc2V0LXdyaXN0LWFuZ2xlMSB0byAwLjAuCiAgICAgICAg YXJtIHNldC13cmlzdC1hbmdsZTIgdG8gMC4wLgogICAgICAgIGFybSBzZXQt ZWxib3ctYW5nbGUgdG8gMC4wLgogICAgICAgIGFybSBzZXQtZ3JpcHBlci1w b3NpdGlvbiB0byAxLjAuCiAgICAgIH0KCiAgICAgIHNlbGYgc2NoZWR1bGUg bWV0aG9kLWNhbGwgImRlbW8iIGF0LXRpbWUgKChjb250cm9sbGVyIGdldC10 aW1lKSArIDE1KS4KCiAgICAgIHN0YXRlID0gc3RhdGUgKyAxLgp9CgAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABkZW1vL1Jldm9sdXRlU2Vydm8udHoAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDEwMDY0NAAwMDAyMDAy ADAwMDAwMjQAMDAwMDAwMDI0NjEAMTAyNzEyMjcwNTYAMDE0MTczACAwAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAHVzdGFyICAAb2F0ZXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMKIyBBIHJl dm9sdXRlIGpvaW50IHRoYXQgYWN0cyBsaWtlIGEgc2Vydm8sIGkuZS4sIGZv ciB3aGljaCB5b3UgY2FuIHNwZWNpZnkKIyBhIHRhcmdldCBhbmdsZS4KIwoj IDA3LzE0LzA1IEpUTyAtIERvY3VtZW50ZWQKIwoKCgpAdXNlIEpvaW50LgpA dXNlIFV0aWxzLgoKCgpSZXZvbHV0ZUpvaW50IDogUmV2b2x1dGVTZXJ2byB7 CgogICsgdmFyaWFibGVzOgogICAgICB0YXJnZXQgKGRvdWJsZSkuICAgIyBU aGUgdGFyZ2V0IGFuZ2xlIGZvciB0aGUgc2Vydm8KICAgICAgZXBzaWxvbiAo ZG91YmxlKS4gICMgVGhlIGxhcmdlc3QgYWNjZXB0YWJsZSBkaWZmZXJlbmNl IGJldHdlZW4gdGFyZ2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAjIGFu ZCBhY3R1YWwgYW5nbGUKICAgICAgdmVsb2NpdHkgKGRvdWJsZSkuICMgUmF0 ZSBvZiBzZXJ2byBtb3Rpb24KCiAgKyB0byBpbml0OgogICAgICB0YXJnZXQg PSAwLiAgICAgICAgIyBJbml0aWFsaXplIGluc3RhbmNlIHZhcmlhYmxlcwog ICAgICBlcHNpbG9uID0gMC4wNS4gICAgCiAgICAgIHZlbG9jaXR5ID0gMS4w LgoKCiAgKyB0byBzZXQtYW5nbGUgdG8gYW5nbGUgKGRvdWJsZSk6CiAgICAg IHRhcmdldCA9IGFuZ2xlLgoKCiAgKyB0byBzZXQtdmVsb2NpdHkgdG8gdGhl VmVsb2NpdHkgKGRvdWJsZSk6CiAgICAgIHZlbG9jaXR5ID0gdGhlVmVsb2Np dHkuCgoKICArIHRvIGF0LWFuZ2xlOgogICAgICBkaWZmZXJlbmNlIChkb3Vi bGUpLgoKICAgICAgZGlmZmVyZW5jZSA9IGFicyh0YXJnZXQgLSAoc2VsZiBn ZXQtam9pbnQtYW5nbGUpKS4KICAgICAgZGlmZmVyZW5jZSA9IG1pbihkaWZm ZXJlbmNlLCAyKlBJIC0gZGlmZmVyZW5jZSkuCgogICAgICBpZiAoZGlmZmVy ZW5jZSA+IGVwc2lsb24pIDoKCXJldHVybiAwLgogICAgICBlbHNlCiAgICAg ICAgcmV0dXJuIDEuCgoKICArIHRvIGl0ZXJhdGU6CgogICAgICAjIFRlc3Qg dG8gc2VlIGlmIHNlcnZvIGlzIGF0IHRhcmdldCBhbmdsZSBhbHJlYWR5CiAg ICAgIGlmICgoc2VsZiBhdC1hbmdsZSkgPT0gMCkgOiB7ICAgICAgIAoKICAg ICAgICAjIElmIGl0IGlzbid0LCB3ZSBuZWVkIHRvIG1vdmUgam9pbnQKICAg ICAgICBpZiAodGFyZ2V0ID4gKHNlbGYgZ2V0LWpvaW50LWFuZ2xlKSkgOgog ICAgICAgICAgc2VsZiBzZXQtam9pbnQtdmVsb2NpdHkgdG8gdmVsb2NpdHku CiAgICAgICAgZWxzZQogICAgICAgICAgc2VsZiBzZXQtam9pbnQtdmVsb2Np dHkgdG8gLXZlbG9jaXR5LgoKICAgICAgfSBlbHNlCgogICAgICAgICMgSWYg aXQgaXMsIGRvbid0IG1vdmUgdGhlIGpvaW50CglzZWxmIHNldC1qb2ludC12 ZWxvY2l0eSB0byAwLgp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRl bW8vVW5pdmVyc2FsU2Vydm8udHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAwMTAwNjQ0ADAwMDIwMDIAMDAwMDAyNAAwMDAwMDAwMzU2MQAx MDI3MTIyNzA2MgAwMTQzMzUAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABvYXRlcwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHN0YWZmAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAIwojIEEgdW5pdmVyc2FsIGpvaW50IHRoYXQgYWN0 cyBsaWtlIGEgc2Vydm8sIHdpdGggbWV0aG9kcyBmb3Igc3BlY2lmeWluZwoj IHRhcmdldCBhbmdsZXMgYWxvbmcgYm90aCBheGVzLgojCiMgMDcvMTMvMDUg SlRPIC0gRG9jdW1lbnRlZAojCgoKCkB1c2UgSm9pbnQuCkB1c2UgVXRpbHMu CgoKClVuaXZlcnNhbEpvaW50IDogVW5pdmVyc2FsU2Vydm8gewoKICArIHZh cmlhYmxlczoKICAgICAgdGFyZ2V0MSAoZG91YmxlKS4gICMgVGhlIHRhcmdl dCBhbmdsZSBmb3IgdGhlIHNlcnZvJ3MgZmlyc3QgYXhpcwogICAgICB0YXJn ZXQyIChkb3VibGUpLiAgIyBUaGUgdGFyZ2V0IGFuZ2xlIGZvciB0aGUgc2Vy dm8ncyBzZWNvbmQgYXhpcwogICAgICBlcHNpbG9uIChkb3VibGUpLiAgIyBU aGUgbGFyZ2VzdCBhY2NlcHRhYmxlIGRpZmZlcmVuY2UgYmV0d2VlbiB0YXJn ZXQKICAgICAgICAgICAgICAgICAgICAgICAgICMgYW5kIGFjdHVhbCBhbmds ZQogICAgICB2ZWxvY2l0eSAoZG91YmxlKS4gIyBSYXRlIG9mIHNlcnZvIG1v dGlvbgoKICArIHRvIGluaXQ6CiAgICAgIHRhcmdldDEgPSAwLiAgICAgICAj IEluaXRpYWxpemUgaW5zdGFuY2UgdmFyaWFibGVzCiAgICAgIHRhcmdldDIg PSAwLiAgICAgICAKICAgICAgZXBzaWxvbiA9IDAuMDUuICAgIAogICAgICB2 ZWxvY2l0eSA9IDEuMC4KICAgICAgcmV0dXJuIHNlbGYuCgoKICArIHRvIHNl dC1hbmdsZTEgdG8gYW5nbGUgKGRvdWJsZSk6CiAgICAgIHRhcmdldDEgPSBh bmdsZS4KCgogICsgdG8gc2V0LWFuZ2xlMiB0byBhbmdsZSAoZG91YmxlKToK ICAgICAgdGFyZ2V0MiA9IGFuZ2xlLgoKCiAgKyB0byBzZXQtdmVsb2NpdHkg dG8gdGhlVmVsb2NpdHkgKGRvdWJsZSk6CiAgICAgIHZlbG9jaXR5ID0gdGhl VmVsb2NpdHkuCgoKICArIHRvIGF0LWFuZ2xlMToKICAgICAgZGlmZmVyZW5j ZSAoZG91YmxlKS4KCiAgICAgIGRpZmZlcmVuY2UgPSBhYnModGFyZ2V0MSAt IChzZWxmIGdldC1qb2ludC1hbmdsZXMpOjp4KS4KICAgICAgZGlmZmVyZW5j ZSA9IG1pbihkaWZmZXJlbmNlLCAyKlBJIC0gZGlmZmVyZW5jZSkuCgogICAg ICBpZiAoZGlmZmVyZW5jZSA+IGVwc2lsb24pIDoKCXJldHVybiAwLgogICAg ICBlbHNlCiAgICAgICAgcmV0dXJuIDEuCgoKICArIHRvIGF0LWFuZ2xlMjoK ICAgICAgZGlmZmVyZW5jZSAoZG91YmxlKS4KCiAgICAgIGRpZmZlcmVuY2Ug PSBhYnModGFyZ2V0MiAtIChzZWxmIGdldC1qb2ludC1hbmdsZXMpOjp5KS4K ICAgICAgZGlmZmVyZW5jZSA9IG1pbihkaWZmZXJlbmNlLCAyKlBJIC0gZGlm ZmVyZW5jZSkuCgogICAgICBpZiAoZGlmZmVyZW5jZSA+IGVwc2lsb24pIDoK CXJldHVybiAwLgogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIDEuCgoKICAr IHRvIGl0ZXJhdGU6CiAgICAgIHZlbG9jaXR5MSwgdmVsb2NpdHkyIChmbG9h dCkuCgogICAgICBpZiAoKHNlbGYgYXQtYW5nbGUxKSA9PSAwKSA6IHsgICAg ICAgCiAgICAgICAgaWYgKHRhcmdldDEgPiAoc2VsZiBnZXQtam9pbnQtYW5n bGVzKTo6eCkgOgogICAgICAgICAgdmVsb2NpdHkxID0gdmVsb2NpdHkuCiAg ICAgICAgZWxzZQogICAgICAgICAgdmVsb2NpdHkxID0gLXZlbG9jaXR5Lgog ICAgICB9IGVsc2UKCXZlbG9jaXR5MSA9IDAuCgogICAgICBpZiAoKHNlbGYg YXQtYW5nbGUyKSA9PSAwKSA6IHsgICAgICAgCiAgICAgICAgaWYgKHRhcmdl dDIgPiAoc2VsZiBnZXQtam9pbnQtYW5nbGVzKTo6eSkgOgogICAgICAgICAg dmVsb2NpdHkyID0gdmVsb2NpdHkuCiAgICAgICAgZWxzZQogICAgICAgICAg dmVsb2NpdHkyID0gLXZlbG9jaXR5LgogICAgICB9IGVsc2UKCXZlbG9jaXR5 MiA9IDAuCgogICAgICBzZWxmIHNldC1qb2ludC12ZWxvY2l0eSBheGlzLTEg dmVsb2NpdHkxIGF4aXMtMiB2ZWxvY2l0eTIuCn0KAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZW1vL1V0 aWxzLnR6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAMDEwMDY0NAAwMDAyMDAyADAwMDAwMjQAMDAwMDAwMDAwMjQAMTAyNzEy MjcxMDIAMDEyNDMwACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAb2F0ZXMAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAABzdGFmZgAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAEBkZWZpbmUgUEkgMy4xNDE1OS4KAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAA= --1434600542-14261042-1122316497=:19617 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ breve mailing list [email protected] http://lists.spiderland.org/mailman/listinfo/breve --1434600542-14261042-1122316497=:19617--