From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey.Brodkin@synopsys.com (Alexey Brodkin) Date: Mon, 26 Jun 2017 16:25:35 +0000 Subject: [PATCH 3/3 v6] ARC: hsdk: initial port for HSDK board In-Reply-To: References: <20170626151118.19507-1-Eugeniy.Paltsev@synopsys.com> <20170626151118.19507-4-Eugeniy.Paltsev@synopsys.com> List-ID: Message-ID: <1498494334.28955.58.camel@synopsys.com> To: linux-snps-arc@lists.infradead.org Hi Rob, On Mon, 2017-06-26@10:51 -0500, Rob Herring wrote: > On Mon, Jun 26, 2017 at 10:11 AM, Eugeniy Paltsev > wrote: > > > > From: Alexey Brodkin > > [snip] > > + > > +???????chosen { > > +???????????????bootargs = "earlycon=uart8250,mmio32,0xf0005000,115200n8 console=ttyS0,115200n8 debug print-fatal-signals=1"; > > Use stdout-path for the console. Really, the bootargs should be blank > and populated by the bootloader especially debug options. Agree but in case of devboards we quite often disable bootloader and load Linux image in memory via JTAG. So in that case bootargs make perfect sense IMHO.? > > > > +???????}; > > + > > +???????cpu { > > 'cpu' is for cpu nodes, so need something different. Agree. > > > > +???????????????compatible = "simple-bus"; > > +???????????????#address-cells = <1>; > > +???????????????#size-cells = <1>; > > There are no reg properties, so these aren't needed. This doesn't look > like a simple-bus either. > > Probably these child nodes should just be moved up to root level. Looks like that. Thanks. > > > > +???????????????interrupt-parent = <&core_intc>; > > + > > +???????????????core_clk: core_clk { > > core-clk { Ok. > > > > +???????????????????????#clock-cells = <0>; > > +???????????????????????compatible = "fixed-clock"; > > +???????????????????????clock-frequency = <1000000000>; > > +???????????????}; > > + > > +???????????????core_intc: archs-intc at cpu { > > cpu is not a valid unit-address. How are these interrupt controllers addressed? We have per-core INTC so each core communicates to its own INTC and there's no way for any core to talk with INTC of another core. But then we have the next level INTC which is IDU (Interrupt Distribution Unit) which dispatches "common" IRQs to different upstream per-core INTC, see below its node.? > > > > +???????????????????????compatible = "snps,archs-intc"; > > +???????????????????????interrupt-controller; > > +???????????????????????#interrupt-cells = <1>; > > +???????????????}; > > + > > +???????????????idu_intc: idu-interrupt-controller { > > +???????????????????????compatible = "snps,archs-idu-intc"; > > +???????????????????????interrupt-controller; > > +???????????????????????#interrupt-cells = <1>; > > +???????????????}; > > + > > +???????????????arcpct0: pct { > > +???????????????????????compatible = "snps,archs-pct"; > > +???????????????}; > > +???????}; > > + > > +???????soc { > > +???????????????compatible = "simple-bus"; > > +???????????????#address-cells = <1>; > > +???????????????#size-cells = <1>; > > +???????????????interrupt-parent = <&idu_intc>; > > + > > +???????????????ranges = <0x00000000 0xf0000000 0x10000000>; > > + > > +???????????????uart: dw-apb-uart at 5000 { > > serial at ... Yep. > > > > +???????????????????????compatible = "snps,dw-apb-uart"; > > +???????????????????????reg = <0x5000 0x100>; > > +???????????????????????clock-frequency = <33330000>; > > +???????????????????????interrupts = <6>; > > +???????????????????????baud = <115200>; > > +???????????????????????reg-shift = <2>; > > +???????????????????????reg-io-width = <4>; > > +???????????????}; > > + > > +???????????????gmacclk: gmacclk { > > +???????????????????????compatible = "fixed-clock"; > > +???????????????????????clock-frequency = <400000000>; > > +???????????????????????#clock-cells = <0>; > > +???????????????}; > > + > > +???????????????mmcclk_ciu: mmcclk_ciu { > > Don't use underscores in node names. Ok. > > > > +???????????????????????compatible = "fixed-clock"; > > +???????????????????????clock-frequency = <100000000>; > > +???????????????????????#clock-cells = <0>; > > +???????????????}; > > + > > +???????????????mmcclk_biu: mmcclk_biu { > > +???????????????????????compatible = "fixed-clock"; > > +???????????????????????clock-frequency = <400000000>; > > +???????????????????????#clock-cells = <0>; > > +???????????????}; > > + > > +???????????????ethernet at 8000 { > > +???????????????????????#interrupt-cells = <1>; > > +???????????????????????compatible = "snps,dwmac"; > > +???????????????????????reg = <0x8000 0x2000>; > > +???????????????????????interrupts = <10>; > > +???????????????????????interrupt-names = "macirq"; > > +???????????????????????phy-mode = "rgmii"; > > +???????????????????????snps,pbl = <32>; > > +???????????????????????clocks = <&gmacclk>; > > +???????????????????????clock-names = "stmmaceth"; > > +???????????????????????phy-handle = <&phy0>; > > + > > +???????????????????????mdio0 { > > mdio { > > > > > +???????????????????????????????#address-cells = <1>; > > +???????????????????????????????#size-cells = <0>; > > +???????????????????????????????compatible = "snps,dwmac-mdio"; > > +???????????????????????????????phy0: ethernet-phy at 0 { > > +???????????????????????????????????????reg = <0>; > > +???????????????????????????????????????ti,rx-internal-delay = ; > > +???????????????????????????????????????ti,tx-internal-delay = ; > > +???????????????????????????????????????ti,fifo-depth = ; > > +???????????????????????????????}; > > +???????????????????????}; > > +???????????????}; > > + > > +???????????????ohci at 60000 { > > +???????????????????????compatible = "generic-ohci"; > > This should have an SoC specific compatible. But why? We don't have any SoC-specific extensions. This essentially applies to EHCI as well. > > > > +???????????????????????reg = <0x60000 0x100>; > > +???????????????????????interrupts = <15>; > > +???????????????}; > > + > > +???????????????ehci at 40000 { > > +???????????????????????compatible = "generic-ehci"; > > This should have an SoC specific compatible. > > > > > +???????????????????????reg = <0x40000 0x100>; > > +???????????????????????interrupts = <15>; > > +???????????????}; > > + > > +???????????????mmc at a000 { > > +???????????????????????compatible = "altr,socfpga-dw-mshc"; > > +???????????????????????reg = <0xa000 0x400>; > > +???????????????????????num-slots = <1>; > > +???????????????????????fifo-depth = <16>; > > +???????????????????????card-detect-delay = <200>; > > +???????????????????????clocks = <&mmcclk_biu>, <&mmcclk_ciu>; > > +???????????????????????clock-names = "biu", "ciu"; > > +???????????????????????interrupts = <12>; > > +???????????????????????bus-width = <4>; > > +???????????????}; > > +???????}; > > + > > +???????memory { > > memory at 80000000 Ok. > > > > > +???????????????#address-cells = <1>; > > +???????????????#size-cells = <1>; > > +???????????????device_type = "memory"; > > +???????????????reg = <0x80000000 0x40000000>;??/* 1 GiB */ > > +???????}; > > +}; > > diff --git a/arch/arc/configs/hsdk_defconfig b/arch/arc/configs/hsdk_defconfig > > new file mode 100644 > > index 0000000..53bc9f3 > > --- /dev/null > > +++ b/arch/arc/configs/hsdk_defconfig > > @@ -0,0 +1,75 @@ > > +CONFIG_DEFAULT_HOSTNAME="ARCLinux" > > +CONFIG_SYSVIPC=y > > +# CONFIG_CROSS_MEMORY_ATTACH is not set > > +CONFIG_NO_HZ_IDLE=y > > +CONFIG_HIGH_RES_TIMERS=y > > +CONFIG_IKCONFIG=y > > +CONFIG_IKCONFIG_PROC=y > > +CONFIG_NAMESPACES=y > > +# CONFIG_UTS_NS is not set > > +# CONFIG_PID_NS is not set > > +CONFIG_BLK_DEV_INITRD=y > > +CONFIG_INITRAMFS_SOURCE="../../arc_initramfs_hs/" > > +CONFIG_EMBEDDED=y > > +CONFIG_PERF_EVENTS=y > > +# CONFIG_VM_EVENT_COUNTERS is not set > > +# CONFIG_COMPAT_BRK is not set > > +CONFIG_SLAB=y > > +CONFIG_ARC_PLAT_HSDK=y > > +CONFIG_ISA_ARCV2=y > > +CONFIG_SMP=y > > +CONFIG_LINUX_LINK_BASE=0x90000000 > > +CONFIG_KERNEL_RAM_BASE_ADDRESS=0x80000000 > > +CONFIG_ARC_BUILTIN_DTB_NAME="hsdk" > > +CONFIG_PREEMPT=y > > +# CONFIG_COMPACTION is not set > > +CONFIG_NET=y > > +CONFIG_PACKET=y > > +CONFIG_UNIX=y > > +CONFIG_INET=y > > +CONFIG_DEVTMPFS=y > > +# CONFIG_STANDALONE is not set > > +# CONFIG_PREVENT_FIRMWARE_BUILD is not set > > +# CONFIG_FIRMWARE_IN_KERNEL is not set > > +CONFIG_SCSI=y > > +CONFIG_BLK_DEV_SD=y > > +CONFIG_NETDEVICES=y > > +CONFIG_STMMAC_ETH=y > > +CONFIG_MICREL_PHY=y > > +# CONFIG_INPUT_KEYBOARD is not set > > +# CONFIG_INPUT_MOUSE is not set > > +# CONFIG_SERIO is not set > > +# CONFIG_LEGACY_PTYS is not set > > +CONFIG_SERIAL_8250=y > > +CONFIG_SERIAL_8250_CONSOLE=y > > +CONFIG_SERIAL_8250_DW=y > > +CONFIG_SERIAL_OF_PLATFORM=y > > +# CONFIG_HW_RANDOM is not set > > +# CONFIG_HWMON is not set > > +CONFIG_FB=y > > +CONFIG_FB_UDL=y > > +CONFIG_FRAMEBUFFER_CONSOLE=y > > +CONFIG_USB=y > > +CONFIG_USB_EHCI_HCD=y > > +CONFIG_USB_EHCI_HCD_PLATFORM=y > > +CONFIG_USB_OHCI_HCD=y > > +CONFIG_USB_OHCI_HCD_PLATFORM=y > > +CONFIG_USB_STORAGE=y > > +CONFIG_MMC=y > > +CONFIG_MMC_SDHCI=y > > +CONFIG_MMC_SDHCI_PLTFM=y > > +CONFIG_MMC_DW=y > > +# CONFIG_IOMMU_SUPPORT is not set > > +CONFIG_EXT3_FS=y > > +CONFIG_VFAT_FS=y > > +CONFIG_TMPFS=y > > +CONFIG_NLS_CODEPAGE_437=y > > +CONFIG_NLS_ISO8859_1=y > > +# CONFIG_ENABLE_WARN_DEPRECATED is not set > > +# CONFIG_ENABLE_MUST_CHECK is not set > > +CONFIG_STRIP_ASM_SYMS=y > > +CONFIG_LOCKUP_DETECTOR=y > > +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10 > > +# CONFIG_SCHED_DEBUG is not set > > +# CONFIG_DEBUG_PREEMPT is not set > > +# CONFIG_FTRACE is not set > > diff --git a/arch/arc/kernel/devtree.c b/arch/arc/kernel/devtree.c > > index 3b67f53..521ef35 100644 > > --- a/arch/arc/kernel/devtree.c > > +++ b/arch/arc/kernel/devtree.c > > @@ -29,8 +29,9 @@ static void __init arc_set_early_base_baud(unsigned long dt_root) > > ?{ > > ????????if (of_flat_dt_is_compatible(dt_root, "abilis,arc-tb10x")) > > ????????????????arc_base_baud = 166666666;??????/* Fixed 166.6MHz clk (TB10x) */ > > -???????else if (of_flat_dt_is_compatible(dt_root, "snps,arc-sdp")) > > -???????????????arc_base_baud = 33333333;???????/* Fixed 33MHz clk (AXS10x) */ > > +???????else if (of_flat_dt_is_compatible(dt_root, "snps,arc-sdp") || > > +????????????????of_flat_dt_is_compatible(dt_root, "snps,hsdk")) > > +???????????????arc_base_baud = 33333333;???????/* Fixed 33MHz clk (AXS10x & HSDK) */ > > You should get this info from DT. You don't need to address that now though. For normal UART we indeed don't need that. But this is really required for early console otherwise how may we start outputting stuff even before we have .dtb unflattened. The only thing I may think of early platform code that extracts this value from .dtb image but: ?1) I'm not sure it is more elegant ?2) Still it will be a bit too late - now we start printing very-very early. > > > > ????????else if (of_flat_dt_is_compatible(dt_root, "ezchip,arc-nps")) > > ????????????????arc_base_baud = 800000000;??????/* Fixed 800MHz clk (NPS) */ > > ????????else > > diff --git a/arch/arc/plat-hsdk/Kconfig b/arch/arc/plat-hsdk/Kconfig > > new file mode 100644 > > index 0000000..29dffed > > --- /dev/null > > +++ b/arch/arc/plat-hsdk/Kconfig > > @@ -0,0 +1,12 @@ > > +# > > +# Copyright (C) 2017 Synopsys, Inc. (www.synopsys.com) > > +# > > +# This program is free software; you can redistribute it and/or modify > > +# it under the terms of the GNU General Public License version 2 as > > +# published by the Free Software Foundation. > > +# > > + > > +menuconfig ARC_PLAT_HSDK > > +???????bool "ARC HS Development Kit board" > > Per board config options don't scale and shouldn't be necessary with DT... Not sure if I understand that completely. Could you please explain in a bit more details? -Alexey From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey Brodkin Subject: Re: [PATCH 3/3 v6] ARC: hsdk: initial port for HSDK board Date: Mon, 26 Jun 2017 16:25:35 +0000 Message-ID: <1498494334.28955.58.camel@synopsys.com> References: <20170626151118.19507-1-Eugeniy.Paltsev@synopsys.com> <20170626151118.19507-4-Eugeniy.Paltsev@synopsys.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Content-ID: <322D90A068F1A3449A5B9EF749B5EF2D@internal.synopsys.com> Sender: linux-kernel-owner@vger.kernel.org To: "robh+dt@kernel.org" Cc: "linux-kernel@vger.kernel.org" , "Vineet.Gupta1@synopsys.com" , "Alexey.Brodkin@synopsys.com" , "Eugeniy.Paltsev@synopsys.com" , "linux-snps-arc@lists.infradead.org" , "devicetree@vger.kernel.org" List-Id: devicetree@vger.kernel.org SGkgUm9iLA0KDQpPbiBNb24sIDIwMTctMDYtMjYgYXQgMTA6NTEgLTA1MDAsIFJvYiBIZXJyaW5n IHdyb3RlOg0KPiBPbiBNb24sIEp1biAyNiwgMjAxNyBhdCAxMDoxMSBBTSwgRXVnZW5peSBQYWx0 c2V2DQo+IDxFdWdlbml5LlBhbHRzZXZAc3lub3BzeXMuY29tPiB3cm90ZToNCj4gPiANCj4gPiBG cm9tOiBBbGV4ZXkgQnJvZGtpbiA8YWJyb2RraW5Ac3lub3BzeXMuY29tPg0KPiA+IA0KDQpbc25p cF0NCg0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqBjaG9zZW4gew0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBib290YXJncyA9ICJlYXJseWNvbj11YXJ0ODI1MCxtbWlvMzIs MHhmMDAwNTAwMCwxMTUyMDBuOCBjb25zb2xlPXR0eVMwLDExNTIwMG44IGRlYnVnIHByaW50LWZh dGFsLXNpZ25hbHM9MSI7DQo+IA0KPiBVc2Ugc3Rkb3V0LXBhdGggZm9yIHRoZSBjb25zb2xlLiBS ZWFsbHksIHRoZSBib290YXJncyBzaG91bGQgYmUgYmxhbmsNCj4gYW5kIHBvcHVsYXRlZCBieSB0 aGUgYm9vdGxvYWRlciBlc3BlY2lhbGx5IGRlYnVnIG9wdGlvbnMuDQoNCkFncmVlIGJ1dCBpbiBj YXNlIG9mIGRldmJvYXJkcyB3ZSBxdWl0ZSBvZnRlbiBkaXNhYmxlIGJvb3Rsb2FkZXIgYW5kDQps b2FkIExpbnV4IGltYWdlIGluIG1lbW9yeSB2aWEgSlRBRy4gU28gaW4gdGhhdCBjYXNlIGJvb3Rh cmdzIG1ha2UgcGVyZmVjdCBzZW5zZSBJTUhPLsKgDQoNCj4gPiANCj4gPiArwqDCoMKgwqDCoMKg wqB9Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqBjcHUgew0KPiANCj4gJ2NwdScgaXMgZm9y IGNwdSBub2Rlcywgc28gbmVlZCBzb21ldGhpbmcgZGlmZmVyZW50Lg0KDQpBZ3JlZS4NCg0KPiA+ IA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21wYXRpYmxlID0gInNpbXBs ZS1idXMiOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAjYWRkcmVzcy1jZWxs cyA9IDwxPjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgI3NpemUtY2VsbHMg PSA8MT47DQo+IA0KPiBUaGVyZSBhcmUgbm8gcmVnIHByb3BlcnRpZXMsIHNvIHRoZXNlIGFyZW4n dCBuZWVkZWQuIFRoaXMgZG9lc24ndCBsb29rDQo+IGxpa2UgYSBzaW1wbGUtYnVzIGVpdGhlci4N Cj4gDQo+IFByb2JhYmx5IHRoZXNlIGNoaWxkIG5vZGVzIHNob3VsZCBqdXN0IGJlIG1vdmVkIHVw IHRvIHJvb3QgbGV2ZWwuDQoNCkxvb2tzIGxpa2UgdGhhdC4gVGhhbmtzLg0KDQo+ID4gDQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVycnVwdC1wYXJlbnQgPSA8JmNvcmVf aW50Yz47DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb3JlX2Ns azogY29yZV9jbGsgew0KPiANCj4gY29yZS1jbGsgew0KDQpPay4NCg0KPiA+IA0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgI2Nsb2NrLWNlbGxzID0g PDA+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Y29tcGF0aWJsZSA9ICJmaXhlZC1jbG9jayI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbG9jay1mcmVxdWVuY3kgPSA8MTAwMDAwMDAwMD47DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH07DQo+ID4gKw0KPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb3JlX2ludGM6IGFyY2hzLWludGNAY3B1IHsNCj4gDQo+ IGNwdSBpcyBub3QgYSB2YWxpZCB1bml0LWFkZHJlc3MuIEhvdyBhcmUgdGhlc2UgaW50ZXJydXB0 IGNvbnRyb2xsZXJzIGFkZHJlc3NlZD8NCg0KV2UgaGF2ZSBwZXItY29yZSBJTlRDIHNvIGVhY2gg Y29yZSBjb21tdW5pY2F0ZXMgdG8gaXRzIG93biBJTlRDIGFuZCB0aGVyZSdzIG5vIHdheQ0KZm9y IGFueSBjb3JlIHRvIHRhbGsgd2l0aCBJTlRDIG9mIGFub3RoZXIgY29yZS4NCg0KQnV0IHRoZW4g d2UgaGF2ZSB0aGUgbmV4dCBsZXZlbCBJTlRDIHdoaWNoIGlzIElEVSAoSW50ZXJydXB0IERpc3Ry aWJ1dGlvbiBVbml0KQ0Kd2hpY2ggZGlzcGF0Y2hlcyAiY29tbW9uIiBJUlFzIHRvIGRpZmZlcmVu dCB1cHN0cmVhbSBwZXItY29yZSBJTlRDLCBzZWUgYmVsb3cgaXRzIG5vZGUuwqANCg0KPiA+IA0K PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29tcGF0 aWJsZSA9ICJzbnBzLGFyY2hzLWludGMiOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZXJydXB0LWNvbnRyb2xsZXI7DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAjaW50ZXJydXB0LWNlbGxzID0g PDE+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Ow0KPiA+ICsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWR1X2ludGM6IGlkdS1pbnRlcnJ1cHQtY29u dHJvbGxlciB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjb21wYXRpYmxlID0gInNucHMsYXJjaHMtaWR1LWludGMiOw0KPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZXJydXB0LWNvbnRyb2xsZXI7 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAjaW50 ZXJydXB0LWNlbGxzID0gPDE+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9 Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJjcGN0MDogcGN0 IHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNv bXBhdGlibGUgPSAic25wcyxhcmNocy1wY3QiOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB9Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoH07DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKg wqDCoHNvYyB7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXBhdGlibGUg PSAic2ltcGxlLWJ1cyI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCNhZGRy ZXNzLWNlbGxzID0gPDE+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAjc2l6 ZS1jZWxscyA9IDwxPjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZXJy dXB0LXBhcmVudCA9IDwmaWR1X2ludGM+Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmFuZ2VzID0gPDB4MDAwMDAwMDAgMHhmMDAwMDAwMCAweDEwMDAwMDAwPjsN Cj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVhcnQ6IGR3LWFwYi11 YXJ0QDUwMDAgew0KPiANCj4gc2VyaWFsQC4uLg0KDQpZZXAuDQoNCj4gPiANCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXBhdGlibGUgPSAic25w cyxkdy1hcGItdWFydCI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZWcgPSA8MHg1MDAwIDB4MTAwPjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMDAwMD47 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRl cnJ1cHRzID0gPDY+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYmF1ZCA9IDwxMTUyMDA+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnLXNoaWZ0ID0gPDI+Ow0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnLWlvLXdpZHRoID0gPDQ+Ow0KPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ21hY2NsazogZ21hY2NsayB7DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21wYXRpYmxlID0gImZpeGVkLWNs b2NrIjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDAwMDA+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgI2Nsb2NrLWNlbGxzID0gPDA+Ow0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Ow0KPiA+ICsNCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgbW1jY2xrX2NpdTogbW1jY2xrX2NpdSB7DQo+IA0KPiBEb24ndCB1c2Ug dW5kZXJzY29yZXMgaW4gbm9kZSBuYW1lcy4NCg0KT2suDQoNCj4gPiANCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXBhdGlibGUgPSAiZml4ZWQt Y2xvY2siOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAjY2xvY2stY2VsbHMgPSA8MD47DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH07DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBtbWNjbGtfYml1OiBtbWNjbGtfYml1IHsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXBhdGlibGUgPSAiZml4ZWQt Y2xvY2siOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMDAwMD47DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAjY2xvY2stY2VsbHMgPSA8MD47DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH07DQo+ID4gKw0KPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBldGhlcm5ldEA4MDAwIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47DQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb21wYXRpYmxl ID0gInNucHMsZHdtYWMiOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmVnID0gPDB4ODAwMCAweDIwMDA+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaW50ZXJydXB0cyA9IDwxMD47DQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlcnJ1cHQtbmFt ZXMgPSAibWFjaXJxIjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHBoeS1tb2RlID0gInJnbWlpIjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNucHMscGJsID0gPDMyPjsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNsb2NrcyA9IDwmZ21hY2Nsaz47 DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjbG9j ay1uYW1lcyA9ICJzdG1tYWNldGgiOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcGh5LWhhbmRsZSA9IDwmcGh5MD47DQo+ID4gKw0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWRpbzAgew0KPiANCj4g bWRpbyB7DQo+IA0KPiA+IA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCNhZGRyZXNzLWNlbGxzID0gPDE+Ow0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCNzaXplLWNlbGxzID0gPDA+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXBhdGlibGUgPSAic25wcyxkd21h Yy1tZGlvIjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBwaHkwOiBldGhlcm5ldC1waHlAMCB7DQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJlZyA9IDwwPjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGkscngt aW50ZXJuYWwtZGVsYXkgPSA8RFA4Mzg2N19SR01JSURDVExfMl8wMF9OUz47DQo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHRpLHR4LWludGVybmFsLWRlbGF5ID0gPERQODM4NjdfUkdNSUlEQ1RM XzJfMDBfTlM+Ow0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0aSxmaWZvLWRlcHRoID0gPERQ ODM4NjdfUEhZQ1JfRklGT19ERVBUSF80X0JfTklCPjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Ow0KPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsNCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsNCj4gPiArDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoG9oY2lANjAwMDAgew0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgY29tcGF0aWJsZSA9ICJnZW5lcmljLW9oY2kiOw0KPiANCj4g VGhpcyBzaG91bGQgaGF2ZSBhbiBTb0Mgc3BlY2lmaWMgY29tcGF0aWJsZS4NCg0KQnV0IHdoeT8g V2UgZG9uJ3QgaGF2ZSBhbnkgU29DLXNwZWNpZmljIGV4dGVuc2lvbnMuDQpUaGlzIGVzc2VudGlh bGx5IGFwcGxpZXMgdG8gRUhDSSBhcyB3ZWxsLg0KDQo+ID4gDQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWcgPSA8MHg2MDAwMCAweDEwMD47DQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlcnJ1 cHRzID0gPDE1PjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsNCj4gPiAr DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVoY2lANDAwMDAgew0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29tcGF0aWJsZSA9 ICJnZW5lcmljLWVoY2kiOw0KPiANCj4gVGhpcyBzaG91bGQgaGF2ZSBhbiBTb0Mgc3BlY2lmaWMg Y29tcGF0aWJsZS4NCj4gDQo+ID4gDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZWcgPSA8MHg0MDAwMCAweDEwMD47DQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnRlcnJ1cHRzID0gPDE1PjsNCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsNCj4gPiArDQo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1tY0BhMDAwIHsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbXBhdGlibGUgPSAiYWx0cixzb2NmcGdhLWR3 LW1zaGMiOw0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmVnID0gPDB4YTAwMCAweDQwMD47DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBudW0tc2xvdHMgPSA8MT47DQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmaWZvLWRlcHRoID0gPDE2PjsNCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhcmQtZGV0ZWN0 LWRlbGF5ID0gPDIwMD47DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjbG9ja3MgPSA8Jm1tY2Nsa19iaXU+LCA8Jm1tY2Nsa19jaXU+Ow0KPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2xvY2stbmFtZXMg PSAiYml1IiwgImNpdSI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpbnRlcnJ1cHRzID0gPDEyPjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJ1cy13aWR0aCA9IDw0PjsNCj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfTsNCj4gPiArwqDCoMKgwqDCoMKgwqB9Ow0KPiA+ICsNCj4g PiArwqDCoMKgwqDCoMKgwqBtZW1vcnkgew0KPiANCj4gbWVtb3J5QDgwMDAwMDAwDQoNCk9rLg0K DQo+IA0KPiA+IA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAjYWRkcmVzcy1j ZWxscyA9IDwxPjsNCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgI3NpemUtY2Vs bHMgPSA8MT47DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldmljZV90eXBl ID0gIm1lbW9yeSI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZyA9IDww eDgwMDAwMDAwIDB4NDAwMDAwMDA+O8KgwqAvKiAxIEdpQiAqLw0KPiA+ICvCoMKgwqDCoMKgwqDC oH07DQo+ID4gK307DQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJjL2NvbmZpZ3MvaHNka19kZWZj b25maWcgYi9hcmNoL2FyYy9jb25maWdzL2hzZGtfZGVmY29uZmlnDQo+ID4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi41M2JjOWYzDQo+ID4gLS0tIC9kZXYvbnVsbA0K PiA+ICsrKyBiL2FyY2gvYXJjL2NvbmZpZ3MvaHNka19kZWZjb25maWcNCj4gPiBAQCAtMCwwICsx LDc1IEBADQo+ID4gK0NPTkZJR19ERUZBVUxUX0hPU1ROQU1FPSJBUkNMaW51eCINCj4gPiArQ09O RklHX1NZU1ZJUEM9eQ0KPiA+ICsjIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIIGlzIG5vdCBz ZXQNCj4gPiArQ09ORklHX05PX0haX0lETEU9eQ0KPiA+ICtDT05GSUdfSElHSF9SRVNfVElNRVJT PXkNCj4gPiArQ09ORklHX0lLQ09ORklHPXkNCj4gPiArQ09ORklHX0lLQ09ORklHX1BST0M9eQ0K PiA+ICtDT05GSUdfTkFNRVNQQUNFUz15DQo+ID4gKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0 DQo+ID4gKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0DQo+ID4gK0NPTkZJR19CTEtfREVWX0lO SVRSRD15DQo+ID4gK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIuLi8uLi9hcmNfaW5pdHJhbWZz X2hzLyINCj4gPiArQ09ORklHX0VNQkVEREVEPXkNCj4gPiArQ09ORklHX1BFUkZfRVZFTlRTPXkN Cj4gPiArIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldA0KPiA+ICsjIENPTkZJ R19DT01QQVRfQlJLIGlzIG5vdCBzZXQNCj4gPiArQ09ORklHX1NMQUI9eQ0KPiA+ICtDT05GSUdf QVJDX1BMQVRfSFNESz15DQo+ID4gK0NPTkZJR19JU0FfQVJDVjI9eQ0KPiA+ICtDT05GSUdfU01Q PXkNCj4gPiArQ09ORklHX0xJTlVYX0xJTktfQkFTRT0weDkwMDAwMDAwDQo+ID4gK0NPTkZJR19L RVJORUxfUkFNX0JBU0VfQUREUkVTUz0weDgwMDAwMDAwDQo+ID4gK0NPTkZJR19BUkNfQlVJTFRJ Tl9EVEJfTkFNRT0iaHNkayINCj4gPiArQ09ORklHX1BSRUVNUFQ9eQ0KPiA+ICsjIENPTkZJR19D T01QQUNUSU9OIGlzIG5vdCBzZXQNCj4gPiArQ09ORklHX05FVD15DQo+ID4gK0NPTkZJR19QQUNL RVQ9eQ0KPiA+ICtDT05GSUdfVU5JWD15DQo+ID4gK0NPTkZJR19JTkVUPXkNCj4gPiArQ09ORklH X0RFVlRNUEZTPXkNCj4gPiArIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0DQo+ID4gKyMg Q09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldA0KPiA+ICsjIENPTkZJR19G SVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldA0KPiA+ICtDT05GSUdfU0NTST15DQo+ID4gK0NP TkZJR19CTEtfREVWX1NEPXkNCj4gPiArQ09ORklHX05FVERFVklDRVM9eQ0KPiA+ICtDT05GSUdf U1RNTUFDX0VUSD15DQo+ID4gK0NPTkZJR19NSUNSRUxfUEhZPXkNCj4gPiArIyBDT05GSUdfSU5Q VVRfS0VZQk9BUkQgaXMgbm90IHNldA0KPiA+ICsjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qg c2V0DQo+ID4gKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQNCj4gPiArIyBDT05GSUdfTEVHQUNZ X1BUWVMgaXMgbm90IHNldA0KPiA+ICtDT05GSUdfU0VSSUFMXzgyNTA9eQ0KPiA+ICtDT05GSUdf U0VSSUFMXzgyNTBfQ09OU09MRT15DQo+ID4gK0NPTkZJR19TRVJJQUxfODI1MF9EVz15DQo+ID4g K0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQ0KPiA+ICsjIENPTkZJR19IV19SQU5ET00gaXMg bm90IHNldA0KPiA+ICsjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0DQo+ID4gK0NPTkZJR19GQj15 DQo+ID4gK0NPTkZJR19GQl9VREw9eQ0KPiA+ICtDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15 DQo+ID4gK0NPTkZJR19VU0I9eQ0KPiA+ICtDT05GSUdfVVNCX0VIQ0lfSENEPXkNCj4gPiArQ09O RklHX1VTQl9FSENJX0hDRF9QTEFURk9STT15DQo+ID4gK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQ0K PiA+ICtDT05GSUdfVVNCX09IQ0lfSENEX1BMQVRGT1JNPXkNCj4gPiArQ09ORklHX1VTQl9TVE9S QUdFPXkNCj4gPiArQ09ORklHX01NQz15DQo+ID4gK0NPTkZJR19NTUNfU0RIQ0k9eQ0KPiA+ICtD T05GSUdfTU1DX1NESENJX1BMVEZNPXkNCj4gPiArQ09ORklHX01NQ19EVz15DQo+ID4gKyMgQ09O RklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldA0KPiA+ICtDT05GSUdfRVhUM19GUz15DQo+ID4g K0NPTkZJR19WRkFUX0ZTPXkNCj4gPiArQ09ORklHX1RNUEZTPXkNCj4gPiArQ09ORklHX05MU19D T0RFUEFHRV80Mzc9eQ0KPiA+ICtDT05GSUdfTkxTX0lTTzg4NTlfMT15DQo+ID4gKyMgQ09ORklH X0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldA0KPiA+ICsjIENPTkZJR19FTkFCTEVf TVVTVF9DSEVDSyBpcyBub3Qgc2V0DQo+ID4gK0NPTkZJR19TVFJJUF9BU01fU1lNUz15DQo+ID4g K0NPTkZJR19MT0NLVVBfREVURUNUT1I9eQ0KPiA+ICtDT05GSUdfREVGQVVMVF9IVU5HX1RBU0tf VElNRU9VVD0xMA0KPiA+ICsjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0DQo+ID4gKyMg Q09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldA0KPiA+ICsjIENPTkZJR19GVFJBQ0UgaXMg bm90IHNldA0KPiA+IGRpZmYgLS1naXQgYS9hcmNoL2FyYy9rZXJuZWwvZGV2dHJlZS5jIGIvYXJj aC9hcmMva2VybmVsL2RldnRyZWUuYw0KPiA+IGluZGV4IDNiNjdmNTMuLjUyMWVmMzUgMTAwNjQ0 DQo+ID4gLS0tIGEvYXJjaC9hcmMva2VybmVsL2RldnRyZWUuYw0KPiA+ICsrKyBiL2FyY2gvYXJj L2tlcm5lbC9kZXZ0cmVlLmMNCj4gPiBAQCAtMjksOCArMjksOSBAQCBzdGF0aWMgdm9pZCBfX2lu aXQgYXJjX3NldF9lYXJseV9iYXNlX2JhdWQodW5zaWduZWQgbG9uZyBkdF9yb290KQ0KPiA+IMKg ew0KPiA+IMKgwqDCoMKgwqDCoMKgwqBpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKGR0X3Jv b3QsICJhYmlsaXMsYXJjLXRiMTB4IikpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBhcmNfYmFzZV9iYXVkID0gMTY2NjY2NjY2O8KgwqDCoMKgwqDCoC8qIEZpeGVkIDE2Ni42 TUh6IGNsayAoVEIxMHgpICovDQo+ID4gLcKgwqDCoMKgwqDCoMKgZWxzZSBpZiAob2ZfZmxhdF9k dF9pc19jb21wYXRpYmxlKGR0X3Jvb3QsICJzbnBzLGFyYy1zZHAiKSkNCj4gPiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYXJjX2Jhc2VfYmF1ZCA9IDMzMzMzMzMzO8KgwqDCoMKgwqDC oMKgLyogRml4ZWQgMzNNSHogY2xrIChBWFMxMHgpICovDQo+ID4gK8KgwqDCoMKgwqDCoMKgZWxz ZSBpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKGR0X3Jvb3QsICJzbnBzLGFyYy1zZHAiKSB8 fA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG9mX2ZsYXRfZHRfaXNfY29t cGF0aWJsZShkdF9yb290LCAic25wcyxoc2RrIikpDQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGFyY19iYXNlX2JhdWQgPSAzMzMzMzMzMzvCoMKgwqDCoMKgwqDCoC8qIEZpeGVk IDMzTUh6IGNsayAoQVhTMTB4ICYgSFNESykgKi8NCj4gDQo+IFlvdSBzaG91bGQgZ2V0IHRoaXMg aW5mbyBmcm9tIERULiBZb3UgZG9uJ3QgbmVlZCB0byBhZGRyZXNzIHRoYXQgbm93IHRob3VnaC4N Cg0KRm9yIG5vcm1hbCBVQVJUIHdlIGluZGVlZCBkb24ndCBuZWVkIHRoYXQuIEJ1dCB0aGlzIGlz IHJlYWxseSByZXF1aXJlZCBmb3IgZWFybHkNCmNvbnNvbGUgb3RoZXJ3aXNlIGhvdyBtYXkgd2Ug c3RhcnQgb3V0cHV0dGluZyBzdHVmZiBldmVuIGJlZm9yZSB3ZSBoYXZlIC5kdGINCnVuZmxhdHRl bmVkLg0KDQpUaGUgb25seSB0aGluZyBJIG1heSB0aGluayBvZiBlYXJseSBwbGF0Zm9ybSBjb2Rl IHRoYXQgZXh0cmFjdHMgdGhpcyB2YWx1ZSBmcm9tIC5kdGINCmltYWdlIGJ1dDoNCsKgMSkgSSdt IG5vdCBzdXJlIGl0IGlzIG1vcmUgZWxlZ2FudA0KwqAyKSBTdGlsbCBpdCB3aWxsIGJlIGEgYml0 IHRvbyBsYXRlIC0gbm93IHdlIHN0YXJ0IHByaW50aW5nIHZlcnktdmVyeSBlYXJseS4NCg0KPiA+ IA0KPiA+IMKgwqDCoMKgwqDCoMKgwqBlbHNlIGlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUo ZHRfcm9vdCwgImV6Y2hpcCxhcmMtbnBzIikpDQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBhcmNfYmFzZV9iYXVkID0gODAwMDAwMDAwO8KgwqDCoMKgwqDCoC8qIEZpeGVkIDgw ME1IeiBjbGsgKE5QUykgKi8NCj4gPiDCoMKgwqDCoMKgwqDCoMKgZWxzZQ0KPiA+IGRpZmYgLS1n aXQgYS9hcmNoL2FyYy9wbGF0LWhzZGsvS2NvbmZpZyBiL2FyY2gvYXJjL3BsYXQtaHNkay9LY29u ZmlnDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwLi4yOWRmZmVk DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2FyY2gvYXJjL3BsYXQtaHNkay9LY29uZmln DQo+ID4gQEAgLTAsMCArMSwxMiBAQA0KPiA+ICsjDQo+ID4gKyMgQ29weXJpZ2h0IChDKSAyMDE3 IFN5bm9wc3lzLCBJbmMuICh3d3cuc3lub3BzeXMuY29tKQ0KPiA+ICsjDQo+ID4gKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkNCj4gPiArIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIHZlcnNpb24gMiBhcw0KPiA+ICsjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLg0KPiA+ICsjDQo+ID4gKw0KPiA+ICttZW51Y29uZmlnIEFSQ19QTEFU X0hTREsNCj4gPiArwqDCoMKgwqDCoMKgwqBib29sICJBUkMgSFMgRGV2ZWxvcG1lbnQgS2l0IGJv YXJkIg0KPiANCj4gUGVyIGJvYXJkIGNvbmZpZyBvcHRpb25zIGRvbid0IHNjYWxlIGFuZCBzaG91 bGRuJ3QgYmUgbmVjZXNzYXJ5IHdpdGggRFQuLi4NCg0KTm90IHN1cmUgaWYgSSB1bmRlcnN0YW5k IHRoYXQgY29tcGxldGVseS4NCkNvdWxkIHlvdSBwbGVhc2UgZXhwbGFpbiBpbiBhIGJpdCBtb3Jl IGRldGFpbHM/DQoNCi1BbGV4ZXk=