From mboxrd@z Thu Jan 1 00:00:00 1970 From: andrey mirtchovski To: 9fans@cse.psu.edu Subject: Re: [9fans] draw() question In-Reply-To: Message-ID: <20020817023223.K47692-400000@fbsd.acl.lanl.gov> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="0-1582020745-1029573913=:47692" Date: Sat, 17 Aug 2002 02:45:13 -0600 Topicbox-Message-UUID: de4980a2-eaca-11e9-9e20-41e7f4b1d025 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. --0-1582020745-1029573913=:47692 Content-Type: TEXT/PLAIN; charset=US-ASCII it's not hard, i'm just (to quote george carlin) minimally exceptional. XCopyArea, whose behaviour i tried to emulate, had it the other way around and i was tricked by it :) included is the end result following your help. getscr contains some help routines which grab a screenshot and squeeze it into the current window, decayscreen is another xscreensaver hack, which just mangles the screen in interesting ways... 8c -FVw decayscreen.c getscr.c; 8l decayscreen.8 getscr.8 andrey On Fri, 16 Aug 2002, rob pike, esq. wrote: > Isn't it just > > draw(dst, Rect(x, y, x+(x2-x1), y+(y2-y1)), src, nil, Pt(x1, y1)) ? > > Why is this hard? Or what have I missed? > > -rob > --0-1582020745-1029573913=:47692 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="getscr.c" Content-Transfer-Encoding: BASE64 Content-ID: <20020817024513.S47692@fbsd.acl.lanl.gov> Content-Description: Content-Disposition: attachment; filename="getscr.c" I2luY2x1ZGUgPHUuaD4NCiNpbmNsdWRlIDxsaWJjLmg+DQojaW5jbHVkZSA8 ZHJhdy5oPg0KI2luY2x1ZGUgImdldHNjci5oIg0KLyoNCiAgKiBhbGxvY2F0 ZXMgdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGFuZCByZWFkcw0KICAqIC9kZXYv c2NyZWVuLi4uIG1vZGlmaWVkIGZyb20gb2YgbGVucy5jDQogICovDQp1Y2hh ciAqDQpnZXRzY3Iodm9pZCkNCnsNCgljaGFyIAkJCWJ1Zls1KjEyXTsNCgl1 bG9uZyAJCWNoYW47DQoJdWNoYXIJCSpzY3JlZW5idWY7DQoJaW50IAkJCWQs IHNjcmVlbmZkOw0KDQoNCglzY3JlZW5mZCA9IG9wZW4oIi9kZXYvc2NyZWVu IiwgT1JFQUQpOw0KCWlmKHNjcmVlbmZkIDwgMCkNCgkJc3lzZmF0YWwoImNh bid0IG9wZW4gL2Rldi9zY3JlZW46ICVyIik7DQoNCglpZihyZWFkKHNjcmVl bmZkLCBidWYsIHNpemVvZiBidWYpICE9IHNpemVvZiBidWYpDQoJCXN5c2Zh dGFsKCJjYW4ndCByZWFkIC9kZXYvc2NyZWVuOiAlciIpOw0KDQoJY2hhbiA9 IHN0cnRvY2hhbihidWYpOw0KCWQgPSBjaGFudG9kZXB0aChjaGFuKTsNCglp ZihkIDwgOCkNCgkJc3lzZmF0YWwoImNhbid0IGhhbmRsZSBzY3JlZW4gZm9y bWF0ICUxMS4xMXMiLCBidWYpOw0KDQoJYnlwcCA9IGQvODsNCglzY3JlZW5y Lm1pbi54ID0gYXRvaShidWYrMSoxMik7DQoJc2NyZWVuci5taW4ueSA9IGF0 b2koYnVmKzIqMTIpOw0KCXNjcmVlbnIubWF4LnggPSBhdG9pKGJ1ZiszKjEy KTsNCglzY3JlZW5yLm1heC55ID0gYXRvaShidWYrNCoxMik7DQoNCglzY3Jl ZW5idWYgPSBtYWxsb2MoYnlwcCpEeChzY3JlZW5yKSpEeShzY3JlZW5yKSk7 DQoJaWYoc2NyZWVuYnVmID09IG5pbCkNCgkJc3lzZmF0YWwoInNjcmVlbiBi dWZmZXIgbWFsbG9jIGZhaWxlZDogJXIiKTsNCg0KCWlmKHJlYWRuKHNjcmVl bmZkLCBzY3JlZW5idWYsIGJ5cHAqRHgoc2NyZWVucikqRHkoc2NyZWVucikp ICE9IGJ5cHAqRHgoc2NyZWVucikqRHkoc2NyZWVucikpDQoJCXN5c2ZhdGFs KCJjYW4ndCByZWFkIHNjcmVlbjogJXIiKTsNCgkNCglyZXR1cm4gc2NyZWVu YnVmOw0KfQ0KDQoNCi8qDQogICogc3F1ZWV6ZSB0aGUgc2NyZWVuc2hvdCB0 byBmaXQgaW4gdGhlIGN1cnJlbnQgDQogICogd2luZG93DQogICovDQpJbWFn ZSAqDQpzcXVlZXplKHVjaGFyICpidWYpDQp7DQoJaW50IHgsIHksIHh4LCB5 eSwgaTsNCglmbG9hdCBkeCwgZHk7DQoJSW1hZ2UgKnRtcDsNCgl1Y2hhciAq b3V0Ow0KDQoJaWYoYnVmID09IG5pbCkNCgkJcmV0dXJuIG5pbDsNCg0KDQoJ dG1wID0gYWxsb2NpbWFnZShkaXNwbGF5LCBzY3JlZW4tPnIsIHNjcmVlbi0+ Y2hhbiwgMCwgREJsYWNrKTsNCglpZih0bXAgPT0gbmlsKQ0KCQlzeXNmYXRh bCgiY2FuJ3QgYWxsb2NhdGUgdGVtcCBpbWFnZSIpOw0KDQoJZHggPSAoZmxv YXQpRHgoc2NyZWVucikvRHgodG1wLT5yKTsNCglkeSA9IChmbG9hdClEeShz Y3JlZW5yKS9EeSh0bXAtPnIpOw0KDQoJb3V0ID0gKHVjaGFyICopbWFsbG9j KGJ5cHAqRHgodG1wLT5yKSpEeSh0bXAtPnIpKTsNCglpZihvdXQgPT0gbmls KQ0KCQlzeXNmYXRhbCgiY2FuJ3QgYWxsb2NhdGUgdGVtcCBtZW1vcnkiKTsN Cg0KCWZvcih5PTA7IHk8RHkodG1wLT5yKTsgeSsrKXsNCgkJZm9yKHg9MDsg eDxEeCh0bXAtPnIpOyB4Kyspew0KCQkJZm9yKGk9MDsgaTxieXBwOyBpKysp IHsNCgkJCQl5eSA9IChpbnQpKGR5KnkpOw0KCQkJCXh4ID0gKGludCkoZHgq eCk7DQoJCQkJb3V0W2J5cHAqKHkqRHgodG1wLT5yKSt4KSArIGldID0gYnVm W2J5cHAqKHl5KkR4KHNjcmVlbnIpK3h4KStpXTsNCgkJCX0NCgkJfQ0KCX0N CgkNCglpZihsb2FkaW1hZ2UodG1wLCB0bXAtPnIsIG91dCwgYnlwcCpEeCh0 bXAtPnIpKkR5KHRtcC0+cikpICE9IGJ5cHAqRHgodG1wLT5yKSpEeSh0bXAt PnIpKXsNCgkJCQlzeXNmYXRhbCgibG9hZGltYWdlIik7DQoJfQ0KCXJldHVy bih0bXApOw0KfQ0K --0-1582020745-1029573913=:47692 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="getscr.h" Content-Transfer-Encoding: BASE64 Content-ID: <20020817024513.C47692@fbsd.acl.lanl.gov> Content-Description: Content-Disposition: attachment; filename="getscr.h" dWNoYXIqCWdldHNjcih2b2lkKTsNCkltYWdlKglzcXVlZXplKHVjaGFyICop Ow0KDQpSZWN0YW5nbGUJCXNjcmVlbnI7DQppbnQgCQkJYnlwcDsNCg== --0-1582020745-1029573913=:47692 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="decayscreen.c" Content-Transfer-Encoding: BASE64 Content-ID: <20020817024513.U47692@fbsd.acl.lanl.gov> Content-Description: Content-Disposition: attachment; filename="decayscreen.c" LyogeHNjcmVlbnNhdmVyLCBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5 OTQsIDE5OTYsIDE5OTcgDQogKiBKYW1pZSBaYXdpbnNraSA8and6QGp3ei5v cmc+DQogKg0KICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwg ZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzDQog KiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3Jh bnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdA0KICogdGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRo YXQgYm90aCB0aGF0DQogKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nDQogKiBkb2N1 bWVudGF0aW9uLiAgTm8gcmVwcmVzZW50YXRpb25zIGFyZSBtYWRlIGFib3V0 IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzDQogKiBzb2Z0d2FyZSBmb3IgYW55 IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhw cmVzcyBvciANCiAqIGltcGxpZWQgd2FycmFudHkuDQogKi8NCg0KLyogZGVj YXlzY3JlZW4NCiAqDQogKiBCYXNlZCBvbiBzbGlkZXNjcmVlbiBwcm9ncmFt IGZyb20gdGhlIHhzY3JlZW5zYXZlciBhcHBsaWNhdGlvbiBhbmQgdGhlDQog KiBkZWNheSBwcm9ncmFtIGZvciBTdW4gZnJhbWVidWZmZXJzLiAgVGhpcyBp cyB0aGUgY29tbWVudCBmcm9tIHRoZSBkZWNheS5jDQogKiBmaWxlOg0KDQog KiBkZWNheS5jDQogKiAgIGZpbmQgdGhlIHNjcmVlbiBiaXRtYXAgZm9yIHRo ZSBjb25zb2xlIGFuZCBtYWtlIGl0ICJkZWNheSIgYnkNCiAqICAgcmFuZG9t bHkgc2hpZnRpbmcgcmFuZG9tIHJlY3RhbmdsZXMgYnkgb25lIHBpeGVsd2lk dGggYXQgYSB0aW1lLg0KICoNCiAqICAgYnkgRGF2aWQgV2FsZCwgMTk4OA0K ICogICAgICAgIHJld3JpdHRlbiBieSBOYXR1ZXJsaWNoIQ0KICogICBiYXNl ZCBvbiBhIHNpbWlsYXIgInV0aWxpdHkiIG9uIHRoZSBBcG9sbG8gcmluZyBh dCBZYWxlLg0KDQogKiBYIHZlcnNpb24gYnkNCiAqDQogKiAgVml2ZWsgS2hl cmEgPGtoZXJhQGNzLmR1a2UuZWR1Pg0KICogIDUtQVVHLTE5OTMNCiAqDQog KiAgSGFja2VkIGJ5IGp3eiwgMjgtTm92LTk3IChzcGVkIHVwIGFuZCBhZGRl ZCBuZXcgbW90aW9uIGRpcmVjdGlvbnMpDQogDQogKiAgUi4gU2NodWx0eg0K ICogIEFkZGVkICJtZWx0IiAmICJzdHJldGNoIiBtb2RlcyAyOC1NYXItMTk5 OQ0KICoNCiAqLw0KDQovKiANCiAgKiBwb3J0ZWQgdG8gUGxhbiA5IGJ5IGFu ZHJleUBsYW5sLmdvdiwgMDgvMDINCiAgKi8NCg0KLyogcGxhbjktcmVsYXRl ZCBzdHVmZiAqLw0KI2luY2x1ZGUgPHUuaD4NCiNpbmNsdWRlIDxsaWJjLmg+ DQojaW5jbHVkZSA8ZHJhdy5oPg0KI2luY2x1ZGUgPGV2ZW50Lmg+DQoNCi8q IHNjcmVlbnNob3QtcmVsYXRlZCBzdHVmZiAqLw0KI2luY2x1ZGUgImdldHNj ci5oIgkNCnN0YXRpYyB1Y2hhciAqc2NyYnVmOw0Kc3RhdGljIEltYWdlICpz Y3JpbWc7DQoNCi8qIG90aGVyIGRlZmluZXMgKi8NCiNkZWZpbmUgTlVMTCBu aWwNCiNkZWZpbmUgWFBvaW50IFBvaW50DQojZGVmaW5lIE5SQU5EIG5yYW5k DQojZGVmaW5lIExSQU5EIGxyYW5kDQojZGVmaW5lIHJhbmRvbSByYW5kDQoj ZGVmaW5lIE1BWFJBTkQgKCgyPDwzMSktMSkNCiNkZWZpbmUgTUFYKGEsIGIp ICgoKGEpID4gKGIpKT8oYSk6KGIpKQ0KI2RlZmluZSBNSU4oYSwgYikgKCgo YSkgPCAoYikpPyhhKTooYikpDQojZGVmaW5lIFJBTkRfTUFYIE1BWFJBTkQN CiNkZWZpbmUgQUJTIGFicw0KSW1hZ2UgKmNvbG9yc1syNTZdOw0KI2RlZmlu ZSBNX1BJCVBJDQojZGVmaW5lIEJvb2wgaW50DQojZGVmaW5lIFRydWUgMQ0K I2RlZmluZSBGYWxzZSAwDQoNCmNoYXIgKmJ1dHRvbnNbXSA9IA0Kew0KCSJl eGl0IiwNCgkwDQp9Ow0KDQpNZW51IG1lbnUgPSANCnsNCglidXR0b25zDQp9 Ow0KTW91c2UgbTsNCg0KDQoNCi8qIGVuZCBvZiBwbGFuOS1yZWxhdGVkIGRl ZmluZXMgKi8NCg0Kc3RhdGljIGludCBzaXpleCwgc2l6ZXk7DQpzdGF0aWMg aW50IGRlbGF5ID0gMTAwMDsNCnN0YXRpYyBpbnQgbW9kZTsNCnN0YXRpYyBp bnQgaXRlcmF0aW9ucz0xOw0KDQojZGVmaW5lIFNIVUZGTEUgMA0KI2RlZmlu ZSBVUCAxDQojZGVmaW5lIExFRlQgMg0KI2RlZmluZSBSSUdIVCAzDQojZGVm aW5lIERPV04gNA0KI2RlZmluZSBVUExFRlQgNQ0KI2RlZmluZSBET1dOTEVG VCA2DQojZGVmaW5lIFVQUklHSFQgNw0KI2RlZmluZSBET1dOUklHSFQgOA0K I2RlZmluZSBJTiA5DQojZGVmaW5lIE9VVCAxMA0KI2RlZmluZSBNRUxUIDEx DQojZGVmaW5lIFNUUkVUQ0ggMTINCiNkZWZpbmUgRlVaWiAxMw0KDQpzdGF0 aWMgdm9pZA0KaW5pdF9kZWNheSAodm9pZCkNCnsNCg0KDQogICAgbW9kZSA9 IHJhbmRvbSgpICUgKEZVWlorMSk7DQoNCiAgZGVsYXkgPSAxMDsNCg0KDQoN Cg0KICBzaXpleCA9IER4KHNjcmVlbi0+cik7DQogIHNpemV5ID0gRHkoc2Ny ZWVuLT5yKTsNCg0KICANCiAgaWYgKG1vZGUgPT0gTUVMVCB8fCBtb2RlID09 IFNUUkVUQ0gpIHsNCiAgICAvKiBtYWtlIHN1cmUgc2NyZWVuIGV2ZW50dWFs bHkgdHVybnMgYmFja2dyb3VuZCBjb2xvciAqLw0KICAgIGxpbmUoc2NyZWVu LCBhZGRwdChzY3JlZW4tPnIubWluLCBQdCgwLCAwKSksIA0KCQkJYWRkcHQo c2NyZWVuLT5yLm1pbiwgUHQoc2l6ZXgsIDEpKSwgDQoJCQlFbmRzcXVhcmUs IEVuZHNxdWFyZSwgMCwgZGlzcGxheS0+YmxhY2ssIFpQKTsgDQoNCiAgICAv KiBzbG93IGRvd24gZm9yIHNtb290aGVyIG1lbHRpbmcqLw0KICAgIGl0ZXJh dGlvbnMgPSAxOw0KICB9DQoNCn0NCg0KDQovKg0KICogcGVyZm9ybSBvbmUg aXRlcmF0aW9uIG9mIGRlY2F5DQogKi8NCnN0YXRpYyB2b2lkDQpkZWNheTEg KHZvaWQpDQp7DQogICAgaW50IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCwg dG9sZWZ0LCB0b3RvcDsNCglSZWN0YW5nbGUgcjsgUG9pbnQgcCwgcDI7DQoN CiNkZWZpbmUgTCAxMDENCiNkZWZpbmUgUiAxMDINCiNkZWZpbmUgVSAxMDMN CiNkZWZpbmUgRCAxMDQNCiAgICBzdGF0aWMgaW50IG5vX2JpYXNbXSAgICAg ICAgPSB7IEwsTCxMLEwsIFIsUixSLFIsIFUsVSxVLFUsIEQsRCxELEQgfTsN CiAgICBzdGF0aWMgaW50IHVwX2JpYXNbXSAgICAgICAgPSB7IEwsTCxMLEws IFIsUixSLFIsIFUsVSxVLFUsIFUsVSxELEQgfTsNCiAgICBzdGF0aWMgaW50 IGRvd25fYmlhc1tdICAgICAgPSB7IEwsTCxMLEwsIFIsUixSLFIsIFUsVSxE LEQsIEQsRCxELEQgfTsNCiAgICBzdGF0aWMgaW50IGxlZnRfYmlhc1tdICAg ICAgPSB7IEwsTCxMLEwsIEwsTCxSLFIsIFUsVSxVLFUsIEQsRCxELEQgfTsN CiAgICBzdGF0aWMgaW50IHJpZ2h0X2JpYXNbXSAgICAgPSB7IEwsTCxSLFIs IFIsUixSLFIsIFUsVSxVLFUsIEQsRCxELEQgfTsNCg0KICAgIHN0YXRpYyBp bnQgdXBsZWZ0X2JpYXNbXSAgICA9IHsgTCxMLEwsTCwgTCxSLFIsUiwgVSxV LFUsVSwgVSxELEQsRCB9Ow0KICAgIHN0YXRpYyBpbnQgZG93bmxlZnRfYmlh c1tdICA9IHsgTCxMLEwsTCwgTCxSLFIsUiwgVSxVLFUsRCwgRCxELEQsRCB9 Ow0KICAgIHN0YXRpYyBpbnQgdXByaWdodF9iaWFzW10gICA9IHsgTCxMLEws UiwgUixSLFIsUiwgVSxVLFUsVSwgVSxELEQsRCB9Ow0KICAgIHN0YXRpYyBp bnQgZG93bnJpZ2h0X2JpYXNbXSA9IHsgTCxMLEwsUiwgUixSLFIsUiwgVSxV LFUsRCwgRCxELEQsRCB9Ow0KICAgIHN0YXRpYyBpbnQgKmJpYXM7DQoNCiAg ICBzd2l0Y2ggKG1vZGUpIHsNCiAgICAgIGNhc2UgU0hVRkZMRToJYmlhcyA9 IG5vX2JpYXM7IGJyZWFrOw0KICAgICAgY2FzZSBVUDoJCWJpYXMgPSB1cF9i aWFzOyBicmVhazsNCiAgICAgIGNhc2UgTEVGVDoJYmlhcyA9IGxlZnRfYmlh czsgYnJlYWs7DQogICAgICBjYXNlIFJJR0hUOgliaWFzID0gcmlnaHRfYmlh czsgYnJlYWs7DQogICAgICBjYXNlIERPV046CWJpYXMgPSBkb3duX2JpYXM7 IGJyZWFrOw0KICAgICAgY2FzZSBVUExFRlQ6CWJpYXMgPSB1cGxlZnRfYmlh czsgYnJlYWs7DQogICAgICBjYXNlIERPV05MRUZUOgliaWFzID0gZG93bmxl ZnRfYmlhczsgYnJlYWs7DQogICAgICBjYXNlIFVQUklHSFQ6CWJpYXMgPSB1 cHJpZ2h0X2JpYXM7IGJyZWFrOw0KICAgICAgY2FzZSBET1dOUklHSFQ6CWJp YXMgPSBkb3ducmlnaHRfYmlhczsgYnJlYWs7DQogICAgICBjYXNlIElOOgkJ YmlhcyA9IG5vX2JpYXM7IGJyZWFrOw0KICAgICAgY2FzZSBPVVQ6CQliaWFz ID0gbm9fYmlhczsgYnJlYWs7DQogICAgICBjYXNlIE1FTFQ6CWJpYXMgPSBu b19iaWFzOyBicmVhazsNCiAgICAgIGNhc2UgU1RSRVRDSDoJYmlhcyA9IG5v X2JpYXM7IGJyZWFrOw0KICAgICAgY2FzZSBGVVpaOgliaWFzID0gbm9fYmlh czsgYnJlYWs7DQogICAgIGRlZmF1bHQ6IGFib3J0KCk7DQogICAgfQ0KDQoj ZGVmaW5lIG5ybmQoeCkgKHJhbmRvbSgpICUgKHgpKQ0KDQogICAgaWYgKG1v ZGUgPT0gTUVMVCB8fCBtb2RlID09IFNUUkVUQ0gpIHsNCiAgICAgIGxlZnQg PSBucm5kKHNpemV4LzIpOw0KICAgICAgdG9wID0gbnJuZChzaXpleSk7DQog ICAgICB3aWR0aCA9IG5ybmQoIHNpemV4LzIgKSArIHNpemV4LzIgLSBsZWZ0 Ow0KICAgICAgaGVpZ2h0ID0gbnJuZChzaXpleSAtIHRvcCk7DQogICAgICB0 b2xlZnQgPSBsZWZ0Ow0KICAgICAgdG90b3AgPSB0b3ArMTsNCg0KICAgIH0g ZWxzZSBpZiAobW9kZSA9PSBGVVpaKSB7ICAvKiBCeSBWaW5jZSBMZXZleSA8 dmluY2VsQHZpbmNlbC5vcmc+Ow0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnNwaXJlZCBieSB0aGUgIm1lbHQiIG1vZGUgb2YgdGhl DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzY3JoYWNr IiBJcmlzR0wgcHJvZ3JhbSBieSBQYXVsIEhhZWJlcmxpDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNhIDE5OTEuICovDQogICAg ICBzdGF0aWMgaW50IHRvZ2dsZSA9IDA7DQoNCiAgICAgIGxlZnQgPSBucm5k KHNpemV4IC0gMSk7DQogICAgICB0b3AgID0gbnJuZChzaXpleSAtIDEpOw0K ICAgICAgdG9nZ2xlID0gIXRvZ2dsZTsNCiAgICAgIGlmICh0b2dnbGUpDQog ICAgICAgIHsNCiAgICAgICAgICB0b3RvcCA9IHRvcDsNCiAgICAgICAgICBo ZWlnaHQgPSAxOw0KICAgICAgICAgIHRvbGVmdCA9IG5ybmQoc2l6ZXggLSAx KTsNCiAgICAgICAgICBpZiAodG9sZWZ0ID4gbGVmdCkNCiAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgd2lkdGggPSB0b2xlZnQtbGVmdDsNCiAgICAg ICAgICAgICAgdG9sZWZ0ID0gbGVmdDsNCiAgICAgICAgICAgICAgbGVmdCsr Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgd2lkdGggPSBsZWZ0LXRvbGVmdDsNCiAgICAg ICAgICAgICAgbGVmdCA9IHRvbGVmdDsNCiAgICAgICAgICAgICAgdG9sZWZ0 Kys7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIGVsc2UNCiAg ICAgICAgew0KICAgICAgICAgIHRvbGVmdCA9IGxlZnQ7DQogICAgICAgICAg d2lkdGggPSAxOw0KICAgICAgICAgIHRvdG9wICA9IG5ybmQoc2l6ZXkgLSAx KTsNCiAgICAgICAgICBpZiAodG90b3AgPiB0b3ApDQogICAgICAgICAgICB7 DQogICAgICAgICAgICAgIGhlaWdodCA9IHRvdG9wLXRvcDsNCiAgICAgICAg ICAgICAgdG90b3AgPSB0b3A7DQogICAgICAgICAgICAgIHRvcCsrOw0KICAg ICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgaGVpZ2h0ID0gdG9wLXRvdG9wOw0KICAgICAgICAgICAg ICB0b3AgPSB0b3RvcDsNCiAgICAgICAgICAgICAgdG90b3ArKzsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgfSBlbHNlIHsNCg0KICAgICAg bGVmdCA9IG5ybmQoc2l6ZXggLSAxKTsNCiAgICAgIHRvcCA9IG5ybmQoc2l6 ZXkpOw0KICAgICAgd2lkdGggPSBucm5kKHNpemV4IC0gbGVmdCk7DQogICAg ICBoZWlnaHQgPSBucm5kKHNpemV5IC0gdG9wKTsNCiAgICAgIA0KICAgICAg dG9sZWZ0ID0gbGVmdDsNCiAgICAgIHRvdG9wID0gdG9wOw0KICAgICAgaWYg KG1vZGUgPT0gSU4gfHwgbW9kZSA9PSBPVVQpIHsNCglpbnQgeCA9IGxlZnQr KHdpZHRoLzIpOw0KCWludCB5ID0gdG9wKyhoZWlnaHQvMik7DQoJaW50IGN4 ID0gc2l6ZXgvMjsNCglpbnQgY3kgPSBzaXpleS8yOw0KCWlmIChtb2RlID09 IElOKSB7DQoJICBpZiAgICAgICh4ID4gY3ggJiYgeSA+IGN5KSAgIGJpYXMg PSB1cGxlZnRfYmlhczsNCgkgIGVsc2UgaWYgKHggPCBjeCAmJiB5ID4gY3kp ICAgYmlhcyA9IHVwcmlnaHRfYmlhczsNCgkgIGVsc2UgaWYgKHggPCBjeCAm JiB5IDwgY3kpICAgYmlhcyA9IGRvd25yaWdodF9iaWFzOw0KCSAgZWxzZSAv KiAoeCA+IGN4ICYmIHkgPCBjeSkqLyBiaWFzID0gZG93bmxlZnRfYmlhczsN Cgl9IGVsc2Ugew0KCSAgaWYgICAgICAoeCA+IGN4ICYmIHkgPiBjeSkgICBi aWFzID0gZG93bnJpZ2h0X2JpYXM7DQoJICBlbHNlIGlmICh4IDwgY3ggJiYg eSA+IGN5KSAgIGJpYXMgPSBkb3dubGVmdF9iaWFzOw0KCSAgZWxzZSBpZiAo eCA8IGN4ICYmIHkgPCBjeSkgICBiaWFzID0gdXBsZWZ0X2JpYXM7DQoJICBl bHNlIC8qICh4ID4gY3ggJiYgeSA8IGN5KSovIGJpYXMgPSB1cHJpZ2h0X2Jp YXM7DQoJfQ0KICAgICAgfQ0KICAgICAgDQogICAgICBzd2l0Y2ggKGJpYXNb cmFuZG9tKCkgJSAoc2l6ZW9mKG5vX2JpYXMpL3NpemVvZigqbm9fYmlhcykp XSkgew0KICAgICAgY2FzZSBMOiB0b2xlZnQgPSBsZWZ0LTE7IGJyZWFrOw0K ICAgICAgY2FzZSBSOiB0b2xlZnQgPSBsZWZ0KzE7IGJyZWFrOw0KICAgICAg Y2FzZSBVOiB0b3RvcCA9IHRvcC0xOyBicmVhazsNCiAgICAgIGNhc2UgRDog dG90b3AgPSB0b3ArMTsgYnJlYWs7DQogICAgICBkZWZhdWx0OiBhYm9ydCgp OyBicmVhazsNCiAgICAgIH0NCiAgICB9DQogICAgDQoJciA9IHNjcmVlbi0+ cjsNCglpZiAobW9kZSA9PSBTVFJFVENIKSB7DQoJCXAgPSBhZGRwdChyLm1p biwgUHQoMCwgc2l6ZXktdG9wLTEpKTsNCgkJcDIgPSBhZGRwdChyLm1pbiwg UHQoMCwgc2l6ZXktdG9wLTIpKTsNCgkJciA9IFJwdChwLCBhZGRwdChQdChz aXpleCwgdG9wKzEpLCBwKSk7DQovLwkJWENvcHlBcmVhIChkcHksIHdpbmRv dywgd2luZG93LCBnYywgMCwgc2l6ZXktdG9wLTIsIHNpemV4LCB0b3ArMSwg DQovLwkJMCwgc2l6ZXktdG9wLTEpOyANCiAgIAl9IGVsc2Ugew0KCQlwID0g YWRkcHQoci5taW4sIFB0KHRvbGVmdCwgdG90b3ApKTsNCgkJcDIgPSBhZGRw dChyLm1pbiwgUHQobGVmdCwgdG9wKSk7DQoJCXIgPSBScHQocCwgYWRkcHQo UHQod2lkdGgsIGhlaWdodCksIHApKTsNCi8vCQlYQ29weUFyZWEgKGRweSwg d2luZG93LCB3aW5kb3csIGdjLCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQs DQovLwkJIHRvbGVmdCwgdG90b3ApOw0KCX0NCg0KCWRyYXcoc2NyZWVuLCBy LCBzY3JlZW4sIG5pbCwgcDIpOw0KDQojdW5kZWYgbnJuZA0KfQ0KDQoNCnZv aWQNCnNjcmVlbmhhY2sgKHZvaWQpDQp7DQoJaW5pdF9kZWNheSAoKTsNCgl3 aGlsZSAoMSkgew0KCQlpbnQgaTsNCgkJZm9yIChpID0gMDsgaSA8IGl0ZXJh dGlvbnM7IGkrKykNCgkJCWRlY2F5MSAoKTsNCgkJZmx1c2hpbWFnZShkaXNw bGF5LCAxKTsNCgkJaWYoZWNhbm1vdXNlKCkpIHsNCgkJCW0gPSBlbW91c2Uo KTsNCgkJCWlmKG0uYnV0dG9ucyY0KSB7DQoJCQkJaWYoZW1lbnVoaXQoMywg Jm0sICZtZW51KSA9PSAwKSANCgkJCQkJZXhpdHMoMCk7DQoJCQl9DQoJCX0N CgkJaWYgKGRlbGF5KSBzbGVlcCAoZGVsYXkpOw0KCX0NCn0NCg0KDQp2b2lk DQplcmVzaXplZChpbnQgbmV3KQ0Kew0KCQ0KCWlmKG5ldyAmJiBnZXR3aW5k b3coZGlzcGxheSwgUmVmbm9uZSkgPCAwKSB7DQoJCXN5c2ZhdGFsKCJjYW4n dCByZWF0dGFjaCB0byB3aW5kb3c6ICVyIik7DQoJfQ0KDQoJaWYoc2NyaW1n ICE9IG5pbCkNCgkJZnJlZWltYWdlKHNjcmltZyk7DQoJDQoJc2NyaW1nID0g c3F1ZWV6ZShzY3JidWYpOw0KCWlmKHNjcmltZyA9PSBuaWwpDQoJCXN5c2Zh dGFsKCJ1bmFibGUgdG8gZml0IHNjcmVlbnNob3QgdG8gd2luZG93OiAlciIp Ow0KDQoJaW5pdF9kZWNheSgpOw0KCWRyYXcoc2NyZWVuLCBzY3JlZW4tPnIs IHNjcmltZywgbmlsLCBzY3JpbWctPnIubWluKTsNCn0NCg0KDQoNCnZvaWQg DQptYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCnsNCg0KCVVTRUQoYXJn YywgYXJndik7DQoJc3JhbmQodGltZSgwKSk7DQoNCglzY3JidWYgPSBnZXRz Y3IoKTsNCglpZihzY3JidWYgPT0gbmlsKQ0KCQlzeXNmYXRhbCgiY291bGQg bm90IG9idGFpbiBzY3JlZW5zaG90OiAlciIpOw0KDQoJaWYoaW5pdGRyYXco bmlsLCBuaWwsICJkZWNheXNjcmVlbiIpIDwgMCkNCgkJc3lzZmF0YWwoImlu aXRkcmF3IGZhaWxlZDogJXIiKTsNCg0KCWVpbml0KEVtb3VzZSk7DQoJZXJl c2l6ZWQoMCk7DQoNCglzY3JlZW5oYWNrKCk7DQp9DQo= --0-1582020745-1029573913=:47692--