From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.61]) by mx.groups.io with SMTP id smtpd.web10.1548.1587714846589012577 for ; Fri, 24 Apr 2020 00:54:06 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=I43kjjf/; spf=pass (domain: redhat.com, ip: 205.139.110.61, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1587714845; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=D4SqH86AAlzKyyNywKwEAxU68nMmC59SVhJvsmEZlUc=; b=I43kjjf/U8NT/EDP2YXODkH2gH+SB7TGlwXuD6VeDmA2ohmnPUj+fRQmUuMxMbMSJV3YOl CBijxUqy2qls/P/SVtE8PKrHIgkme/34WwL/3Mfahs9tnaWRU2plsjJYTBdrg4s0dOqqYg q2dXsDjjVq+0tX17xS+GKze30YGFLs8= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-462-9YOpH8W3NjmyRpmo1T-4kw-1; Fri, 24 Apr 2020 03:53:59 -0400 X-MC-Unique: 9YOpH8W3NjmyRpmo1T-4kw-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5F1A2107ACF3; Fri, 24 Apr 2020 07:53:58 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-159.ams2.redhat.com [10.36.113.159]) by smtp.corp.redhat.com (Postfix) with ESMTP id E70CA10016DA; Fri, 24 Apr 2020 07:53:56 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Jordan Justen , Per Sundstrom , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 1/7] OvmfPkg: introduce QemuFwCfgSimpleParserLib Date: Fri, 24 Apr 2020 09:53:47 +0200 Message-Id: <20200424075353.8489-2-lersek@redhat.com> In-Reply-To: <20200424075353.8489-1-lersek@redhat.com> References: <20200424075353.8489-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 V2UgYWxyZWFkeSBwYXJzZSBzb21lIGJvb2xlYW4gYW5kIGludGVnZXIgdmFsdWVzIGZyb20gbmFt ZWQgZndfY2ZnIGZpbGVzCih1c3VhbGx5IGludG8gUENEcyksIGFuZCB3ZSdyZSBnb2luZyB0byBj b3ZlciBtb3JlLiBBZGQgYSBkZWRpY2F0ZWQKbGlicmFyeSBmb3IgY2VudHJhbGl6aW5nIHRoZSBw YXJzaW5nIGxvZ2ljLgoKQ2M6IEFyZCBCaWVzaGV1dmVsIDxhcmQuYmllc2hldXZlbEBhcm0uY29t PgpDYzogSm9yZGFuIEp1c3RlbiA8am9yZGFuLmwuanVzdGVuQGludGVsLmNvbT4KQ2M6IFBlciBT dW5kc3Ryb20gPHBlcl9zdW5kc3Ryb21AeWFob28uY29tPgpDYzogUGhpbGlwcGUgTWF0aGlldS1E YXVkw6kgPHBoaWxtZEByZWRoYXQuY29tPgpSZWY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3Jl Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY4MQpTaWduZWQtb2ZmLWJ5OiBMYXN6bG8gRXJzZWsgPGxl cnNla0ByZWRoYXQuY29tPgotLS0KIE92bWZQa2cvT3ZtZlBrZy5kZWMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArCiBPdm1mUGtnL092bWZQ a2dJYTMyLmRzYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKwogT3ZtZlBrZy9Pdm1mUGtnSWEzMlg2NC5kc2MgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIE92bWZQa2cvT3ZtZlBrZ1g2NC5kc2MgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBPdm1m UGtnL0luY2x1ZGUvTGlicmFyeS9RZW11RndDZmdTaW1wbGVQYXJzZXJMaWIuaCAgICAgICAgICAg ICAgICAgICAgfCAxMjggKysrKysrKwogT3ZtZlBrZy9MaWJyYXJ5L1FlbXVGd0NmZ1NpbXBsZVBh cnNlckxpYi9RZW11RndDZmdTaW1wbGVQYXJzZXJMaWIuaW5mIHwgIDI3ICsrCiBPdm1mUGtnL0xp YnJhcnkvUWVtdUZ3Q2ZnU2ltcGxlUGFyc2VyTGliL1FlbXVGd0NmZ1NpbXBsZVBhcnNlci5jICAg ICAgfCAzOTggKysrKysrKysrKysrKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgNTYwIGluc2Vy dGlvbnMoKykKCmRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2cuZGVjIGIvT3ZtZlBrZy9Pdm1m UGtnLmRlYwppbmRleCAyODAzMDM5MWNmZjIuLjhhNDZmZTczMzQ0ZSAxMDA2NDQKLS0tIGEvT3Zt ZlBrZy9Pdm1mUGtnLmRlYworKysgYi9Pdm1mUGtnL092bWZQa2cuZGVjCkBAIC02MCw2ICs2MCwx MCBAQCBbTGlicmFyeUNsYXNzZXNdCiAgICMNCiAgIFFlbXVGd0NmZ1MzTGlifEluY2x1ZGUvTGli cmFyeS9RZW11RndDZmdTM0xpYi5oDQogDQorICAjIyAgQGxpYnJhcnljbGFzcyAgUGFyc2UgdGhl IGNvbnRlbnRzIG9mIG5hbWVkIGZ3X2NmZyBmaWxlcyBhcyBzaW1wbGUNCisgICMgICAgICAgICAg ICAgICAgICAoc2NhbGFyKSBkYXRhIHR5cGVzLg0KKyAgUWVtdUZ3Q2ZnU2ltcGxlUGFyc2VyTGli fEluY2x1ZGUvTGlicmFyeS9RZW11RndDZmdTaW1wbGVQYXJzZXJMaWIuaA0KKw0KICAgIyMgIEBs aWJyYXJ5Y2xhc3MgIFJld3JpdGUgdGhlIEJvb3RPcmRlciBOdlZhciBiYXNlZCBvbiBRRU1VJ3Mg ImJvb3RvcmRlciINCiAgICMgICAgICAgICAgICAgICAgICBmd19jZmcgZmlsZS4NCiAgICMNCmRp ZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2dJYTMyLmRzYyBiL092bWZQa2cvT3ZtZlBrZ0lhMzIu ZHNjCmluZGV4IGQ1ZTkwYzAwMTM3MC4uNWUyOTcyMDYzMTEwIDEwMDY0NAotLS0gYS9Pdm1mUGtn L092bWZQa2dJYTMyLmRzYworKysgYi9Pdm1mUGtnL092bWZQa2dJYTMyLmRzYwpAQCAtMTYwLDYg KzE2MCw3IEBAIFtMaWJyYXJ5Q2xhc3Nlc10KICAgVWVmaVVzYkxpYnxNZGVQa2cvTGlicmFyeS9V ZWZpVXNiTGliL1VlZmlVc2JMaWIuaW5mDQogICBTZXJpYWxpemVWYXJpYWJsZXNMaWJ8T3ZtZlBr Zy9MaWJyYXJ5L1NlcmlhbGl6ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaW5m DQogICBRZW11RndDZmdMaWJ8T3ZtZlBrZy9MaWJyYXJ5L1FlbXVGd0NmZ0xpYi9RZW11RndDZmdE eGVMaWIuaW5mDQorICBRZW11RndDZmdTaW1wbGVQYXJzZXJMaWJ8T3ZtZlBrZy9MaWJyYXJ5L1Fl bXVGd0NmZ1NpbXBsZVBhcnNlckxpYi9RZW11RndDZmdTaW1wbGVQYXJzZXJMaWIuaW5mDQogICBW aXJ0aW9MaWJ8T3ZtZlBrZy9MaWJyYXJ5L1ZpcnRpb0xpYi9WaXJ0aW9MaWIuaW5mDQogICBMb2Fk TGludXhMaWJ8T3ZtZlBrZy9MaWJyYXJ5L0xvYWRMaW51eExpYi9Mb2FkTGludXhMaWIuaW5mDQog ICBNZW1FbmNyeXB0U2V2TGlifE92bWZQa2cvTGlicmFyeS9CYXNlTWVtRW5jcnlwdFNldkxpYi9C YXNlTWVtRW5jcnlwdFNldkxpYi5pbmYNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2dJYTMy WDY0LmRzYyBiL092bWZQa2cvT3ZtZlBrZ0lhMzJYNjQuZHNjCmluZGV4IDA2NmY0OWFlYWVlMC4u MThlNjkwOWEzM2ZhIDEwMDY0NAotLS0gYS9Pdm1mUGtnL092bWZQa2dJYTMyWDY0LmRzYworKysg Yi9Pdm1mUGtnL092bWZQa2dJYTMyWDY0LmRzYwpAQCAtMTY0LDYgKzE2NCw3IEBAIFtMaWJyYXJ5 Q2xhc3Nlc10KICAgVWVmaVVzYkxpYnxNZGVQa2cvTGlicmFyeS9VZWZpVXNiTGliL1VlZmlVc2JM aWIuaW5mDQogICBTZXJpYWxpemVWYXJpYWJsZXNMaWJ8T3ZtZlBrZy9MaWJyYXJ5L1NlcmlhbGl6 ZVZhcmlhYmxlc0xpYi9TZXJpYWxpemVWYXJpYWJsZXNMaWIuaW5mDQogICBRZW11RndDZmdMaWJ8 T3ZtZlBrZy9MaWJyYXJ5L1FlbXVGd0NmZ0xpYi9RZW11RndDZmdEeGVMaWIuaW5mDQorICBRZW11 RndDZmdTaW1wbGVQYXJzZXJMaWJ8T3ZtZlBrZy9MaWJyYXJ5L1FlbXVGd0NmZ1NpbXBsZVBhcnNl ckxpYi9RZW11RndDZmdTaW1wbGVQYXJzZXJMaWIuaW5mDQogICBWaXJ0aW9MaWJ8T3ZtZlBrZy9M aWJyYXJ5L1ZpcnRpb0xpYi9WaXJ0aW9MaWIuaW5mDQogICBMb2FkTGludXhMaWJ8T3ZtZlBrZy9M aWJyYXJ5L0xvYWRMaW51eExpYi9Mb2FkTGludXhMaWIuaW5mDQogICBNZW1FbmNyeXB0U2V2TGli fE92bWZQa2cvTGlicmFyeS9CYXNlTWVtRW5jcnlwdFNldkxpYi9CYXNlTWVtRW5jcnlwdFNldkxp Yi5pbmYNCmRpZmYgLS1naXQgYS9Pdm1mUGtnL092bWZQa2dYNjQuZHNjIGIvT3ZtZlBrZy9Pdm1m UGtnWDY0LmRzYwppbmRleCBhYzUxMDUyMmE5ZmYuLjNkMjRjYzRjMWNmYiAxMDA2NDQKLS0tIGEv T3ZtZlBrZy9Pdm1mUGtnWDY0LmRzYworKysgYi9Pdm1mUGtnL092bWZQa2dYNjQuZHNjCkBAIC0x NjQsNiArMTY0LDcgQEAgW0xpYnJhcnlDbGFzc2VzXQogICBVZWZpVXNiTGlifE1kZVBrZy9MaWJy YXJ5L1VlZmlVc2JMaWIvVWVmaVVzYkxpYi5pbmYNCiAgIFNlcmlhbGl6ZVZhcmlhYmxlc0xpYnxP dm1mUGtnL0xpYnJhcnkvU2VyaWFsaXplVmFyaWFibGVzTGliL1NlcmlhbGl6ZVZhcmlhYmxlc0xp Yi5pbmYNCiAgIFFlbXVGd0NmZ0xpYnxPdm1mUGtnL0xpYnJhcnkvUWVtdUZ3Q2ZnTGliL1FlbXVG d0NmZ0R4ZUxpYi5pbmYNCisgIFFlbXVGd0NmZ1NpbXBsZVBhcnNlckxpYnxPdm1mUGtnL0xpYnJh cnkvUWVtdUZ3Q2ZnU2ltcGxlUGFyc2VyTGliL1FlbXVGd0NmZ1NpbXBsZVBhcnNlckxpYi5pbmYN CiAgIFZpcnRpb0xpYnxPdm1mUGtnL0xpYnJhcnkvVmlydGlvTGliL1ZpcnRpb0xpYi5pbmYNCiAg IExvYWRMaW51eExpYnxPdm1mUGtnL0xpYnJhcnkvTG9hZExpbnV4TGliL0xvYWRMaW51eExpYi5p bmYNCiAgIE1lbUVuY3J5cHRTZXZMaWJ8T3ZtZlBrZy9MaWJyYXJ5L0Jhc2VNZW1FbmNyeXB0U2V2 TGliL0Jhc2VNZW1FbmNyeXB0U2V2TGliLmluZg0KZGlmZiAtLWdpdCBhL092bWZQa2cvSW5jbHVk ZS9MaWJyYXJ5L1FlbXVGd0NmZ1NpbXBsZVBhcnNlckxpYi5oIGIvT3ZtZlBrZy9JbmNsdWRlL0xp YnJhcnkvUWVtdUZ3Q2ZnU2ltcGxlUGFyc2VyTGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5jNjA2MmJhZTg3NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Pdm1mUGtn L0luY2x1ZGUvTGlicmFyeS9RZW11RndDZmdTaW1wbGVQYXJzZXJMaWIuaApAQCAtMCwwICsxLDEy OCBAQAorLyoqIEBmaWxlDQorICBQYXJzZSB0aGUgY29udGVudHMgb2YgbmFtZWQgZndfY2ZnIGZp bGVzIGFzIHNpbXBsZSAoc2NhbGFyKSBkYXRhIHR5cGVzLg0KKw0KKyAgQ29weXJpZ2h0IChDKSAy MDIwLCBSZWQgSGF0LCBJbmMuDQorDQorICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KKyoqLw0KKw0KKyNpZm5kZWYgUUVNVV9GV19DRkdfU0lNUExFX1BBUlNF Ul9MSUJfSF8NCisjZGVmaW5lIFFFTVVfRldfQ0ZHX1NJTVBMRV9QQVJTRVJfTElCX0hfDQorDQor I2luY2x1ZGUgPEJhc2UuaD4NCisNCisvKioNCisgIExvb2sgdXAgRmlsZU5hbWUgd2l0aCBRZW11 RndDZmdGaW5kRmlsZSgpIGZyb20gUWVtdUZ3Q2ZnTGliLiBSZWFkIHRoZSBmd19jZmcNCisgIGZp bGUgaW50byBhIHNtYWxsIGFycmF5IHdpdGggYXV0b21hdGljIHN0b3JhZ2UgZHVyYXRpb24uIFBh cnNlIHRoZSBhcnJheSBhcw0KKyAgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgYSBCT09M RUFOLg0KKw0KKyAgQHBhcmFtW2luXSBGaWxlTmFtZSAgVGhlIG5hbWUgb2YgdGhlIGZ3X2NmZyBm aWxlIHRvIGxvb2sgdXAgYW5kIHBhcnNlLg0KKw0KKyAgQHBhcmFtW291dF0gVmFsdWUgICAgT24g c3VjY2VzcywgVmFsdWUgaXMgVFJVRSBpZiB0aGUgY29udGVudHMgb2YgdGhlIGZ3X2NmZw0KKyAg ICAgICAgICAgICAgICAgICAgICAgZmlsZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2ggInRydWUi LCAieWVzIiwgInkiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgImVuYWJsZSIsICJlbmFibGVk IiwgIjEiLg0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgT24gc3VjY2VzcywgVmFsdWUgaXMg RkFMU0UgaWYgdGhlIGNvbnRlbnRzIG9mIHRoZSBmd19jZmcNCisgICAgICAgICAgICAgICAgICAg ICAgIGZpbGUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoICJmYWxzZSIsICJubyIsICJuIiwNCisg ICAgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlIiwgImRpc2FibGVkIiwgIjAiLg0KKw0KKyAg ICAgICAgICAgICAgICAgICAgICAgT24gZmFpbHVyZSwgVmFsdWUgaXMgbm90IGNoYW5nZWQuDQor DQorICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTICAgICAgICAgUGFyc2luZyBzdWNjZXNzZnVsLiBW YWx1ZSBoYXMgYmVlbiBzZXQuDQorDQorICBAcmV0dmFsIFJFVFVSTl9VTlNVUFBPUlRFRCAgICAg RmlybXdhcmUgY29uZmlndXJhdGlvbiBpcyB1bmF2YWlsYWJsZS4NCisNCisgIEByZXR2YWwgUkVU VVJOX1BST1RPQ09MX0VSUk9SICBQYXJzaW5nIGZhaWxlZC4gVmFsdWUgaGFzIG5vdCBiZWVuIGNo YW5nZWQuDQorDQorICBAcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZXMg cHJvcGFnYXRlZCBmcm9tDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUWVtdUZ3 Q2ZnRmluZEZpbGUoKS4gVmFsdWUgaGFzIG5vdCBiZWVuDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhbmdlZC4NCisqKi8NCitSRVRVUk5fU1RBVFVTDQorRUZJQVBJDQorUWVt dUZ3Q2ZnUGFyc2VCb29sICgNCisgIElOICBDT05TVCBDSEFSOCAqRmlsZU5hbWUsDQorICBPVVQg Qk9PTEVBTiAgICAgKlZhbHVlDQorICApOw0KKw0KKy8qKg0KKyAgTG9vayB1cCBGaWxlTmFtZSB3 aXRoIFFlbXVGd0NmZ0ZpbmRGaWxlKCkgZnJvbSBRZW11RndDZmdMaWIuIFJlYWQgdGhlIGZ3X2Nm Zw0KKyAgZmlsZSBpbnRvIGEgc21hbGwgYXJyYXkgd2l0aCBhdXRvbWF0aWMgc3RvcmFnZSBkdXJh dGlvbi4gUGFyc2UgdGhlIGFycmF5IGFzDQorICB0aGUgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBv ZiBhIFVJTlQ4Lg0KKw0KKyAgQHBhcmFtW2luXSBGaWxlTmFtZSAgICBUaGUgbmFtZSBvZiB0aGUg ZndfY2ZnIGZpbGUgdG8gbG9vayB1cCBhbmQgcGFyc2UuDQorDQorICBAcGFyYW1baW5dIFBhcnNl QXNIZXggIElmIFRSVUUsIGNhbGwgQmFzZUxpYidzIEFzY2lpU3RySGV4VG9VaW50NjRTKCkgZm9y DQorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNpbmcgdGhlIGZ3X2NmZyBmaWxlLg0KKw0K KyAgICAgICAgICAgICAgICAgICAgICAgICBJZiBGQUxTRSwgY2FsbCBCYXNlTGliJ3MgQXNjaWlT dHJEZWNpbWFsVG9VaW50NjRTKCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnNp bmcgdGhlIGZ3X2NmZyBmaWxlLg0KKw0KKyAgQHBhcmFtW291dF0gVmFsdWUgICAgICBPbiBzdWNj ZXNzLCBWYWx1ZSBoYXMgYmVlbiBwYXJzZWQgd2l0aCB0aGUgQmFzZUxpYg0KKyAgICAgICAgICAg ICAgICAgICAgICAgICBmdW5jdGlvbiBkZXRlcm1pbmVkIGJ5IFBhcnNlQXNIZXgsIGFuZCBhbHNv DQorICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlLWNoZWNrZWQgZm9yIFswLCBNQVhfVUlO VDhdLg0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICBPbiBmYWlsdXJlLCBWYWx1ZSBpcyBu b3QgY2hhbmdlZC4NCisNCisgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICBQYXJzaW5n IHN1Y2Nlc3NmdWwuIFZhbHVlIGhhcyBiZWVuIHNldC4NCisNCisgIEByZXR2YWwgUkVUVVJOX1VO U1VQUE9SVEVEICAgICBGaXJtd2FyZSBjb25maWd1cmF0aW9uIGlzIHVuYXZhaWxhYmxlLg0KKw0K KyAgQHJldHZhbCBSRVRVUk5fUFJPVE9DT0xfRVJST1IgIFBhcnNpbmcgZmFpbGVkLiBWYWx1ZSBo YXMgbm90IGJlZW4gY2hhbmdlZC4NCisNCisgIEByZXR2YWwgUkVUVVJOX1BST1RPQ09MX0VSUk9S ICBQYXJzaW5nIHN1Y2NlZWRlZCwgYnV0IHRoZSByZXN1bHQgZG9lcyBub3QgZml0DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIFswLCBNQVhfVUlOVDhdIHJhbmdlLiBW YWx1ZSBoYXMgbm90DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBjaGFu Z2VkLg0KKw0KKyAgQHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yIGNvZGVzIHBy b3BhZ2F0ZWQgZnJvbQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFlbXVGd0Nm Z0ZpbmRGaWxlKCkgYW5kIGZyb20gdGhlIEJhc2VMaWINCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RlZCBieSBQYXJzZUFzSGV4LiBWYWx1ZSBoYXMgbm90 DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBjaGFuZ2VkLg0KKyoqLw0K K1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitRZW11RndDZmdQYXJzZVVpbnQ4ICgNCisgIElOICBD T05TVCBDSEFSOCAqRmlsZU5hbWUsDQorICBJTiAgQk9PTEVBTiAgICAgUGFyc2VBc0hleCwNCisg IE9VVCBVSU5UOCAgICAgICAqVmFsdWUNCisgICk7DQorDQorLy8NCisvLyBUaGUgZm9sbG93aW5n IGZ1bmN0aW9ucyBiZWhhdmUgaWRlbnRpY2FsbHkgdG8gUWVtdUZ3Q2ZnUGFyc2VVaW50OCgpLA0K Ky8vIG9ubHkgdGhlaXIgcmFuZ2UgY2hlY2tzIHVzZSBNQVhfVUlOVDE2LCBNQVhfVUlOVDMyLCBN QVhfVUlOVDY0LCBNQVhfVUlOVE4sDQorLy8gcmVzcGVjdGl2ZWx5Lg0KKy8vDQorDQorUkVUVVJO X1NUQVRVUw0KK0VGSUFQSQ0KK1FlbXVGd0NmZ1BhcnNlVWludDE2ICgNCisgIElOICBDT05TVCBD SEFSOCAqRmlsZU5hbWUsDQorICBJTiAgQk9PTEVBTiAgICAgUGFyc2VBc0hleCwNCisgIE9VVCBV SU5UMTYgICAgICAqVmFsdWUNCisgICk7DQorDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK1Fl bXVGd0NmZ1BhcnNlVWludDMyICgNCisgIElOICBDT05TVCBDSEFSOCAqRmlsZU5hbWUsDQorICBJ TiAgQk9PTEVBTiAgICAgUGFyc2VBc0hleCwNCisgIE9VVCBVSU5UMzIgICAgICAqVmFsdWUNCisg ICk7DQorDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK1FlbXVGd0NmZ1BhcnNlVWludDY0ICgN CisgIElOICBDT05TVCBDSEFSOCAqRmlsZU5hbWUsDQorICBJTiAgQk9PTEVBTiAgICAgUGFyc2VB c0hleCwNCisgIE9VVCBVSU5UNjQgICAgICAqVmFsdWUNCisgICk7DQorDQorUkVUVVJOX1NUQVRV Uw0KK0VGSUFQSQ0KK1FlbXVGd0NmZ1BhcnNlVWludG4gKA0KKyAgSU4gIENPTlNUIENIQVI4ICpG aWxlTmFtZSwNCisgIElOICBCT09MRUFOICAgICBQYXJzZUFzSGV4LA0KKyAgT1VUIFVJTlROICAg ICAgICpWYWx1ZQ0KKyAgKTsNCisNCisjZW5kaWYgLy8gUUVNVV9GV19DRkdfU0lNUExFX1BBUlNF Ul9MSUJfSF8NCmRpZmYgLS1naXQgYS9Pdm1mUGtnL0xpYnJhcnkvUWVtdUZ3Q2ZnU2ltcGxlUGFy c2VyTGliL1FlbXVGd0NmZ1NpbXBsZVBhcnNlckxpYi5pbmYgYi9Pdm1mUGtnL0xpYnJhcnkvUWVt dUZ3Q2ZnU2ltcGxlUGFyc2VyTGliL1FlbXVGd0NmZ1NpbXBsZVBhcnNlckxpYi5pbmYKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jMGU2YWIzYTEzMDMKLS0tIC9kZXYv bnVsbAorKysgYi9Pdm1mUGtnL0xpYnJhcnkvUWVtdUZ3Q2ZnU2ltcGxlUGFyc2VyTGliL1FlbXVG d0NmZ1NpbXBsZVBhcnNlckxpYi5pbmYKQEAgLTAsMCArMSwyNyBAQAorIyMgQGZpbGUNCisjIFBh cnNlIHRoZSBjb250ZW50cyBvZiBuYW1lZCBmd19jZmcgZmlsZXMgYXMgc2ltcGxlIChzY2FsYXIp IGRhdGEgdHlwZXMuDQorIw0KKyMgQ29weXJpZ2h0IChDKSAyMDIwLCBSZWQgSGF0LCBJbmMuDQor Iw0KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCisjIw0K Kw0KK1tEZWZpbmVzXQ0KKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMS4yOQ0K KyAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgICAgID0gUWVtdUZ3Q2ZnU2ltcGxlUGFyc2Vy TGliDQorICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSBhOWExMjExZC0wNjFlLTRi NjQtYWYzMC01ZGQwY2FjOWRjOTkNCisgIE1PRFVMRV9UWVBFICAgICAgICAgICAgICAgICAgICA9 IEJBU0UNCisgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEuMA0KKyAgTElCUkFS WV9DTEFTUyAgICAgICAgICAgICAgICAgID0gUWVtdUZ3Q2ZnU2ltcGxlUGFyc2VyTGliDQorICBD T05TVFJVQ1RPUiAgICAgICAgICAgICAgICAgICAgPSBRZW11RndDZmdTaW1wbGVQYXJzZXJJbml0 DQorDQorW1NvdXJjZXNdDQorICBRZW11RndDZmdTaW1wbGVQYXJzZXIuYw0KKw0KK1tQYWNrYWdl c10NCisgIE1kZVBrZy9NZGVQa2cuZGVjDQorICBPdm1mUGtnL092bWZQa2cuZGVjDQorDQorW0xp YnJhcnlDbGFzc2VzXQ0KKyAgQmFzZUxpYg0KKyAgUWVtdUZ3Q2ZnTGliDQpkaWZmIC0tZ2l0IGEv T3ZtZlBrZy9MaWJyYXJ5L1FlbXVGd0NmZ1NpbXBsZVBhcnNlckxpYi9RZW11RndDZmdTaW1wbGVQ YXJzZXIuYyBiL092bWZQa2cvTGlicmFyeS9RZW11RndDZmdTaW1wbGVQYXJzZXJMaWIvUWVtdUZ3 Q2ZnU2ltcGxlUGFyc2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw Li41Y2EyMmZjZjBkZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Pdm1mUGtnL0xpYnJhcnkvUWVtdUZ3 Q2ZnU2ltcGxlUGFyc2VyTGliL1FlbXVGd0NmZ1NpbXBsZVBhcnNlci5jCkBAIC0wLDAgKzEsMzk4 IEBACisvKiogQGZpbGUNCisgIFBhcnNlIHRoZSBjb250ZW50cyBvZiBuYW1lZCBmd19jZmcgZmls ZXMgYXMgc2ltcGxlIChzY2FsYXIpIGRhdGEgdHlwZXMuDQorDQorICBDb3B5cmlnaHQgKEMpIDIw MjAsIFJlZCBIYXQsIEluYy4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQorKiovDQorDQorI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KKyNp bmNsdWRlIDxMaWJyYXJ5L1FlbXVGd0NmZ0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5L1FlbXVG d0NmZ1NpbXBsZVBhcnNlckxpYi5oPg0KKw0KKy8vDQorLy8gU2l6ZSBvZiB0aGUgbG9uZ2VzdCB2 YWxpZCBVSU5UNjQgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTC4NCisvLw0K KyNkZWZpbmUgVUlOVDY0X1NUUklOR19NQVhfU0laRSBcDQorICBNQVggKHNpemVvZiAiMTg0NDY3 NDQwNzM3MDk1NTE2MTUiLCBzaXplb2YgIjB4RkZGRkZGRkZGRkZGRkZGRiIpDQorDQorLy8NCisv LyBTaXplIG9mIHRoZSBsb25nZXN0IHZhbGlkIEJPT0wgc3RyaW5nIChzZWUgdGhlICJtVHJ1ZVN0 cmluZyIgYW5kDQorLy8gIm1GYWxzZVN0cmluZyIgYXJyYXlzIGJlbG93KSwgaW5jbHVkaW5nIHRo ZSB0ZXJtaW5hdGluZyBOVUwuDQorLy8NCisjZGVmaW5lIEJPT0xfU1RSSU5HX01BWF9TSVpFIChz aXplb2YgImRpc2FibGVkIikNCisNCisvLw0KKy8vIExlbmd0aCBvZiAiXHJcbiIsIG5vdCBpbmNs dWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTC4NCisvLw0KKyNkZWZpbmUgQ1JMRl9MRU5HVEggKHNp emVvZiAiXHJcbiIgLSAxKQ0KKw0KKy8vDQorLy8gV29yZHMgcmVjb2duaXplZCBhcyByZXByZXNl bnRpbmcgVFJVRSBvciBGQUxTRS4NCisvLw0KK1NUQVRJQyBDT05TVCBDSEFSOCAqIENPTlNUIG1U cnVlU3RyaW5nW10gPSB7DQorICAidHJ1ZSIsICJ5ZXMiLCAieSIsICJlbmFibGUiLCAiZW5hYmxl ZCIsICIxIg0KK307DQorU1RBVElDIENPTlNUIENIQVI4ICogQ09OU1QgbUZhbHNlU3RyaW5nW10g PSB7DQorICAiZmFsc2UiLCAibm8iLCAibiIsICJkaXNhYmxlIiwgImRpc2FibGVkIiwgIjAiDQor fTsNCisNCisvLw0KKy8vIEhlbHBlciBmdW5jdGlvbnMuDQorLy8NCisNCisvKioNCisgIExvb2sg dXAgRmlsZU5hbWUgd2l0aCBRZW11RndDZmdGaW5kRmlsZSgpIGZyb20gUWVtdUZ3Q2ZnTGliLiBS ZWFkIHRoZSBmd19jZmcNCisgIGZpbGUgaW50byB0aGUgY2FsbGVyLXByb3ZpZGVkIENIQVI4IGFy cmF5LiBOVUwtdGVybWluYXRlIHRoZSBhcnJheS4NCisNCisgIEBwYXJhbVtpbl0gRmlsZU5hbWUg ICAgICAgIFRoZSBuYW1lIG9mIHRoZSBmd19jZmcgZmlsZSB0byBsb29rIHVwIGFuZCByZWFkLg0K Kw0KKyAgQHBhcmFtW2luLG91dF0gQnVmZmVyU2l6ZSAgT24gaW5wdXQsIG51bWJlciBvZiBieXRl cyBhdmFpbGFibGUgaW4gQnVmZmVyLg0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg T24gb3V0cHV0LCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdG9yZWQgdG8gQnVmZmVyLg0KKw0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgT24gZXJyb3IsIEJ1ZmZlclNpemUgaXMgaW5kZXRlcm1pbmF0ZS4NCisN CisgIEBwYXJhbVtvdXRdIEJ1ZmZlciAgICAgICAgIFRoZSBidWZmZXIgdG8gcmVhZCB0aGUgZndf Y2ZnIGZpbGUgaW50by4gSWYgdGhlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd19j ZmcgZmlsZSBjb250ZW50cyBhcmUgbm90IE5VTC10ZXJtaW5hdGVkLCB0aGVuDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhIE5VTCBjaGFyYWN0ZXIgaXMgcGxhY2VkIGludG8gQnVmZmVy IGFmdGVyIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZndfY2ZnIGZpbGUgY29u dGVudHMuDQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBlcnJvciwgQnVmZmVy IGlzIGluZGV0ZXJtaW5hdGUuDQorDQorICBAcmV0dmFsIFJFVFVSTl9TVUNDRVNTICAgICAgICAg QnVmZmVyIGhhcyBiZWVuIHBvcHVsYXRlZCB3aXRoIHRoZSBmd19jZmcgZmlsZQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzLiBCdWZmZXIgaXMgTlVMLXRlcm1pbmF0 ZWQgcmVnYXJkbGVzcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHdoZXRo ZXIgdGhlIGZ3X2NmZyBmaWxlIGl0c2VsZiB3YXMNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUwtdGVybWluYXRlZC4NCisNCisgIEByZXR2YWwgUkVUVVJOX1VOU1VQUE9SVEVE ICAgICBGaXJtd2FyZSBjb25maWd1cmF0aW9uIGlzIHVuYXZhaWxhYmxlLg0KKw0KKyAgQHJldHZh bCBSRVRVUk5fUFJPVE9DT0xfRVJST1IgIFRoZSBmd19jZmcgZmlsZSBkb2VzIG5vdCBmaXQgaW50 byBCdWZmZXIuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRoaXMgaXMgY29u c2lkZXJlZCBhIFFFTVUgY29uZmlndXJhdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVycm9yOyBCdWZmZXJTaXplIGlzIGNvbnNpZGVyZWQgYXV0aG9yaXRhdGl2ZQ0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB0aGUgY29udGVudHMgb2YgdGhlIGZ3 X2NmZyBmaWxlIGlkZW50aWZpZWQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi eSBGaWxlTmFtZS4pDQorDQorICBAcmV0dmFsIFJFVFVSTl9QUk9UT0NPTF9FUlJPUiAgVGhlIGZ3 X2NmZyBmaWxlIGNvbnRlbnRzIGFyZSBub3QgdGhlbXNlbHZlcw0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTC10ZXJtaW5hdGVkLCBhbmQgYW4gZXh0cmEgTlVMIGJ5dGUgZG9l cyBub3QNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXQgaW50byBCdWZmZXIu IChBZ2FpbiBhIFFFTVUgY29uZmlndXJhdGlvbg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVycm9yLikNCisNCisgIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICBFcnJv ciBjb2RlcyBwcm9wYWdhdGVkIGZyb20NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBRZW11RndDZmdGaW5kRmlsZSgpLg0KKyoqLw0KK1NUQVRJQw0KK1JFVFVSTl9TVEFUVVMNCitR ZW11RndDZmdHZXRBc1N0cmluZyAoDQorICBJTiAgICAgQ09OU1QgQ0hBUjggKkZpbGVOYW1lLA0K KyAgSU4gT1VUIFVJTlROICAgICAgICpCdWZmZXJTaXplLA0KKyAgT1VUICAgIENIQVI4ICAgICAg ICpCdWZmZXINCisgICkNCit7DQorICBSRVRVUk5fU1RBVFVTICAgICAgICBTdGF0dXM7DQorICBG SVJNV0FSRV9DT05GSUdfSVRFTSBGd0NmZ0l0ZW07DQorICBVSU5UTiAgICAgICAgICAgICAgICBG d0NmZ1NpemU7DQorDQorICBpZiAoIVFlbXVGd0NmZ0lzQXZhaWxhYmxlICgpKSB7DQorICAgIHJl dHVybiBSRVRVUk5fVU5TVVBQT1JURUQ7DQorICB9DQorDQorICBTdGF0dXMgPSBRZW11RndDZmdG aW5kRmlsZSAoRmlsZU5hbWUsICZGd0NmZ0l0ZW0sICZGd0NmZ1NpemUpOw0KKyAgaWYgKFJFVFVS Tl9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKyAgaWYgKEZ3 Q2ZnU2l6ZSA+ICpCdWZmZXJTaXplKSB7DQorICAgIHJldHVybiBSRVRVUk5fUFJPVE9DT0xfRVJS T1I7DQorICB9DQorDQorICBRZW11RndDZmdTZWxlY3RJdGVtIChGd0NmZ0l0ZW0pOw0KKyAgUWVt dUZ3Q2ZnUmVhZEJ5dGVzIChGd0NmZ1NpemUsIEJ1ZmZlcik7DQorDQorICAvLw0KKyAgLy8gSWYg QnVmZmVyIGlzIGFscmVhZHkgTlVMLXRlcm1pbmF0ZWQgZHVlIHRvIGZ3X2NmZyBjb250ZW50cywg d2UncmUgZG9uZS4NCisgIC8vDQorICBpZiAoRndDZmdTaXplID4gMCAmJiBCdWZmZXJbRndDZmdT aXplIC0gMV0gPT0gJ1wwJykgew0KKyAgICAqQnVmZmVyU2l6ZSA9IEZ3Q2ZnU2l6ZTsNCisgICAg cmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KKyAgfQ0KKyAgLy8NCisgIC8vIE90aGVyd2lzZSwgYXBw ZW5kIGEgTlVMIGJ5dGUgdG8gQnVmZmVyIChpZiB3ZSBoYXZlIHJvb20gZm9yIGl0KS4NCisgIC8v DQorICBpZiAoRndDZmdTaXplID09ICpCdWZmZXJTaXplKSB7DQorICAgIHJldHVybiBSRVRVUk5f UFJPVE9DT0xfRVJST1I7DQorICB9DQorICBCdWZmZXJbRndDZmdTaXplXSA9ICdcMCc7DQorICAq QnVmZmVyU2l6ZSA9IEZ3Q2ZnU2l6ZSArIDE7DQorICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQor fQ0KKw0KKy8qKg0KKyAgUmVtb3ZlIGEgdHJhaWxpbmcgXHJcbiBvciBcbiBzZXF1ZW5jZSBmcm9t IGEgc3RyaW5nLg0KKw0KKyAgQHBhcmFtW2luLG91dF0gQnVmZmVyU2l6ZSAgT24gaW5wdXQsIHRo ZSBudW1iZXIgb2YgYnl0ZXMgaW4gQnVmZmVyLCBpbmNsdWRpbmcNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRoZSB0ZXJtaW5hdGluZyBOVUwuDQorDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBPbiBvdXRwdXQsIHRoZSBhZGp1c3RlZCBzdHJpbmcgc2l6ZSAoaW5jbHVkaW5n IHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRpbmcgTlVMKSwgYWZ0 ZXIgc3RyaXBwaW5nIHRoZSBcclxuIG9yIFxuDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdWZmaXguDQorDQorICBAcGFyYW1baW4sb3V0XSBCdWZmZXIgICAgICBUaGUgTlVMLXRlcm1p bmF0ZWQgc3RyaW5nIHRvIHRyaW0uDQorKiovDQorU1RBVElDDQorVk9JRA0KK1N0cmlwTmV3bGlu ZSAoDQorICBJTiBPVVQgVUlOVE4gKkJ1ZmZlclNpemUsDQorICBJTiBPVVQgQ0hBUjggKkJ1ZmZl cg0KKyAgKQ0KK3sNCisgIFVJTlROIEluU2l6ZSwgT3V0U2l6ZTsNCisNCisgIEluU2l6ZSA9ICpC dWZmZXJTaXplOw0KKyAgT3V0U2l6ZSA9IEluU2l6ZTsNCisNCisgIGlmIChJblNpemUgPj0gMyAm Jg0KKyAgICAgIEJ1ZmZlcltJblNpemUgLSAzXSA9PSAnXHInICYmIEJ1ZmZlcltJblNpemUgLSAy XSA9PSAnXG4nKSB7DQorICAgIE91dFNpemUgPSBJblNpemUgLSAyOw0KKyAgfSBlbHNlIGlmIChJ blNpemUgPj0gMiAmJiBCdWZmZXJbSW5TaXplIC0gMl0gPT0gJ1xuJykgew0KKyAgICBPdXRTaXpl ID0gSW5TaXplIC0gMTsNCisgIH0NCisNCisgIGlmIChPdXRTaXplIDwgSW5TaXplKSB7DQorICAg IEJ1ZmZlcltPdXRTaXplIC0gMV0gPSAnXDAnOw0KKyAgICAqQnVmZmVyU2l6ZSA9IE91dFNpemU7 DQorICB9DQorfQ0KKw0KKy8qKg0KKyAgUmVhZCB0aGUgZndfY2ZnIGZpbGUgaWRlbnRpZmllZCBi eSBGaWxlTmFtZSBhcyBhIHN0cmluZyBpbnRvIGEgc21hbGwgYXJyYXkNCisgIHdpdGggYXV0b21h dGljIHN0b3JhZ2UgZHVyYXRpb24sIHVzaW5nIFFlbXVGd0NmZ0dldEFzU3RyaW5nKCkuIFBhcnNl IHRoZQ0KKyAgc3RyaW5nIGFzIGEgVUlOVDY0LiBQZXJmb3JtIGEgcmFuZ2UtY2hlY2sgb24gdGhl IHBhcnNlZCB2YWx1ZS4NCisNCisgIEBwYXJhbVtpbl0gRmlsZU5hbWUgICAgVGhlIG5hbWUgb2Yg dGhlIGZ3X2NmZyBmaWxlIHRvIGxvb2sgdXAgYW5kIHBhcnNlLg0KKw0KKyAgQHBhcmFtW2luXSBQ YXJzZUFzSGV4ICBJZiBUUlVFLCBjYWxsIEJhc2VMaWIncyBBc2NpaVN0ckhleFRvVWludDY0Uygp IGZvcg0KKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzaW5nIHRoZSBmd19jZmcgZmlsZS4N CisNCisgICAgICAgICAgICAgICAgICAgICAgICAgSWYgRkFMU0UsIGNhbGwgQmFzZUxpYidzIEFz Y2lpU3RyRGVjaW1hbFRvVWludDY0UygpDQorICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBw YXJzaW5nIHRoZSBmd19jZmcgZmlsZS4NCisNCisgIEBwYXJhbVtpbl0gTGltaXQgICAgICAgVGhl IGluY2x1c2l2ZSB1cHBlciBib3VuZCBvbiB0aGUgcGFyc2VkIFVJTlQ2NCB2YWx1ZS4NCisNCisg IEBwYXJhbVtvdXRdIFZhbHVlICAgICAgT24gc3VjY2VzcywgVmFsdWUgaGFzIGJlZW4gcGFyc2Vk IHdpdGggdGhlIEJhc2VMaWINCisgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGV0 ZXJtaW5lZCBieSBQYXJzZUFzSGV4LCBhbmQgaGFzIGJlZW4NCisgICAgICAgICAgICAgICAgICAg ICAgICAgcmFuZ2UtY2hlY2tlZCBhZ2FpbnN0IFswLCBMaW1pdF0uDQorDQorICAgICAgICAgICAg ICAgICAgICAgICAgIE9uIGZhaWx1cmUsIFZhbHVlIGlzIG5vdCBjaGFuZ2VkLg0KKw0KKyAgQHJl dHZhbCBSRVRVUk5fU1VDQ0VTUyAgICAgICAgIFBhcnNpbmcgc3VjY2Vzc2Z1bC4gVmFsdWUgaGFz IGJlZW4gc2V0Lg0KKw0KKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQT1JURUQgICAgIEZpcm13YXJl IGNvbmZpZ3VyYXRpb24gaXMgdW5hdmFpbGFibGUuDQorDQorICBAcmV0dmFsIFJFVFVSTl9QUk9U T0NPTF9FUlJPUiAgUGFyc2luZyBmYWlsZWQuIFZhbHVlIGhhcyBub3QgYmVlbiBjaGFuZ2VkLg0K Kw0KKyAgQHJldHZhbCBSRVRVUk5fUFJPVE9DT0xfRVJST1IgIFBhcnNpbmcgc3VjY2VlZGVkLCBi dXQgdGhlIHJlc3VsdCBkb2VzIG5vdCBmaXQNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbiB0aGUgWzAsIExpbWl0XSByYW5nZS4gVmFsdWUgaGFzIG5vdCBiZWVuDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZC4NCisNCisgIEByZXR1cm4gICAgICAg ICAgICAgICAgICAgICAgICBFcnJvciBjb2RlcyBwcm9wYWdhdGVkIGZyb20NCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBRZW11RndDZmdGaW5kRmlsZSgpIGFuZCBmcm9tIHRoZSBC YXNlTGliDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0 ZWQgYnkgUGFyc2VBc0hleC4gVmFsdWUgaGFzIG5vdA0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJlZW4gY2hhbmdlZC4NCisqKi8NCitTVEFUSUMNCitSRVRVUk5fU1RBVFVTDQor UWVtdUZ3Q2ZnUGFyc2VVaW50NjRXaXRoTGltaXQgKA0KKyAgSU4gIENPTlNUIENIQVI4ICpGaWxl TmFtZSwNCisgIElOICBCT09MRUFOICAgICBQYXJzZUFzSGV4LA0KKyAgSU4gIFVJTlQ2NCAgICAg IExpbWl0LA0KKyAgT1VUIFVJTlQ2NCAgICAgICpWYWx1ZQ0KKyAgKQ0KK3sNCisgIFVJTlROICAg ICAgICAgVWludDY0U3RyaW5nU2l6ZTsNCisgIENIQVI4ICAgICAgICAgVWludDY0U3RyaW5nW1VJ TlQ2NF9TVFJJTkdfTUFYX1NJWkUgKyBDUkxGX0xFTkdUSF07DQorICBSRVRVUk5fU1RBVFVTIFN0 YXR1czsNCisgIENIQVI4ICAgICAgICAgKkVuZFBvaW50ZXI7DQorICBVSU5UNjQgICAgICAgIFVp bnQ2NDsNCisNCisgIFVpbnQ2NFN0cmluZ1NpemUgPSBzaXplb2YgVWludDY0U3RyaW5nOw0KKyAg U3RhdHVzID0gUWVtdUZ3Q2ZnR2V0QXNTdHJpbmcgKEZpbGVOYW1lLCAmVWludDY0U3RyaW5nU2l6 ZSwgVWludDY0U3RyaW5nKTsNCisgIGlmIChSRVRVUk5fRVJST1IgKFN0YXR1cykpIHsNCisgICAg cmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFN0cmlwTmV3bGluZSAoJlVpbnQ2NFN0cmluZ1Np emUsIFVpbnQ2NFN0cmluZyk7DQorDQorICBpZiAoUGFyc2VBc0hleCkgew0KKyAgICBTdGF0dXMg PSBBc2NpaVN0ckhleFRvVWludDY0UyAoVWludDY0U3RyaW5nLCAmRW5kUG9pbnRlciwgJlVpbnQ2 NCk7DQorICB9IGVsc2Ugew0KKyAgICBTdGF0dXMgPSBBc2NpaVN0ckRlY2ltYWxUb1VpbnQ2NFMg KFVpbnQ2NFN0cmluZywgJkVuZFBvaW50ZXIsICZVaW50NjQpOw0KKyAgfQ0KKyAgaWYgKFJFVFVS Tl9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKw0KKyAgLy8N CisgIC8vIFJlcG9ydCBhIHdpcmUgcHJvdG9jb2wgZXJyb3IgaWYgdGhlIHN1YmplY3Qgc2VxdWVu Y2UgaXMgZW1wdHksIG9yIHRyYWlsaW5nDQorICAvLyBnYXJiYWdlIGlzIHByZXNlbnQsIG9yIExp bWl0IGlzIG5vdCBob25vcmVkLg0KKyAgLy8NCisgIGlmIChFbmRQb2ludGVyID09IFVpbnQ2NFN0 cmluZyB8fCAqRW5kUG9pbnRlciAhPSAnXDAnIHx8IFVpbnQ2NCA+IExpbWl0KSB7DQorICAgIHJl dHVybiBSRVRVUk5fUFJPVE9DT0xfRVJST1I7DQorICB9DQorDQorICAqVmFsdWUgPSBVaW50NjQ7 DQorICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorfQ0KKw0KKy8vDQorLy8gUHVibGljIGZ1bmN0 aW9ucy4NCisvLw0KKw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitRZW11RndDZmdTaW1wbGVQ YXJzZXJJbml0ICgNCisgIFZPSUQNCisgICkNCit7DQorICAvLw0KKyAgLy8gRG8gbm90aGluZywg anVzdCBwYXJ0aWNpcGF0ZSBpbiBjb25zdHJ1Y3RvciBkZXBlbmRlbmN5IG9yZGVyaW5nLg0KKyAg Ly8NCisgIHJldHVybiBSRVRVUk5fU1VDQ0VTUzsNCit9DQorDQorUkVUVVJOX1NUQVRVUw0KK0VG SUFQSQ0KK1FlbXVGd0NmZ1BhcnNlQm9vbCAoDQorICBJTiAgQ09OU1QgQ0hBUjggKkZpbGVOYW1l LA0KKyAgT1VUIEJPT0xFQU4gICAgICpWYWx1ZQ0KKyAgKQ0KK3sNCisgIFVJTlROICAgICAgICAg Qm9vbFN0cmluZ1NpemU7DQorICBDSEFSOCAgICAgICAgIEJvb2xTdHJpbmdbQk9PTF9TVFJJTkdf TUFYX1NJWkUgKyBDUkxGX0xFTkdUSF07DQorICBSRVRVUk5fU1RBVFVTIFN0YXR1czsNCisgIFVJ TlROICAgICAgICAgSWR4Ow0KKw0KKyAgQm9vbFN0cmluZ1NpemUgPSBzaXplb2YgQm9vbFN0cmlu ZzsNCisgIFN0YXR1cyA9IFFlbXVGd0NmZ0dldEFzU3RyaW5nIChGaWxlTmFtZSwgJkJvb2xTdHJp bmdTaXplLCBCb29sU3RyaW5nKTsNCisgIGlmIChSRVRVUk5fRVJST1IgKFN0YXR1cykpIHsNCisg ICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIFN0cmlwTmV3bGluZSAoJkJvb2xTdHJpbmdT aXplLCBCb29sU3RyaW5nKTsNCisNCisgIGZvciAoSWR4ID0gMDsgSWR4IDwgQVJSQVlfU0laRSAo bVRydWVTdHJpbmcpOyArK0lkeCkgew0KKyAgICBpZiAoQXNjaWlTdHJpQ21wIChCb29sU3RyaW5n LCBtVHJ1ZVN0cmluZ1tJZHhdKSA9PSAwKSB7DQorICAgICAgKlZhbHVlID0gVFJVRTsNCisgICAg ICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorICAgIH0NCisgIH0NCisNCisgIGZvciAoSWR4ID0g MDsgSWR4IDwgQVJSQVlfU0laRSAobUZhbHNlU3RyaW5nKTsgKytJZHgpIHsNCisgICAgaWYgKEFz Y2lpU3RyaUNtcCAoQm9vbFN0cmluZywgbUZhbHNlU3RyaW5nW0lkeF0pID09IDApIHsNCisgICAg ICAqVmFsdWUgPSBGQUxTRTsNCisgICAgICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorICAgIH0N CisgIH0NCisNCisgIHJldHVybiBSRVRVUk5fUFJPVE9DT0xfRVJST1I7DQorfQ0KKw0KK1JFVFVS Tl9TVEFUVVMNCitFRklBUEkNCitRZW11RndDZmdQYXJzZVVpbnQ4ICgNCisgIElOICBDT05TVCBD SEFSOCAqRmlsZU5hbWUsDQorICBJTiAgQk9PTEVBTiAgICAgUGFyc2VBc0hleCwNCisgIE9VVCBV SU5UOCAgICAgICAqVmFsdWUNCisgICkNCit7DQorICBSRVRVUk5fU1RBVFVTIFN0YXR1czsNCisg IFVJTlQ2NCAgICAgICAgVWludDY0Ow0KKw0KKyAgU3RhdHVzID0gUWVtdUZ3Q2ZnUGFyc2VVaW50 NjRXaXRoTGltaXQgKEZpbGVOYW1lLCBQYXJzZUFzSGV4LCBNQVhfVUlOVDgsDQorICAgICAgICAg ICAgICZVaW50NjQpOw0KKyAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICByZXR1 cm4gU3RhdHVzOw0KKyAgfQ0KKyAgKlZhbHVlID0gKFVJTlQ4KVVpbnQ2NDsNCisgIHJldHVybiBS RVRVUk5fU1VDQ0VTUzsNCit9DQorDQorUkVUVVJOX1NUQVRVUw0KK0VGSUFQSQ0KK1FlbXVGd0Nm Z1BhcnNlVWludDE2ICgNCisgIElOICBDT05TVCBDSEFSOCAqRmlsZU5hbWUsDQorICBJTiAgQk9P TEVBTiAgICAgUGFyc2VBc0hleCwNCisgIE9VVCBVSU5UMTYgICAgICAqVmFsdWUNCisgICkNCit7 DQorICBSRVRVUk5fU1RBVFVTIFN0YXR1czsNCisgIFVJTlQ2NCAgICAgICAgVWludDY0Ow0KKw0K KyAgU3RhdHVzID0gUWVtdUZ3Q2ZnUGFyc2VVaW50NjRXaXRoTGltaXQgKEZpbGVOYW1lLCBQYXJz ZUFzSGV4LCBNQVhfVUlOVDE2LA0KKyAgICAgICAgICAgICAmVWludDY0KTsNCisgIGlmIChSRVRV Uk5fRVJST1IgKFN0YXR1cykpIHsNCisgICAgcmV0dXJuIFN0YXR1czsNCisgIH0NCisgICpWYWx1 ZSA9IChVSU5UMTYpVWludDY0Ow0KKyAgcmV0dXJuIFJFVFVSTl9TVUNDRVNTOw0KK30NCisNCitS RVRVUk5fU1RBVFVTDQorRUZJQVBJDQorUWVtdUZ3Q2ZnUGFyc2VVaW50MzIgKA0KKyAgSU4gIENP TlNUIENIQVI4ICpGaWxlTmFtZSwNCisgIElOICBCT09MRUFOICAgICBQYXJzZUFzSGV4LA0KKyAg T1VUIFVJTlQzMiAgICAgICpWYWx1ZQ0KKyAgKQ0KK3sNCisgIFJFVFVSTl9TVEFUVVMgU3RhdHVz Ow0KKyAgVUlOVDY0ICAgICAgICBVaW50NjQ7DQorDQorICBTdGF0dXMgPSBRZW11RndDZmdQYXJz ZVVpbnQ2NFdpdGhMaW1pdCAoRmlsZU5hbWUsIFBhcnNlQXNIZXgsIE1BWF9VSU5UMzIsDQorICAg ICAgICAgICAgICZVaW50NjQpOw0KKyAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KKyAg ICByZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKyAgKlZhbHVlID0gKFVJTlQzMilVaW50NjQ7DQorICBy ZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorfQ0KKw0KK1JFVFVSTl9TVEFUVVMNCitFRklBUEkNCitR ZW11RndDZmdQYXJzZVVpbnQ2NCAoDQorICBJTiAgQ09OU1QgQ0hBUjggKkZpbGVOYW1lLA0KKyAg SU4gIEJPT0xFQU4gICAgIFBhcnNlQXNIZXgsDQorICBPVVQgVUlOVDY0ICAgICAgKlZhbHVlDQor ICApDQorew0KKyAgUkVUVVJOX1NUQVRVUyBTdGF0dXM7DQorICBVSU5UNjQgICAgICAgIFVpbnQ2 NDsNCisNCisgIFN0YXR1cyA9IFFlbXVGd0NmZ1BhcnNlVWludDY0V2l0aExpbWl0IChGaWxlTmFt ZSwgUGFyc2VBc0hleCwgTUFYX1VJTlQ2NCwNCisgICAgICAgICAgICAgJlVpbnQ2NCk7DQorICBp ZiAoUkVUVVJOX0VSUk9SIChTdGF0dXMpKSB7DQorICAgIHJldHVybiBTdGF0dXM7DQorICB9DQor ICAqVmFsdWUgPSBVaW50NjQ7DQorICByZXR1cm4gUkVUVVJOX1NVQ0NFU1M7DQorfQ0KKw0KK1JF VFVSTl9TVEFUVVMNCitFRklBUEkNCitRZW11RndDZmdQYXJzZVVpbnRuICgNCisgIElOICBDT05T VCBDSEFSOCAqRmlsZU5hbWUsDQorICBJTiAgQk9PTEVBTiAgICAgUGFyc2VBc0hleCwNCisgIE9V VCBVSU5UTiAgICAgICAqVmFsdWUNCisgICkNCit7DQorICBSRVRVUk5fU1RBVFVTIFN0YXR1czsN CisgIFVJTlQ2NCAgICAgICAgVWludDY0Ow0KKw0KKyAgU3RhdHVzID0gUWVtdUZ3Q2ZnUGFyc2VV aW50NjRXaXRoTGltaXQgKEZpbGVOYW1lLCBQYXJzZUFzSGV4LCBNQVhfVUlOVE4sDQorICAgICAg ICAgICAgICZVaW50NjQpOw0KKyAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KKyAgICBy ZXR1cm4gU3RhdHVzOw0KKyAgfQ0KKyAgKlZhbHVlID0gKFVJTlROKVVpbnQ2NDsNCisgIHJldHVy biBSRVRVUk5fU1VDQ0VTUzsNCit9DQotLSAKMi4xOS4xLjMuZzMwMjQ3YWE1ZDIwMQoKCg==