From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 07081C3A5A6 for ; Fri, 20 Sep 2019 02:30:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BBC5E2196E for ; Fri, 20 Sep 2019 02:30:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2405695AbfITCaZ (ORCPT ); Thu, 19 Sep 2019 22:30:25 -0400 Received: from gate.crashing.org ([63.228.1.57]:59497 "EHLO gate.crashing.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2405325AbfITCaY (ORCPT ); Thu, 19 Sep 2019 22:30:24 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id x8K2RJ7O003665; Thu, 19 Sep 2019 21:27:20 -0500 Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma From: Benjamin Herrenschmidt To: Andrew Waterman , Guo Ren Cc: Anup.Patel@wdc.com, Atish.Patra@wdc.com, Guo Ren , catalin.marinas@arm.com, dwmw2@infradead.org, feiteng_li@c-sky.com, gary@garyguo.net, iommu@lists.linux-foundation.org, jacob.jun.pan@linux.intel.com, jean-philippe@linaro.org, julien.grall@arm.com, julien.thierry@arm.com, kvmarm@lists.cs.columbia.edu, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, marc.zyngier@arm.com, palmer@sifive.com, rppt@linux.ibm.com, tech-privileged@lists.riscv.org, will.deacon@arm.com Date: Fri, 20 Sep 2019 12:27:19 +1000 In-Reply-To: References: <1568896556-28769-1-git-send-email-guoren@kernel.org> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2019-09-19 at 09:04 -0700, Andrew Waterman wrote: > This needs to be discussed and debated at length; proposing edits to > the spec at this stage is putting the cart before the horse! > > We shouldn’t change the definition of the existing SFENCE.VMA > instruction to accomplish this. It’s also not abundantly clear to me > that this should be an instruction: TLB shootdown looks more like > MMIO. Quite a few points to make here: - TLB shootdown as MMIO is a problem when you start trying to do it directly from guests (which is very desirable). I can elaborate if you want, but it generally boils down to having a pile of copies of the MMIO resources to assign to guests and having to constantly change mappings which is unrealistic. - I generally have very serious doubts as to the value of doing broadcast TLB shootdowns in HW. I went at lenght about it during Linux Plumbers Conference, but I'll try to summarise here, from my experience back at IBM working on POWER. In no special order: * It doesn't scale well. You have to drain all the target CPU queues of already translated load stores, keep ordering, etc... it causes a giant fabric traffic jam. Experience has shown that on some POWER systems, it becomes extremely expensive. * Some OS such as Linux track which CPU has seen a given context. That allows to "target" TLB invalidations in a more sensible way. Broadcast instructions tend to lose that ability (it's hard to do in HW esp. in a way that can be virtualized properly). * Because those instructions can take a very long time (for the above reasons and some of below ones), or at least whatever context synchronizing instruction that follow which waits for completion of the invalidations, you end up with a CPU effectively "stuck" for a long time, not taking interrupts, including those routed to higher priority levels (ie. hypervisor etc...). This is problematic. A completion polling mechanism is preferable so that once can still handle such work while waiting but is hard to architect/implement properly when done as "instructions" since they can happen concurrently from multiple contexts. It's easier with MMIO but that has other issues. * It introduces races with anything that does SW walk of page tables. For example MMIO emulation by a hypervisor cannot be done race- free if the guest can do its own broadcast invalidations and the hypervisor has to walk the guest page tables to translate. I can elaborate if requested. * Those invalidations need to also target nest agents that can hold translations, such as IOMMUs that can operate in usr contexts etc... Such IOMMUs can take a VERY LONG time to process invalidations, especially if translations have been checked out by devices such as PCIe devices using ATS. Some GPUs for example can hit a worst case of hundreds of *milliseconds* to process a TLB invalidation. - Now for the proposed scheme. I really don't like introducing a *new* way of tagging an address space using the PPN. It's a hack. The right way is to ensure that the existing context tags are big enough to not require re-use and thus can be treated as global context tags by the hypervisor and OS. IE. have big enough VMIDs and ASIDs that each running VM can have a global stable VMID and each process within a given VM can have a global (within that VM) ASID instead of playing reallocation of ASID tricks at context switch (that's very inefficient anyway, so that should be fixed for anything that claims performance and scalability). Now all of these things can probably have solutions but experience doesn't seem to indicate that it's really worthwhile. We are better off making sure we have a really fast IPI path to perform those via interrupts and locally to the targetted CPUs IMHO. Cheers, Ben. > > On Thu, Sep 19, 2019 at 5:36 AM Guo Ren wrote: > > From: Guo Ren > > > > The patch is for https://github.com/riscv/riscv-isa-manual > > > > The proposal has been talked in LPC-2019 RISC-V MC ref [1]. Here is > > the > > formal patch. > > > > Introduction > > ============ > > > > Using the Hardware TLB broadcast invalidation instruction to > > maintain the > > system TLB is a good choice and it'll simplify the system software > > design. > > The proposal hopes to add a broadcast mode to the sfence.vma in the > > riscv-privilege specification. To support the sfence.vma broadcast > > mode, > > there are two modification introduced below: > > > > 1) Add PGD.PPN (root page table's PPN) as the unique identifier of > > the > > address space in addition to asid/vmid. Compared to the > > dynamically > > changed asid/vmid, PGD.PPN is fixed throughout the address > > space life > > cycle. This feature enables uniform address space > > identification > > between different TLB systems (actually, it's difficult to > > unify the > > asid/vmid between the CPU system and the IOMMU system, because > > their > > mechanisms are different) > > > > 2) Modify the definition of the sfence.vma instruction from > > synchronous > > mode to asynchronous mode, which means that the completion of > > the TLB > > operation is not guaranteed when the sfence.vma instruction > > retires. > > It needs to be completed by checking the flag bit on the hart. > > The > > sfence.vma request finish can notify the software by generating > > an > > interrupt. This function alleviates the large delay of TLB > > invalidation > > in the PCI ATS system. > > > > Add S1/S2.PGD.PPN for ASID/VMID > > =============================== > > > > PGD is global directory (defined in linux) and PPN is page physical > > number > > (defined in riscv-spec). PGD.PNN corresponds to the root page table > > pointer > > of the address space, i.e. mm->pgd (linux concept). > > > > In CPU/IOMMU TLB, we use asid/vmid to distinguish the address space > > of > > process or virtual machine. Due to the limitation of id encoding, > > it can > > only represent a part(window) of the address space. S1/S2.PGD.PPN > > are the > > root page table's PPNs of the address spaces and S1/S2.PGD.PPN are > > the > > unique identifier of the address spaces. > > > > For the CPU SMP system, you can use context switch to perform the > > necessary > > software mechanism to ensure that the asid/vmid on all harts is > > consistent > > (please refer to the arm64 asid mechanism). In this way, the TLB > > broadcast > > invalidation instruction can determine the address space processed > > on all > > harts by asid/vmid. > > > > Different from the CPU SMP system, there is no context switch for > > the > > DMA-IOMMU system, so the unification with the CPU asid/vmid cannot > > be > > guaranteed. So we need a unique identifier for the address space to > > establish a communication bridge between the TLBs of different > > systems. > > > > That is PGD.PPN (for virtualization scenarios: S1/S2.PGD.PPN) > > > > current: > > sfence.vma rs1 = vaddr, rs2 = asid > > hfence.vvma rs1 = vaddr, rs2 = asid > > hfence.gvma rs1 = gaddr, rs2 = vmid > > > > proposed: > > sfence.vma rs1 = vaddr, rs2 = mode:ppn:asid > > hfence.vvma rs1 = vaddr, rs2 = mode:ppn:asid > > hfence.gvma rs1 = gaddr, rs2 = mode:ppn:vmid > > > > mode - broadcast | local > > ppn - the PPN of the address space of the root page table > > vmid/asid - the window identifier of the address space > > > > At the Linux Plumber Conference 2019 RISCV-MC, ref:[1], we've > > showed two > > IOMMU examples to explain how it work with hardware. > > > > 1) In a lightweight IOMMU system (up to 64 address spaces), the > > hardware > > could directly convert PGD.PPN into DID (IOMMU ASID) > > > > 2) For the PCI ATS scenario, its IO ASID/VMID encoding space can > > support > > a very large number of address spaces. We use two reverse > > mapping > > tables to let the hardware translate S1/S2.PGD.PPN into IO > > ASID/VMID. > > > > ASYNC BROADCAST SFENCE.VMA > > =========================== > > > > To support the high latency broadcast sfence.vma operation in the > > PCI ATS > > usage scenario, we modify the sfence.vma from synchronous mode to > > asynchronous mode. (For simpler implementation, if hardware only > > implement > > synchronous mode and software still work in asynchronous mode) > > > > To implement the asynchronous mode, 3 features are added: > > 1) sstatus:TLBI > > A "status bit - TLBI" is added to the sstatus register. The > > TLBI status > > bit indicates if there are still outstanding sfence.vma > > requests on the > > current hart. > > Value: > > 1: sfence.vma requests are not completed. > > 0: all sfece.vma requests completed, request queue is empty. > > > > 2) sstatus:TLBIC > > A "control bits - TLBIC" is added to sstatus register. The > > TLBIC control > > bits are controlled by software. > > "Write 1" will trigger the current hart check to see if there > > are still > > outstanding sfence.vma requests. If there are unfinished > > requests, an > > interrupt will be generated when the request is completed, > > notifying the > > software that all of the current sfence.vma requests have been > > completed. > > "Write 0" will cause nothing. > > > > 3) supervisor interrupt register (sip & sie):TLBI finish interrupt > > A per-hart interrupt is added to supervisor interrupt > > registers. > > When all sfence.vma requests are completed and sstatus:TLBIC > > has been > > triggered, hart will receive a TLBI finish interrupt. Just like > > timer, > > software and external interrupt's definition in sip & sie. > > > > Fake code: > > > > flush_tlb_page(vma, addr) { > > asid = cpu_asid(vma->vm_mm); > > ppn = PFN_DOWN(vma->vm_mm->pgd); > > > > sfence.vma (addr, 1|PPN_OFFSET(ppn)|asid); //1. start request > > > > while(sstatus:TLBI) if (time_out() > 1ms) break; //2. loop > > check > > > > while (sstatus:TLBI) { > > ... > > set sstatus:TLBIC; > > wait_TLBI_finish_interrupt(); //3. wait irq, io_schedule > > } > > } > > > > Here we give 2 level check: > > 1) loop check sstatus:TLBI, CPU could response Interrupt. > > 2) set sstatus:TLBIC and wait for irq, CPU schedule out for other > > task. > > > > ACE-DVM Example > > =============== > > > > Honestly, "broadcasting addr, asid, vmid, S1/S2.PGD.PPN to > > interconnects" > > and "ASYNC SFENCE.VMA" could be implemented by ACE-DVM protocol ref > > [2]. > > > > There are 3 types of transactions in DVM: > > > > - DVM operation > > Send all information to the interconnect, including addr, asid, > > S1.PGD.PPN, vmid, S2.PGD.PPN. > > > > - DVM synchronization > > Check that all DVM operations have been completed. If not, it > > will use > > state machine to wait DVM complete requests. > > > > - DVM complete > > Return transaction from components, eg: IOMMU. If hart has > > received all > > DVM completes which are triggered by sfence.vma instructions and > > "sstatus:TLBIC" has been set, a TLBI finish interrupt is > > triggered. > > > > (Actually, we do not need to implement the above functions strictly > > according to the ACE specification :P ) > > > > 1: https://www.linuxplumbersconf.org/event/4/contributions/307/ > > 2: AMBA AXI and ACE Protocol Specification - Distributed Virtual > > Memory > > Transactions" > > > > Signed-off-by: Guo Ren > > Reviewed-by: Li Feiteng > > --- > > src/hypervisor.tex | 43 ++++++++------- > > src/supervisor.tex | 155 > > +++++++++++++++++++++++++++++++++++++++++------------ > > 2 files changed, 143 insertions(+), 55 deletions(-) > > > > diff --git a/src/hypervisor.tex b/src/hypervisor.tex > > index 47b90b2..3718819 100644 > > --- a/src/hypervisor.tex > > +++ b/src/hypervisor.tex > > @@ -1094,15 +1094,15 @@ The hypervisor extension adds two new > > privileged fence instructions. > > \multicolumn{1}{c|}{opcode} \\ > > \hline > > 7 & 5 & 5 & 3 & 5 & 7 \\ > > -HFENCE.GVMA & vmid & gaddr & PRIV & 0 & SYSTEM \\ > > -HFENCE.VVMA & asid & vaddr & PRIV & 0 & SYSTEM \\ > > +HFENCE.GVMA & mode:ppn:vmid & gaddr & PRIV & 0 & SYSTEM \\ > > +HFENCE.VVMA & mode:ppn:asid & vaddr & PRIV & 0 & SYSTEM \\ > > \end{tabular} > > \end{center} > > > > The hypervisor memory-management fence instructions, HFENCE.GVMA > > and > > HFENCE.VVMA, are valid only in HS-mode when {\tt mstatus}.TVM=0, > > or in M-mode > > (irrespective of {\tt mstatus}.TVM). > > -These instructions perform a function similar to SFENCE.VMA > > +These instructions perform a function similar to SFENCE.VMA > > (broadcast/local) > > (Section~\ref{sec:sfence.vma}), except applying to the guest- > > physical > > memory-management data structures controlled by CSR {\tt hgatp} > > (HFENCE.GVMA) > > or the VS-level memory-management data structures controlled by > > CSR {\tt vsatp} > > @@ -1136,11 +1136,10 @@ An HFENCE.VVMA instruction applies only to > > a single virtual machine, identified > > by the setting of {\tt hgatp}.VMID when HFENCE.VVMA executes. > > \end{commentary} > > > > -When {\em rs2}$\neq${\tt x0}, bits XLEN-1:ASIDMAX of the value > > held in {\em > > -rs2} are reserved for future use and should be zeroed by software > > and ignored > > -by current implementations. > > -Furthermore, if ASIDLEN~$<$~ASIDMAX, the implementation shall > > ignore bits > > -ASIDMAX-1:ASIDLEN of the value held in {\em rs2}. > > +When {\em rs2}$\neq${\tt x0}, bits contain 3 informations: mode, > > ppn, asid. > > +1) mode control HFENCE.VVMA broadcast or not. > > +2) ppn is the root page talbe's PPN of the asid address space. > > +3) asid is the identifier of process in virtual machine. > > > > \begin{commentary} > > Simpler implementations of HFENCE.VVMA can ignore the guest > > virtual address in > > @@ -1168,11 +1167,10 @@ physical addresses in PMP address registers > > (Section~\ref{sec:pmp}) and in page > > table entries (Sections \ref{sec:sv32}, \ref{sec:sv39}, > > and~\ref{sec:sv48}). > > \end{commentary} > > > > -When {\em rs2}$\neq${\tt x0}, bits XLEN-1:VMIDMAX of the value > > held in {\em > > -rs2} are reserved for future use and should be zeroed by software > > and ignored > > -by current implementations. > > -Furthermore, if VMIDLEN~$<$~VMIDMAX, the implementation shall > > ignore bits > > -VMIDMAX-1:VMIDLEN of the value held in {\em rs2}. > > +When {\em rs2}$\neq${\tt x0}, bits contain 3 informations: mode, > > vmid, ppn. > > +1) mode control HFENCE.GVMA broadcast or not. > > +2) ppn is the root page talbe's PPN of the vmid address space. > > +3) vmid is the identifier of virtual machine. > > > > \begin{commentary} > > Simpler implementations of HFENCE.GVMA can ignore the guest > > physical address in > > @@ -1567,21 +1565,22 @@ register. > > \subsection{Memory-Management Fences} > > > > The behavior of the SFENCE.VMA instruction is affected by the > > current > > -virtualization mode V. When V=0, the virtual-address argument is > > an HS-level > > -virtual address, and the ASID argument is an HS-level ASID. > > +virtualization mode V. When V=0, the rs1 argument is an HS-level > > +virtual address, and the rs2 argument is an HS-level ASID and root > > page table's PPN. > > The instruction orders stores only to HS-level address-translation > > structures > > with subsequent HS-level address translations. > > > > -When V=1, the virtual-address argument to SFENCE.VMA is a guest > > virtual > > -address within the current virtual machine, and the ASID argument > > is a VS-level > > -ASID within the current virtual machine. > > +When V=1, the rs1 argument to SFENCE.VMA is a guest virtual > > +address within the current virtual machine, and the rs2 argument > > is a VS-level > > +ASID and root page table's PPN within the current virtual machine. > > The current virtual machine is identified by the VMID field of CSR > > {\tt hgatp}, > > -and the effective ASID can be considered to be the combination of > > this VMID > > -with the VS-level ASID. > > +and the effective ASID and root page table's PPN can be considered > > to be the > > +combination of this VMID and root page table's PPN with the VS- > > level ASID and > > +root page table's PPN. > > The SFENCE.VMA instruction orders stores only to the VS-level > > address-translation structures with subsequent VS-level address > > translations > > -for the same virtual machine, i.e., only when {\tt hgatp}.VMID is > > the same as > > -when the SFENCE.VMA executed. > > +for the same virtual machine, i.e., only when {\tt hgatp}.VMID and > > {\\tt hgatp}.PPN is > > +the same as when the SFENCE.VMA executed. > > > > Hypervisor instructions HFENCE.GVMA and HFENCE.VVMA provide > > additional > > memory-management fences to complement SFENCE.VMA. > > diff --git a/src/supervisor.tex b/src/supervisor.tex > > index ba3ced5..2877b7a 100644 > > --- a/src/supervisor.tex > > +++ b/src/supervisor.tex > > @@ -47,10 +47,12 @@ register keeps track of the processor's current > > operating state. > > \begin{center} > > \setlength{\tabcolsep}{4pt} > > \scalebox{0.95}{ > > -\begin{tabular}{cWcccccWccccWcc} > > +\begin{tabular}{cccWcccccWccccWcc} > > \\ > > \instbit{31} & > > -\instbitrange{30}{20} & > > +\instbit{30} & > > +\instbit{29} & > > +\instbitrange{28}{20} & > > \instbit{19} & > > \instbit{18} & > > \instbit{17} & > > @@ -66,6 +68,8 @@ register keeps track of the processor's current > > operating state. > > \instbit{0} \\ > > \hline > > \multicolumn{1}{|c|}{SD} & > > +\multicolumn{1}{|c|}{TLBI} & > > +\multicolumn{1}{|c|}{TLBIC} & > > \multicolumn{1}{c|}{\wpri} & > > \multicolumn{1}{c|}{MXR} & > > \multicolumn{1}{c|}{SUM} & > > @@ -82,7 +86,7 @@ register keeps track of the processor's current > > operating state. > > \multicolumn{1}{c|}{\wpri} > > \\ > > \hline > > -1 & 11 & 1 & 1 & 1 & 2 & 2 & 4 & 1 & 1 & 1 & 1 & 3 & 1 & 1 \\ > > +1 & 1 & 1 & 10 & 1 & 1 & 1 & 2 & 2 & 4 & 1 & 1 & 1 & 1 & 3 & 1 & 1 > > \\ > > \end{tabular}} > > \end{center} > > } > > @@ -95,10 +99,12 @@ register keeps track of the processor's current > > operating state. > > {\footnotesize > > \begin{center} > > \setlength{\tabcolsep}{4pt} > > -\begin{tabular}{cMFScccc} > > +\begin{tabular}{cccMFScccc} > > \\ > > \instbit{SXLEN-1} & > > -\instbitrange{SXLEN-2}{34} & > > +\instbit{SXLEN-2} & > > +\instbit{SXLEN-3} & > > +\instbitrange{SXLEN-4}{34} & > > \instbitrange{33}{32} & > > \instbitrange{31}{20} & > > \instbit{19} & > > @@ -107,6 +113,8 @@ register keeps track of the processor's current > > operating state. > > \\ > > \hline > > \multicolumn{1}{|c|}{SD} & > > +\multicolumn{1}{|c|}{TLBI} & > > +\multicolumn{1}{|c|}{TLBIC} & > > \multicolumn{1}{c|}{\wpri} & > > \multicolumn{1}{c|}{UXL[1:0]} & > > \multicolumn{1}{c|}{\wpri} & > > @@ -115,7 +123,7 @@ register keeps track of the processor's current > > operating state. > > \multicolumn{1}{c|}{\wpri} & > > \\ > > \hline > > -1 & SXLEN-35 & 2 & 12 & 1 & 1 & 1 & \\ > > +1 & 1 & 1 & SXLEN-37 & 2 & 12 & 1 & 1 & 1 & \\ > > \end{tabular} > > \begin{tabular}{cWWFccccWcc} > > \\ > > @@ -152,6 +160,17 @@ register keeps track of the processor's > > current operating state. > > \label{sstatusreg} > > \end{figure*} > > > > +The TLBI (read-only) bit indicates that any async sfence.vma > > operations are > > +still pended on the hart. The value:0 means that there is no > > sfence.vma > > +operations pending and value:1 means that there are still > > sfence.vma operations > > +pending on the hart. > > + > > +When the sstatus:TLBIC bit is written 1, it triggers the hardware > > to check if > > +there are any TLB invalidate operations being pended. When all > > operations are > > +finished, a TLB Invalidate finish interrupt will be triggered > > +(see Section~\ref{sipreg}). When the sstatus:TLBIC bit is written > > 0, it will > > +cause nothing. Reading sstatus:TLBIC bit will alaways return 0. > > + > > The SPP bit indicates the privilege level at which a hart was > > executing before > > entering supervisor mode. When a trap is taken, SPP is set to 0 > > if the trap > > originated from user mode, or 1 otherwise. When an SRET > > instruction > > @@ -329,8 +348,10 @@ SXLEN-bit read/write register containing > > interrupt enable bits. > > {\footnotesize > > \begin{center} > > \setlength{\tabcolsep}{4pt} > > -\begin{tabular}{KcFcFcc} > > -\instbitrange{SXLEN-1}{10} & > > +\begin{tabular}{KcFcFcFcc} > > +\instbitrange{SXLEN-1}{14} & > > +\instbit{13} & > > +\instbitrange{12}{10} & > > \instbit{9} & > > \instbitrange{8}{6} & > > \instbit{5} & > > @@ -339,6 +360,8 @@ SXLEN-bit read/write register containing > > interrupt enable bits. > > \instbit{0} \\ > > \hline > > \multicolumn{1}{|c|}{\wpri} & > > +\multicolumn{1}{c|}{STLBIP} & > > +\multicolumn{1}{|c|}{\wpri} & > > \multicolumn{1}{c|}{SEIP} & > > \multicolumn{1}{c|}{\wpri} & > > \multicolumn{1}{c|}{STIP} & > > @@ -346,7 +369,7 @@ SXLEN-bit read/write register containing > > interrupt enable bits. > > \multicolumn{1}{c|}{SSIP} & > > \multicolumn{1}{c|}{\wpri} \\ > > \hline > > -SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ > > +SXLEN-14 & 1 & 3 & 1 & 3 & 1 & 3 & 1 & 1 \\ > > \end{tabular} > > \end{center} > > } > > @@ -359,8 +382,10 @@ SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ > > {\footnotesize > > \begin{center} > > \setlength{\tabcolsep}{4pt} > > -\begin{tabular}{KcFcFcc} > > -\instbitrange{SXLEN-1}{10} & > > +\begin{tabular}{KcFcFcFcc} > > +\instbitrange{SXLEN-1}{14} & > > +\instbit{13} & > > +\instbitrange{12}{10} & > > \instbit{9} & > > \instbitrange{8}{6} & > > \instbit{5} & > > @@ -369,6 +394,8 @@ SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ > > \instbit{0} \\ > > \hline > > \multicolumn{1}{|c|}{\wpri} & > > +\multicolumn{1}{c|}{STLBIE} & > > +\multicolumn{1}{|c|}{\wpri} & > > \multicolumn{1}{c|}{SEIE} & > > \multicolumn{1}{c|}{\wpri} & > > \multicolumn{1}{c|}{STIE} & > > @@ -376,7 +403,7 @@ SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ > > \multicolumn{1}{c|}{SSIE} & > > \multicolumn{1}{c|}{\wpri} \\ > > \hline > > -SXLEN-10 & 1 & 3 & 1 & 3 & 1 & 1 \\ > > +SXLEN-14 & 1 & 3 & 1 & 3 & 1 & 3 & 1 & 1 \\ > > \end{tabular} > > \end{center} > > } > > @@ -410,6 +437,12 @@ when the SEIE bit in the {\tt sie} register is > > clear. The implementation > > should provide facilities to mask, unmask, and query the cause of > > external > > interrupts. > > > > +A supervisor-level TLB Invalidate finish interrupt is pending if > > the STLBIP bit > > +in the {\tt sip} register is set. Supervisor-level TLB Invalidate > > finish > > +interrupts are disabled when the STLBIE bit in the {\tt sie} > > register is clear. > > +When hart tlb invalidate operations are finished, hardware will > > change sstatus:TLBI > > +bit from 1 to 0 and trigger TLB Invalidate finish interrupt. > > + > > \begin{commentary} > > The {\tt sip} and {\tt sie} registers are subsets of the {\tt mip} > > and {\tt > > mie} registers. Reading any field, or writing any writable field, > > of {\tt > > @@ -598,7 +631,9 @@ so is only guaranteed to hold supported > > exception codes. > > 1 & 5 & Supervisor timer interrupt \\ > > 1 & 6--8 & {\em Reserved} \\ > > 1 & 9 & Supervisor external interrupt \\ > > - 1 & 10--15 & {\em Reserved} \\ > > + 1 & 10--11 & {\em Reserved} \\ > > + 1 & 12 & Supervisor TLBI finish interrupt > > \\ > > + 1 & 13--15 & {\em Reserved} \\ > > 1 & $\ge$16 & {\em Available for platform use} > > \\ \hline > > 0 & 0 & Instruction address misaligned \\ > > 0 & 1 & Instruction access fault \\ > > @@ -884,7 +919,7 @@ provided. > > \multicolumn{1}{c|}{opcode} \\ > > \hline > > 7 & 5 & 5 & 3 & 5 & 7 \\ > > -SFENCE.VMA & asid & vaddr & PRIV & 0 & SYSTEM \\ > > +SFENCE.VMA & mode:ppn:asid & vaddr & LOCAL & 0 & SYSTEM \\ > > \end{tabular} > > \end{center} > > > > @@ -899,21 +934,70 @@ from that hart to the memory-management data > > structures. > > Further details on the behavior of this instruction are > > described in Section~\ref{virt-control} and Section~\ref{pmp- > > vmem}. > > > > +SFENCE.VMA is defined as an asynchronous completion instruction, > > which means > > +that the TLB operation is not guaranteed to complete when the > > instruction retires. > > +Software need check sstatus:TLBI to determine all TLB operations > > complete. > > +The sstatus:TLBI described in Section~\ref{sstatus}. When hardware > > change > > +sstatus:TLBI bit from 1 to 0, the TLB Invalidate finish interrupt > > will be > > +triggered. > > + > > \begin{commentary} > > -The SFENCE.VMA is used to flush any local hardware caches related > > to > > +The SFENCE.VMA is used to flush any local/remote hardware caches > > related to > > address translation. It is specified as a fence rather than a TLB > > flush to provide cleaner semantics with respect to which > > instructions > > are affected by the flush operation and to support a wider variety > > of > > dynamic caching structures and memory-management schemes. > > SFENCE.VMA > > is also used by higher privilege levels to synchronize page table > > -writes and the address translation hardware. > > +writes and the address translation hardware. There is a mode bit > > to determine > > +sfence.vma would broadcast on interconnect or not. > > \end{commentary} > > > > -SFENCE.VMA orders only the local hart's implicit references to the > > -memory-management data structures. > > +\begin{figure}[h!] > > +{\footnotesize > > +\begin{center} > > +\begin{tabular}{c@{}E@{}K} > > +\instbit{31} & > > +\instbitrange{30}{9} & > > +\instbitrange{8}{0} \\ > > +\hline > > +\multicolumn{1}{|c|}{{\tt MODE}} & > > +\multicolumn{1}{|c|}{{\tt PPN (root page table)}} & > > +\multicolumn{1}{|c|}{{\tt ASID}} \\ > > +\hline > > +1 & 22 & 9 \\ > > +\end{tabular} > > +\end{center} > > +} > > +\vspace{-0.1in} > > +\caption{RV32 sfence.vma rs2 format.} > > +\label{rv32satp} > > +\end{figure} > > + > > +\begin{figure}[h!] > > +{\footnotesize > > +\begin{center} > > +\begin{tabular}{@{}S@{}T@{}U} > > +\instbitrange{63}{60} & > > +\instbitrange{59}{16} & > > +\instbitrange{15}{0} \\ > > +\hline > > +\multicolumn{1}{|c|}{{\tt MODE}} & > > +\multicolumn{1}{|c|}{{\tt PPN (root page table)}} & > > +\multicolumn{1}{|c|}{{\tt ASID}} \\ > > +\hline > > +4 & 44 & 16 \\ > > +\end{tabular} > > +\end{center} > > +} > > +\vspace{-0.1in} > > +\caption{RV64 sfence.vma rs2 format, for MODE values, only highest > > bit:63 is > > +valid and others are reserved.} > > +\label{rv64satp} > > +\end{figure} > > > > \begin{commentary} > > -Consequently, other harts must be notified separately when the > > +The mode's highest bit could control sfence.vma behavior with > > 1:broadcast or 0:local. > > +If only have mode:local, other harts must be notified separately > > when the > > memory-management data structures have been modified. > > One approach is to use 1) > > a local data fence to ensure local writes are visible globally, > > then > > @@ -928,8 +1012,17 @@ modified for a single address mapping (i.e., > > one page or superpage), {\em rs1} > > can specify a virtual address within that mapping to effect a > > translation > > fence for that mapping only. Furthermore, for the common case > > that the > > translation data structures have only been modified for a single > > address-space > > -identifier, {\em rs2} can specify the address space. The behavior > > of > > -SFENCE.VMA depends on {\em rs1} and {\em rs2} as follows: > > +identifier, {\em rs2} can specify the address space with {\tt > > satp} format > > +which include asid and root page table's PPN information. > > + > > +\begin{commentary} > > +We use ASID and root page table's PPN to determine address space > > and the format > > +stored in rs2 is similar with {\tt satp} described in > > Section~\ref{sec:satp}. > > +ASID are used by local harts and root page table's PPN of the asid > > are used by > > +other different TLB systems, eg: IOMMU. > > +\end{commentary} > > + > > +The behavior of SFENCE.VMA depends on {\em rs1} and {\em rs2} as > > follows: > > > > \begin{itemize} > > \item If {\em rs1}={\tt x0} and {\em rs2}={\tt x0}, the fence > > orders all > > @@ -939,23 +1032,18 @@ SFENCE.VMA depends on {\em rs1} and {\em > > rs2} as follows: > > all reads and writes made to any level of the page tables, > > but only > > for the address space identified by integer register {\em > > rs2}. > > Accesses to {\em global} mappings (see > > Section~\ref{sec:translation}) > > - are not ordered. > > + are not ordered. The mode field in rs2 is determine > > broadcast or local. > > \item If {\em rs1}$\neq${\tt x0} and {\em rs2}={\tt x0}, the fence > > orders > > only reads and writes made to the leaf page table entry > > corresponding > > to the virtual address in {\em rs1}, for all address spaces. > > \item If {\em rs1}$\neq${\tt x0} and {\em rs2}$\neq${\tt x0}, the > > fence > > orders only reads and writes made to the leaf page table > > entry > > corresponding to the virtual address in {\em rs1}, for the > > address > > - space identified by integer register {\em rs2}. > > + space identified by integer register {\em rs2}. The mode > > field in rs2 > > + is determine broadcast or local. > > Accesses to global mappings are not ordered. > > \end{itemize} > > > > -When {\em rs2}$\neq${\tt x0}, bits SXLEN-1:ASIDMAX of the value > > held in {\em > > -rs2} are reserved for future use and should be zeroed by software > > and ignored > > -by current implementations. Furthermore, if ASIDLEN~$<$~ASIDMAX, > > the > > -implementation shall ignore bits ASIDMAX-1:ASIDLEN of the value > > held in {\em > > -rs2}. > > - > > \begin{commentary} > > Simpler implementations can ignore the virtual address in {\em > > rs1} and > > the ASID value in {\em rs2} and always perform a global fence. > > @@ -994,7 +1082,7 @@ can execute the same SFENCE.VMA instruction > > while a different ASID is loaded > > into {\tt satp}, provided the next time {\tt satp} is loaded with > > the recycled > > ASID, it is simultaneously loaded with the new page table. > > > > -\item If the implementation does not provide ASIDs, or software > > chooses to > > +\item If the implementation does not provide ASIDs and PPNs, or > > software chooses to > > always use ASID 0, then after every {\tt satp} write, software > > should execute > > SFENCE.VMA with {\em rs1}={\tt x0}. In the common case that no > > global > > translations have been modified, {\em rs2} should be set to a > > register other than > > @@ -1003,13 +1091,14 @@ not flushed. > > > > \item If software modifies a non-leaf PTE, it should execute > > SFENCE.VMA with > > {\em rs1}={\tt x0}. If any PTE along the traversal path had its G > > bit set, > > -{\em rs2} must be {\tt x0}; otherwise, {\em rs2} should be set to > > the ASID for > > -which the translation is being modified. > > +{\em rs2} must be {\tt x0}; otherwise, {\em rs2} should be set to > > the ASID and > > +root page table's PPN for which the translation is being modified. > > > > \item If software modifies a leaf PTE, it should execute > > SFENCE.VMA with {\em > > rs1} set to a virtual address within the page. If any PTE along > > the traversal > > path had its G bit set, {\em rs2} must be {\tt x0}; otherwise, > > {\em rs2} > > -should be set to the ASID for which the translation is being > > modified. > > +should be set to the ASID and root page table's PPN for which the > > translation > > +is being modified. > > > > \item For the special cases of increasing the permissions on a > > leaf PTE and > > changing an invalid PTE to a valid leaf, software may choose to > > execute From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BCA23C4CEC4 for ; Fri, 20 Sep 2019 02:30:20 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8BA5E21928 for ; Fri, 20 Sep 2019 02:30:20 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="H9yTdyaM" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8BA5E21928 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.crashing.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Mime-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=cH1Z0Mv//qlwwCq+r5kECDgPQo9kp+SS9sXqfPF3HCo=; b=H9yTdyaM8S3nrr W4pFKGKrE6iw1f8MiXQC47YBUN+IYvcqrEgckCkiwzqgARC0vNxPCOmoEswUL72e00SD4sXj+tygn TH7rSmnrTzXcyeF9nYpKa/mpyyqNJ3l6yEw6l5Rse5UfFvM1gFR2flR3J8Hx2n/tPuD8C9j6Er4y+ X2kzYizc+NmnSKTfykUKMjLeaSch5GwxSNX9+XVlNs700hJSFyHcVkSgrk0kLUIssIFzSLIJxRnLD Kpt0y8g9ZkNEJ6s0zOhy/j9l7LugCUziPbZHdobK9Sd2x5nCFghX2L8xPy0e/fxQkVmxE9Clni3LH dX1h7aeMaqhWE360XNew==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iB8ge-00062r-1g; Fri, 20 Sep 2019 02:30:20 +0000 Received: from gate.crashing.org ([63.228.1.57]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iB8gY-00062B-4y; Fri, 20 Sep 2019 02:30:17 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id x8K2RJ7O003665; Thu, 19 Sep 2019 21:27:20 -0500 Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma From: Benjamin Herrenschmidt To: Andrew Waterman , Guo Ren Date: Fri, 20 Sep 2019 12:27:19 +1000 In-Reply-To: References: <1568896556-28769-1-git-send-email-guoren@kernel.org> X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190919_193014_513788_800AF9CC X-CRM114-Status: GOOD ( 37.16 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: julien.thierry@arm.com, catalin.marinas@arm.com, palmer@sifive.com, will.deacon@arm.com, Atish.Patra@wdc.com, julien.grall@arm.com, gary@garyguo.net, linux-riscv@lists.infradead.org, kvmarm@lists.cs.columbia.edu, jean-philippe@linaro.org, linux-csky@vger.kernel.org, rppt@linux.ibm.com, Guo Ren , jacob.jun.pan@linux.intel.com, tech-privileged@lists.riscv.org, marc.zyngier@arm.com, linux-arm-kernel@lists.infradead.org, feiteng_li@c-sky.com, Anup.Patel@wdc.com, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, dwmw2@infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+infradead-linux-riscv=archiver.kernel.org@lists.infradead.org T24gVGh1LCAyMDE5LTA5LTE5IGF0IDA5OjA0IC0wNzAwLCBBbmRyZXcgV2F0ZXJtYW4gd3JvdGU6 Cj4gVGhpcyBuZWVkcyB0byBiZSBkaXNjdXNzZWQgYW5kIGRlYmF0ZWQgYXQgbGVuZ3RoOyBwcm9w b3NpbmcgZWRpdHMgdG8KPiB0aGUgc3BlYyBhdCB0aGlzIHN0YWdlIGlzIHB1dHRpbmcgdGhlIGNh cnQgYmVmb3JlIHRoZSBob3JzZSEKPiAKPiBXZSBzaG91bGRu4oCZdCBjaGFuZ2UgdGhlIGRlZmlu aXRpb24gb2YgdGhlIGV4aXN0aW5nIFNGRU5DRS5WTUEKPiBpbnN0cnVjdGlvbiB0byBhY2NvbXBs aXNoIHRoaXMuIEl04oCZcyBhbHNvIG5vdCBhYnVuZGFudGx5IGNsZWFyIHRvIG1lCj4gdGhhdCB0 aGlzIHNob3VsZCBiZSBhbiBpbnN0cnVjdGlvbjogVExCIHNob290ZG93biBsb29rcyBtb3JlIGxp a2UKPiBNTUlPLgoKUXVpdGUgYSBmZXcgcG9pbnRzIHRvIG1ha2UgaGVyZToKCiAtIFRMQiBzaG9v dGRvd24gYXMgTU1JTyBpcyBhIHByb2JsZW0gd2hlbiB5b3Ugc3RhcnQgdHJ5aW5nIHRvIGRvIGl0 CmRpcmVjdGx5IGZyb20gZ3Vlc3RzICh3aGljaCBpcyB2ZXJ5IGRlc2lyYWJsZSkuIEkgY2FuIGVs YWJvcmF0ZSBpZiB5b3UKd2FudCwgYnV0IGl0IGdlbmVyYWxseSBib2lscyBkb3duIHRvIGhhdmlu ZyBhIHBpbGUgb2YgY29waWVzIG9mIHRoZQpNTUlPIHJlc291cmNlcyB0byBhc3NpZ24gdG8gZ3Vl c3RzIGFuZCBoYXZpbmcgdG8gY29uc3RhbnRseSBjaGFuZ2UKbWFwcGluZ3Mgd2hpY2ggaXMgdW5y ZWFsaXN0aWMuCgogLSBJIGdlbmVyYWxseSBoYXZlIHZlcnkgc2VyaW91cyBkb3VidHMgYXMgdG8g dGhlIHZhbHVlIG9mIGRvaW5nCmJyb2FkY2FzdCBUTEIgc2hvb3Rkb3ducyBpbiBIVy4gSSB3ZW50 IGF0IGxlbmdodCBhYm91dCBpdCBkdXJpbmcgTGludXgKUGx1bWJlcnMgQ29uZmVyZW5jZSwgYnV0 IEknbGwgdHJ5IHRvIHN1bW1hcmlzZSBoZXJlLCBmcm9tIG15IGV4cGVyaWVuY2UKYmFjayBhdCBJ Qk0gd29ya2luZyBvbiBQT1dFUi4gSW4gbm8gc3BlY2lhbCBvcmRlcjoKCiAgICogSXQgZG9lc24n dCBzY2FsZSB3ZWxsLiBZb3UgaGF2ZSB0byBkcmFpbiBhbGwgdGhlIHRhcmdldCBDUFUgcXVldWVz Cm9mIGFscmVhZHkgdHJhbnNsYXRlZCBsb2FkIHN0b3Jlcywga2VlcCBvcmRlcmluZywgZXRjLi4u IGl0IGNhdXNlcyBhCmdpYW50IGZhYnJpYyB0cmFmZmljIGphbS4gRXhwZXJpZW5jZSBoYXMgc2hv d24gdGhhdCBvbiBzb21lIFBPV0VSCnN5c3RlbXMsIGl0IGJlY29tZXMgZXh0cmVtZWx5IGV4cGVu c2l2ZS4KCiAgICogU29tZSBPUyBzdWNoIGFzIExpbnV4IHRyYWNrIHdoaWNoIENQVSBoYXMgc2Vl biBhIGdpdmVuIGNvbnRleHQuClRoYXQgYWxsb3dzIHRvICJ0YXJnZXQiIFRMQiBpbnZhbGlkYXRp b25zIGluIGEgbW9yZSBzZW5zaWJsZSB3YXkuCkJyb2FkY2FzdCBpbnN0cnVjdGlvbnMgdGVuZCB0 byBsb3NlIHRoYXQgYWJpbGl0eSAoaXQncyBoYXJkIHRvIGRvIGluIEhXCmVzcC4gaW4gYSB3YXkg dGhhdCBjYW4gYmUgdmlydHVhbGl6ZWQgcHJvcGVybHkpLgoKICAgKiBCZWNhdXNlIHRob3NlIGlu c3RydWN0aW9ucyBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1lIChmb3IgdGhlCmFib3ZlIHJlYXNv bnMgYW5kIHNvbWUgb2YgYmVsb3cgb25lcyksIG9yIGF0IGxlYXN0IHdoYXRldmVyIGNvbnRleHQK c3luY2hyb25pemluZyBpbnN0cnVjdGlvbiB0aGF0IGZvbGxvdyB3aGljaCB3YWl0cyBmb3IgY29t cGxldGlvbiBvZiB0aGUKaW52YWxpZGF0aW9ucywgeW91IGVuZCB1cCB3aXRoIGEgQ1BVIGVmZmVj dGl2ZWx5ICJzdHVjayIgZm9yIGEgbG9uZwp0aW1lLCBub3QgdGFraW5nIGludGVycnVwdHMsIGlu Y2x1ZGluZyB0aG9zZSByb3V0ZWQgdG8gaGlnaGVyIHByaW9yaXR5CmxldmVscyAoaWUuIGh5cGVy dmlzb3IgZXRjLi4uKS4gVGhpcyBpcyBwcm9ibGVtYXRpYy4gQSBjb21wbGV0aW9uCnBvbGxpbmcg bWVjaGFuaXNtIGlzIHByZWZlcmFibGUgc28gdGhhdCBvbmNlIGNhbiBzdGlsbCBoYW5kbGUgc3Vj aCB3b3JrCndoaWxlIHdhaXRpbmcgYnV0IGlzIGhhcmQgdG8gYXJjaGl0ZWN0L2ltcGxlbWVudCBw cm9wZXJseSB3aGVuIGRvbmUgYXMKImluc3RydWN0aW9ucyIgc2luY2UgdGhleSBjYW4gaGFwcGVu IGNvbmN1cnJlbnRseSBmcm9tIG11bHRpcGxlCmNvbnRleHRzLiBJdCdzIGVhc2llciB3aXRoIE1N SU8gYnV0IHRoYXQgaGFzIG90aGVyIGlzc3Vlcy4KCiAgICogSXQgaW50cm9kdWNlcyByYWNlcyB3 aXRoIGFueXRoaW5nIHRoYXQgZG9lcyBTVyB3YWxrIG9mIHBhZ2UKdGFibGVzLiBGb3IgZXhhbXBs ZSBNTUlPIGVtdWxhdGlvbiBieSBhIGh5cGVydmlzb3IgY2Fubm90IGJlIGRvbmUgcmFjZS0KZnJl ZSBpZiB0aGUgZ3Vlc3QgY2FuIGRvIGl0cyBvd24gYnJvYWRjYXN0IGludmFsaWRhdGlvbnMgYW5k IHRoZQpoeXBlcnZpc29yIGhhcyB0byB3YWxrIHRoZSBndWVzdCBwYWdlIHRhYmxlcyB0byB0cmFu c2xhdGUuIEkgY2FuCmVsYWJvcmF0ZSBpZiByZXF1ZXN0ZWQuCgogICAqIFRob3NlIGludmFsaWRh dGlvbnMgbmVlZCB0byBhbHNvIHRhcmdldCBuZXN0IGFnZW50cyB0aGF0IGNhbiBob2xkCnRyYW5z bGF0aW9ucywgc3VjaCBhcyBJT01NVXMgdGhhdCBjYW4gb3BlcmF0ZSBpbiB1c3IgY29udGV4dHMg ZXRjLi4uClN1Y2ggSU9NTVVzIGNhbiB0YWtlIGEgVkVSWSBMT05HIHRpbWUgdG8gcHJvY2VzcyBp bnZhbGlkYXRpb25zLAplc3BlY2lhbGx5IGlmIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gY2hlY2tl ZCBvdXQgYnkgZGV2aWNlcyBzdWNoIGFzClBDSWUgZGV2aWNlcyB1c2luZyBBVFMuIFNvbWUgR1BV cyBmb3IgZXhhbXBsZSBjYW4gaGl0IGEgd29yc3QgY2FzZSBvZgpodW5kcmVkcyBvZiAqbWlsbGlz ZWNvbmRzKiB0byBwcm9jZXNzIGEgVExCIGludmFsaWRhdGlvbi4KCiAtIE5vdyBmb3IgdGhlIHBy b3Bvc2VkIHNjaGVtZS4gSSByZWFsbHkgZG9uJ3QgbGlrZSBpbnRyb2R1Y2luZyBhICpuZXcqCndh eSBvZiB0YWdnaW5nIGFuIGFkZHJlc3Mgc3BhY2UgdXNpbmcgdGhlIFBQTi4gSXQncyBhIGhhY2su IFRoZSByaWdodAp3YXkgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGV4aXN0aW5nIGNvbnRleHQgdGFn cyBhcmUgYmlnIGVub3VnaCB0byBub3QKcmVxdWlyZSByZS11c2UgYW5kIHRodXMgY2FuIGJlIHRy ZWF0ZWQgYXMgZ2xvYmFsIGNvbnRleHQgdGFncyBieSB0aGUKaHlwZXJ2aXNvciBhbmQgT1MuIElF LiBoYXZlIGJpZyBlbm91Z2ggVk1JRHMgYW5kIEFTSURzIHRoYXQgZWFjaApydW5uaW5nIFZNIGNh biBoYXZlIGEgZ2xvYmFsIHN0YWJsZSBWTUlEIGFuZCBlYWNoIHByb2Nlc3Mgd2l0aGluIGEKZ2l2 ZW4gVk0gY2FuIGhhdmUgYSBnbG9iYWwgKHdpdGhpbiB0aGF0IFZNKSBBU0lEIGluc3RlYWQgb2Yg cGxheWluZwpyZWFsbG9jYXRpb24gb2YgQVNJRCB0cmlja3MgYXQgY29udGV4dCBzd2l0Y2ggKHRo YXQncyB2ZXJ5IGluZWZmaWNpZW50CmFueXdheSwgc28gdGhhdCBzaG91bGQgYmUgZml4ZWQgZm9y IGFueXRoaW5nIHRoYXQgY2xhaW1zIHBlcmZvcm1hbmNlCmFuZCBzY2FsYWJpbGl0eSkuCgpOb3cg YWxsIG9mIHRoZXNlIHRoaW5ncyBjYW4gcHJvYmFibHkgaGF2ZSBzb2x1dGlvbnMgYnV0IGV4cGVy aWVuY2UKZG9lc24ndCBzZWVtIHRvIGluZGljYXRlIHRoYXQgaXQncyByZWFsbHkgd29ydGh3aGls ZS4gV2UgYXJlIGJldHRlciBvZmYKbWFraW5nIHN1cmUgd2UgaGF2ZSBhIHJlYWxseSBmYXN0IElQ SSBwYXRoIHRvIHBlcmZvcm0gdGhvc2UgdmlhCmludGVycnVwdHMgYW5kIGxvY2FsbHkgdG8gdGhl IHRhcmdldHRlZCBDUFVzIElNSE8uCgpDaGVlcnMsCkJlbi4KCj4gCj4gT24gVGh1LCBTZXAgMTks IDIwMTkgYXQgNTozNiBBTSBHdW8gUmVuIDxndW9yZW5Aa2VybmVsLm9yZz4gd3JvdGU6Cj4gPiBG cm9tOiBHdW8gUmVuIDxyZW5fZ3VvQGMtc2t5LmNvbT4KPiA+IAo+ID4gVGhlIHBhdGNoIGlzIGZv ciBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtaXNhLW1hbnVhbAo+ID4gCj4gPiBUaGUg cHJvcG9zYWwgaGFzIGJlZW4gdGFsa2VkIGluIExQQy0yMDE5IFJJU0MtViBNQyByZWYgWzFdLiBI ZXJlIGlzCj4gPiB0aGUKPiA+IGZvcm1hbCBwYXRjaC4KPiA+IAo+ID4gSW50cm9kdWN0aW9uCj4g PiA9PT09PT09PT09PT0KPiA+IAo+ID4gVXNpbmcgdGhlIEhhcmR3YXJlIFRMQiBicm9hZGNhc3Qg aW52YWxpZGF0aW9uIGluc3RydWN0aW9uIHRvCj4gPiBtYWludGFpbiB0aGUKPiA+IHN5c3RlbSBU TEIgaXMgYSBnb29kIGNob2ljZSBhbmQgaXQnbGwgc2ltcGxpZnkgdGhlIHN5c3RlbSBzb2Z0d2Fy ZQo+ID4gZGVzaWduLgo+ID4gVGhlIHByb3Bvc2FsIGhvcGVzIHRvIGFkZCBhIGJyb2FkY2FzdCBt b2RlIHRvIHRoZSBzZmVuY2Uudm1hIGluIHRoZQo+ID4gcmlzY3YtcHJpdmlsZWdlIHNwZWNpZmlj YXRpb24uIFRvIHN1cHBvcnQgdGhlIHNmZW5jZS52bWEgYnJvYWRjYXN0Cj4gPiBtb2RlLAo+ID4g dGhlcmUgYXJlIHR3byBtb2RpZmljYXRpb24gaW50cm9kdWNlZCBiZWxvdzoKPiA+IAo+ID4gIDEp IEFkZCBQR0QuUFBOIChyb290IHBhZ2UgdGFibGUncyBQUE4pIGFzIHRoZSB1bmlxdWUgaWRlbnRp ZmllciBvZgo+ID4gdGhlCj4gPiAgICAgYWRkcmVzcyBzcGFjZSBpbiBhZGRpdGlvbiB0byBhc2lk L3ZtaWQuIENvbXBhcmVkIHRvIHRoZQo+ID4gZHluYW1pY2FsbHkKPiA+ICAgICBjaGFuZ2VkIGFz aWQvdm1pZCwgUEdELlBQTiBpcyBmaXhlZCB0aHJvdWdob3V0IHRoZSBhZGRyZXNzCj4gPiBzcGFj ZSBsaWZlCj4gPiAgICAgY3ljbGUuIFRoaXMgZmVhdHVyZSBlbmFibGVzIHVuaWZvcm0gYWRkcmVz cyBzcGFjZQo+ID4gaWRlbnRpZmljYXRpb24KPiA+ICAgICBiZXR3ZWVuIGRpZmZlcmVudCBUTEIg c3lzdGVtcyAoYWN0dWFsbHksIGl0J3MgZGlmZmljdWx0IHRvCj4gPiB1bmlmeSB0aGUKPiA+ICAg ICBhc2lkL3ZtaWQgYmV0d2VlbiB0aGUgQ1BVIHN5c3RlbSBhbmQgdGhlIElPTU1VIHN5c3RlbSwg YmVjYXVzZQo+ID4gdGhlaXIKPiA+ICAgICBtZWNoYW5pc21zIGFyZSBkaWZmZXJlbnQpCj4gPiAK PiA+ICAyKSBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIHNmZW5jZS52bWEgaW5zdHJ1Y3Rp b24gZnJvbQo+ID4gc3luY2hyb25vdXMKPiA+ICAgICBtb2RlIHRvIGFzeW5jaHJvbm91cyBtb2Rl LCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb21wbGV0aW9uIG9mCj4gPiB0aGUgVExCCj4gPiAgICAg b3BlcmF0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHdoZW4gdGhlIHNmZW5jZS52bWEgaW5zdHJ1Y3Rp b24KPiA+IHJldGlyZXMuCj4gPiAgICAgSXQgbmVlZHMgdG8gYmUgY29tcGxldGVkIGJ5IGNoZWNr aW5nIHRoZSBmbGFnIGJpdCBvbiB0aGUgaGFydC4KPiA+IFRoZQo+ID4gICAgIHNmZW5jZS52bWEg cmVxdWVzdCBmaW5pc2ggY2FuIG5vdGlmeSB0aGUgc29mdHdhcmUgYnkgZ2VuZXJhdGluZwo+ID4g YW4KPiA+ICAgICBpbnRlcnJ1cHQuIFRoaXMgZnVuY3Rpb24gYWxsZXZpYXRlcyB0aGUgbGFyZ2Ug ZGVsYXkgb2YgVExCCj4gPiBpbnZhbGlkYXRpb24KPiA+ICAgICBpbiB0aGUgUENJIEFUUyBzeXN0 ZW0uCj4gPiAKPiA+IEFkZCBTMS9TMi5QR0QuUFBOIGZvciBBU0lEL1ZNSUQKPiA+ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiA+IAo+ID4gUEdEIGlzIGdsb2JhbCBkaXJlY3Rvcnkg KGRlZmluZWQgaW4gbGludXgpIGFuZCBQUE4gaXMgcGFnZSBwaHlzaWNhbAo+ID4gbnVtYmVyCj4g PiAoZGVmaW5lZCBpbiByaXNjdi1zcGVjKS4gUEdELlBOTiBjb3JyZXNwb25kcyB0byB0aGUgcm9v dCBwYWdlIHRhYmxlCj4gPiBwb2ludGVyCj4gPiBvZiB0aGUgYWRkcmVzcyBzcGFjZSwgaS5lLiBt bS0+cGdkIChsaW51eCBjb25jZXB0KS4KPiA+IAo+ID4gSW4gQ1BVL0lPTU1VIFRMQiwgd2UgdXNl IGFzaWQvdm1pZCB0byBkaXN0aW5ndWlzaCB0aGUgYWRkcmVzcyBzcGFjZQo+ID4gb2YKPiA+IHBy b2Nlc3Mgb3IgdmlydHVhbCBtYWNoaW5lLiBEdWUgdG8gdGhlIGxpbWl0YXRpb24gb2YgaWQgZW5j b2RpbmcsCj4gPiBpdCBjYW4KPiA+IG9ubHkgcmVwcmVzZW50IGEgcGFydCh3aW5kb3cpIG9mIHRo ZSBhZGRyZXNzIHNwYWNlLiBTMS9TMi5QR0QuUFBOCj4gPiBhcmUgdGhlCj4gPiByb290IHBhZ2Ug dGFibGUncyBQUE5zIG9mIHRoZSBhZGRyZXNzIHNwYWNlcyBhbmQgUzEvUzIuUEdELlBQTiBhcmUK PiA+IHRoZQo+ID4gdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFkZHJlc3Mgc3BhY2VzLgo+ID4g Cj4gPiBGb3IgdGhlIENQVSBTTVAgc3lzdGVtLCB5b3UgY2FuIHVzZSBjb250ZXh0IHN3aXRjaCB0 byBwZXJmb3JtIHRoZQo+ID4gbmVjZXNzYXJ5Cj4gPiBzb2Z0d2FyZSBtZWNoYW5pc20gdG8gZW5z dXJlIHRoYXQgdGhlIGFzaWQvdm1pZCBvbiBhbGwgaGFydHMgaXMKPiA+IGNvbnNpc3RlbnQKPiA+ IChwbGVhc2UgcmVmZXIgdG8gdGhlIGFybTY0IGFzaWQgbWVjaGFuaXNtKS4gSW4gdGhpcyB3YXks IHRoZSBUTEIKPiA+IGJyb2FkY2FzdAo+ID4gaW52YWxpZGF0aW9uIGluc3RydWN0aW9uIGNhbiBk ZXRlcm1pbmUgdGhlIGFkZHJlc3Mgc3BhY2UgcHJvY2Vzc2VkCj4gPiBvbiBhbGwKPiA+IGhhcnRz IGJ5IGFzaWQvdm1pZC4KPiA+IAo+ID4gRGlmZmVyZW50IGZyb20gdGhlIENQVSBTTVAgc3lzdGVt LCB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBmb3IKPiA+IHRoZQo+ID4gRE1BLUlPTU1VIHN5 c3RlbSwgc28gdGhlIHVuaWZpY2F0aW9uIHdpdGggdGhlIENQVSBhc2lkL3ZtaWQgY2Fubm90Cj4g PiBiZQo+ID4gZ3VhcmFudGVlZC4gU28gd2UgbmVlZCBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0 aGUgYWRkcmVzcyBzcGFjZSB0bwo+ID4gZXN0YWJsaXNoIGEgY29tbXVuaWNhdGlvbiBicmlkZ2Ug YmV0d2VlbiB0aGUgVExCcyBvZiBkaWZmZXJlbnQKPiA+IHN5c3RlbXMuCj4gPiAKPiA+IFRoYXQg aXMgUEdELlBQTiAoZm9yIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvczogUzEvUzIuUEdELlBQTikK PiA+IAo+ID4gY3VycmVudDoKPiA+ICBzZmVuY2Uudm1hICByczEgPSB2YWRkciwgcnMyID0gYXNp ZAo+ID4gIGhmZW5jZS52dm1hIHJzMSA9IHZhZGRyLCByczIgPSBhc2lkCj4gPiAgaGZlbmNlLmd2 bWEgcnMxID0gZ2FkZHIsIHJzMiA9IHZtaWQKPiA+IAo+ID4gcHJvcG9zZWQ6Cj4gPiAgc2ZlbmNl LnZtYSAgcnMxID0gdmFkZHIsIHJzMiA9IG1vZGU6cHBuOmFzaWQKPiA+ICBoZmVuY2UudnZtYSBy czEgPSB2YWRkciwgcnMyID0gbW9kZTpwcG46YXNpZAo+ID4gIGhmZW5jZS5ndm1hIHJzMSA9IGdh ZGRyLCByczIgPSBtb2RlOnBwbjp2bWlkCj4gPiAKPiA+ICBtb2RlICAgICAgLSBicm9hZGNhc3Qg fCBsb2NhbAo+ID4gIHBwbiAgICAgICAtIHRoZSBQUE4gb2YgdGhlIGFkZHJlc3Mgc3BhY2Ugb2Yg dGhlIHJvb3QgcGFnZSB0YWJsZQo+ID4gIHZtaWQvYXNpZCAtIHRoZSB3aW5kb3cgaWRlbnRpZmll ciBvZiB0aGUgYWRkcmVzcyBzcGFjZQo+ID4gCj4gPiBBdCB0aGUgTGludXggUGx1bWJlciBDb25m ZXJlbmNlIDIwMTkgUklTQ1YtTUMsIHJlZjpbMV0sIHdlJ3ZlCj4gPiBzaG93ZWQgdHdvCj4gPiBJ T01NVSBleGFtcGxlcyB0byBleHBsYWluIGhvdyBpdCB3b3JrIHdpdGggaGFyZHdhcmUuCj4gPiAK PiA+IDEpIEluIGEgbGlnaHR3ZWlnaHQgSU9NTVUgc3lzdGVtICh1cCB0byA2NCBhZGRyZXNzIHNw YWNlcyksIHRoZQo+ID4gaGFyZHdhcmUKPiA+ICAgIGNvdWxkIGRpcmVjdGx5IGNvbnZlcnQgUEdE LlBQTiBpbnRvIERJRCAoSU9NTVUgQVNJRCkKPiA+IAo+ID4gMikgRm9yIHRoZSBQQ0kgQVRTIHNj ZW5hcmlvLCBpdHMgSU8gQVNJRC9WTUlEIGVuY29kaW5nIHNwYWNlIGNhbgo+ID4gc3VwcG9ydAo+ ID4gICAgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBhZGRyZXNzIHNwYWNlcy4gV2UgdXNlIHR3byBy ZXZlcnNlCj4gPiBtYXBwaW5nCj4gPiAgICB0YWJsZXMgdG8gbGV0IHRoZSBoYXJkd2FyZSB0cmFu c2xhdGUgUzEvUzIuUEdELlBQTiBpbnRvIElPCj4gPiBBU0lEL1ZNSUQuCj4gPiAKPiA+IEFTWU5D IEJST0FEQ0FTVCBTRkVOQ0UuVk1BCj4gPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ IAo+ID4gVG8gc3VwcG9ydCB0aGUgaGlnaCBsYXRlbmN5IGJyb2FkY2FzdCBzZmVuY2Uudm1hIG9w ZXJhdGlvbiBpbiB0aGUKPiA+IFBDSSBBVFMKPiA+IHVzYWdlIHNjZW5hcmlvLCB3ZSBtb2RpZnkg dGhlIHNmZW5jZS52bWEgZnJvbSBzeW5jaHJvbm91cyBtb2RlIHRvCj4gPiBhc3luY2hyb25vdXMg bW9kZS4gKEZvciBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBpZiBoYXJkd2FyZSBvbmx5Cj4gPiBp bXBsZW1lbnQKPiA+IHN5bmNocm9ub3VzIG1vZGUgYW5kIHNvZnR3YXJlIHN0aWxsIHdvcmsgaW4g YXN5bmNocm9ub3VzIG1vZGUpCj4gPiAKPiA+IFRvIGltcGxlbWVudCB0aGUgYXN5bmNocm9ub3Vz IG1vZGUsIDMgZmVhdHVyZXMgYXJlIGFkZGVkOgo+ID4gIDEpIHNzdGF0dXM6VExCSQo+ID4gICAg IEEgInN0YXR1cyBiaXQgLSBUTEJJIiBpcyBhZGRlZCB0byB0aGUgc3N0YXR1cyByZWdpc3Rlci4g VGhlCj4gPiBUTEJJIHN0YXR1cwo+ID4gICAgIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIHN0 aWxsIG91dHN0YW5kaW5nIHNmZW5jZS52bWEKPiA+IHJlcXVlc3RzIG9uIHRoZQo+ID4gICAgIGN1 cnJlbnQgaGFydC4KPiA+ICAgICBWYWx1ZToKPiA+ICAgICAgIDE6IHNmZW5jZS52bWEgcmVxdWVz dHMgYXJlIG5vdCBjb21wbGV0ZWQuCj4gPiAgICAgICAwOiBhbGwgc2ZlY2Uudm1hIHJlcXVlc3Rz IGNvbXBsZXRlZCwgcmVxdWVzdCBxdWV1ZSBpcyBlbXB0eS4KPiA+IAo+ID4gIDIpIHNzdGF0dXM6 VExCSUMKPiA+ICAgICBBICJjb250cm9sIGJpdHMgLSBUTEJJQyIgaXMgYWRkZWQgdG8gc3N0YXR1 cyByZWdpc3Rlci4gVGhlCj4gPiBUTEJJQyBjb250cm9sCj4gPiAgICAgYml0cyBhcmUgY29udHJv bGxlZCBieSBzb2Z0d2FyZS4KPiA+ICAgICAiV3JpdGUgMSIgd2lsbCB0cmlnZ2VyIHRoZSBjdXJy ZW50IGhhcnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlCj4gPiBhcmUgc3RpbGwKPiA+ICAgICBvdXRz dGFuZGluZyBzZmVuY2Uudm1hIHJlcXVlc3RzLiBJZiB0aGVyZSBhcmUgdW5maW5pc2hlZAo+ID4g cmVxdWVzdHMsIGFuCj4gPiAgICAgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gdGhl IHJlcXVlc3QgaXMgY29tcGxldGVkLAo+ID4gbm90aWZ5aW5nIHRoZQo+ID4gICAgIHNvZnR3YXJl IHRoYXQgYWxsIG9mIHRoZSBjdXJyZW50IHNmZW5jZS52bWEgcmVxdWVzdHMgaGF2ZSBiZWVuCj4g PiBjb21wbGV0ZWQuCj4gPiAgICAgIldyaXRlIDAiIHdpbGwgY2F1c2Ugbm90aGluZy4KPiA+IAo+ ID4gIDMpIHN1cGVydmlzb3IgaW50ZXJydXB0IHJlZ2lzdGVyIChzaXAgJiBzaWUpOlRMQkkgZmlu aXNoIGludGVycnVwdAo+ID4gICAgIEEgcGVyLWhhcnQgaW50ZXJydXB0IGlzIGFkZGVkIHRvIHN1 cGVydmlzb3IgaW50ZXJydXB0Cj4gPiByZWdpc3RlcnMuCj4gPiAgICAgV2hlbiBhbGwgc2ZlbmNl LnZtYSByZXF1ZXN0cyBhcmUgY29tcGxldGVkIGFuZCBzc3RhdHVzOlRMQklDCj4gPiBoYXMgYmVl bgo+ID4gICAgIHRyaWdnZXJlZCwgaGFydCB3aWxsIHJlY2VpdmUgYSBUTEJJIGZpbmlzaCBpbnRl cnJ1cHQuIEp1c3QgbGlrZQo+ID4gdGltZXIsCj4gPiAgICAgc29mdHdhcmUgYW5kIGV4dGVybmFs IGludGVycnVwdCdzIGRlZmluaXRpb24gaW4gc2lwICYgc2llLgo+ID4gCj4gPiBGYWtlIGNvZGU6 Cj4gPiAKPiA+IGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcikgewo+ID4gICAgIGFzaWQgPSBjcHVf YXNpZCh2bWEtPnZtX21tKTsKPiA+ICAgICBwcG4gPSBQRk5fRE9XTih2bWEtPnZtX21tLT5wZ2Qp Owo+ID4gCj4gPiAgICAgc2ZlbmNlLnZtYSAoYWRkciwgMXxQUE5fT0ZGU0VUKHBwbil8YXNpZCk7 IC8vMS4gc3RhcnQgcmVxdWVzdAo+ID4gCj4gPiAgICAgd2hpbGUoc3N0YXR1czpUTEJJKSBpZiAo dGltZV9vdXQoKSA+IDFtcykgYnJlYWs7IC8vMi4gbG9vcAo+ID4gY2hlY2sKPiA+IAo+ID4gICAg IHdoaWxlIChzc3RhdHVzOlRMQkkpIHsKPiA+ICAgICAgICAgLi4uCj4gPiAgICAgICAgIHNldCBz c3RhdHVzOlRMQklDOwo+ID4gICAgICAgICB3YWl0X1RMQklfZmluaXNoX2ludGVycnVwdCgpOyAv LzMuIHdhaXQgaXJxLCBpb19zY2hlZHVsZQo+ID4gICAgIH0KPiA+IH0KPiA+IAo+ID4gSGVyZSB3 ZSBnaXZlIDIgbGV2ZWwgY2hlY2s6Cj4gPiAgMSkgbG9vcCBjaGVjayBzc3RhdHVzOlRMQkksIENQ VSBjb3VsZCByZXNwb25zZSBJbnRlcnJ1cHQuCj4gPiAgMikgc2V0IHNzdGF0dXM6VExCSUMgYW5k IHdhaXQgZm9yIGlycSwgQ1BVIHNjaGVkdWxlIG91dCBmb3Igb3RoZXIKPiA+IHRhc2suCj4gPiAK PiA+IEFDRS1EVk0gRXhhbXBsZQo+ID4gPT09PT09PT09PT09PT09Cj4gPiAKPiA+IEhvbmVzdGx5 LCAiYnJvYWRjYXN0aW5nIGFkZHIsIGFzaWQsIHZtaWQsIFMxL1MyLlBHRC5QUE4gdG8KPiA+IGlu dGVyY29ubmVjdHMiCj4gPiBhbmQgIkFTWU5DIFNGRU5DRS5WTUEiIGNvdWxkIGJlIGltcGxlbWVu dGVkIGJ5IEFDRS1EVk0gcHJvdG9jb2wgcmVmCj4gPiBbMl0uCj4gPiAKPiA+IFRoZXJlIGFyZSAz IHR5cGVzIG9mIHRyYW5zYWN0aW9ucyBpbiBEVk06Cj4gPiAKPiA+ICAtIERWTSBvcGVyYXRpb24K PiA+ICAgIFNlbmQgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBpbnRlcmNvbm5lY3QsIGluY2x1ZGlu ZyBhZGRyLCBhc2lkLAo+ID4gICAgUzEuUEdELlBQTiwgdm1pZCwgUzIuUEdELlBQTi4KPiA+IAo+ ID4gIC0gRFZNIHN5bmNocm9uaXphdGlvbgo+ID4gICAgQ2hlY2sgdGhhdCBhbGwgRFZNIG9wZXJh dGlvbnMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSWYgbm90LCBpdAo+ID4gd2lsbCB1c2UKPiA+ICAg IHN0YXRlIG1hY2hpbmUgdG8gd2FpdCBEVk0gY29tcGxldGUgcmVxdWVzdHMuCj4gPiAKPiA+ICAt IERWTSBjb21wbGV0ZQo+ID4gICAgUmV0dXJuIHRyYW5zYWN0aW9uIGZyb20gY29tcG9uZW50cywg ZWc6IElPTU1VLiBJZiBoYXJ0IGhhcwo+ID4gcmVjZWl2ZWQgYWxsCj4gPiAgICBEVk0gY29tcGxl dGVzIHdoaWNoIGFyZSB0cmlnZ2VyZWQgYnkgc2ZlbmNlLnZtYSBpbnN0cnVjdGlvbnMgYW5kCj4g PiAgICAic3N0YXR1czpUTEJJQyIgaGFzIGJlZW4gc2V0LCBhIFRMQkkgZmluaXNoIGludGVycnVw dCBpcwo+ID4gdHJpZ2dlcmVkLgo+ID4gCj4gPiAoQWN0dWFsbHksIHdlIGRvIG5vdCBuZWVkIHRv IGltcGxlbWVudCB0aGUgYWJvdmUgZnVuY3Rpb25zIHN0cmljdGx5Cj4gPiAgYWNjb3JkaW5nIHRv IHRoZSBBQ0Ugc3BlY2lmaWNhdGlvbiA6UCApCj4gPiAKPiA+ICAxOiBodHRwczovL3d3dy5saW51 eHBsdW1iZXJzY29uZi5vcmcvZXZlbnQvNC9jb250cmlidXRpb25zLzMwNy8KPiA+ICAyOiBBTUJB IEFYSSBhbmQgQUNFIFByb3RvY29sIFNwZWNpZmljYXRpb24gLSBEaXN0cmlidXRlZCBWaXJ0dWFs Cj4gPiBNZW1vcnkKPiA+ICAgICBUcmFuc2FjdGlvbnMiCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6 IEd1byBSZW4gPHJlbl9ndW9AYy1za3kuY29tPgo+ID4gUmV2aWV3ZWQtYnk6IExpIEZlaXRlbmcg PGZlaXRlbmdfbGlAYy1za3kuY29tPgo+ID4gLS0tCj4gPiAgc3JjL2h5cGVydmlzb3IudGV4IHwg IDQzICsrKysrKysrLS0tLS0tLQo+ID4gIHNyYy9zdXBlcnZpc29yLnRleCB8IDE1NQo+ID4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiA+ICAy IGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL3NyYy9oeXBlcnZpc29yLnRleCBiL3NyYy9oeXBlcnZpc29yLnRleAo+ ID4gaW5kZXggNDdiOTBiMi4uMzcxODgxOSAxMDA2NDQKPiA+IC0tLSBhL3NyYy9oeXBlcnZpc29y LnRleAo+ID4gKysrIGIvc3JjL2h5cGVydmlzb3IudGV4Cj4gPiBAQCAtMTA5NCwxNSArMTA5NCwx NSBAQCBUaGUgaHlwZXJ2aXNvciBleHRlbnNpb24gYWRkcyB0d28gbmV3Cj4gPiBwcml2aWxlZ2Vk IGZlbmNlIGluc3RydWN0aW9ucy4KPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e29wY29kZX0gXFwK PiA+ICBcaGxpbmUKPiA+ICA3ICYgNSAmIDUgJiAzICYgNSAmIDcgXFwKPiA+IC1IRkVOQ0UuR1ZN QSAmIHZtaWQgJiBnYWRkciAmIFBSSVYgJiAwICYgU1lTVEVNIFxcCj4gPiAtSEZFTkNFLlZWTUEg JiBhc2lkICYgdmFkZHIgJiBQUklWICYgMCAmIFNZU1RFTSBcXAo+ID4gK0hGRU5DRS5HVk1BICYg bW9kZTpwcG46dm1pZCAmIGdhZGRyICYgUFJJViAmIDAgJiBTWVNURU0gXFwKPiA+ICtIRkVOQ0Uu VlZNQSAmIG1vZGU6cHBuOmFzaWQgJiB2YWRkciAmIFBSSVYgJiAwICYgU1lTVEVNIFxcCj4gPiAg XGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gCj4gPiAgVGhlIGh5cGVydmlzb3Ig bWVtb3J5LW1hbmFnZW1lbnQgZmVuY2UgaW5zdHJ1Y3Rpb25zLCBIRkVOQ0UuR1ZNQQo+ID4gYW5k Cj4gPiAgSEZFTkNFLlZWTUEsIGFyZSB2YWxpZCBvbmx5IGluIEhTLW1vZGUgd2hlbiB7XHR0IG1z dGF0dXN9LlRWTT0wLAo+ID4gb3IgaW4gTS1tb2RlCj4gPiAgKGlycmVzcGVjdGl2ZSBvZiB7XHR0 IG1zdGF0dXN9LlRWTSkuCj4gPiAtVGhlc2UgaW5zdHJ1Y3Rpb25zIHBlcmZvcm0gYSBmdW5jdGlv biBzaW1pbGFyIHRvIFNGRU5DRS5WTUEKPiA+ICtUaGVzZSBpbnN0cnVjdGlvbnMgcGVyZm9ybSBh IGZ1bmN0aW9uIHNpbWlsYXIgdG8gU0ZFTkNFLlZNQQo+ID4gKGJyb2FkY2FzdC9sb2NhbCkKPiA+ ICAoU2VjdGlvbn5ccmVme3NlYzpzZmVuY2Uudm1hfSksIGV4Y2VwdCBhcHBseWluZyB0byB0aGUg Z3Vlc3QtCj4gPiBwaHlzaWNhbAo+ID4gIG1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJl cyBjb250cm9sbGVkIGJ5IENTUiB7XHR0IGhnYXRwfQo+ID4gKEhGRU5DRS5HVk1BKQo+ID4gIG9y IHRoZSBWUy1sZXZlbCBtZW1vcnktbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgY29udHJvbGxl ZCBieQo+ID4gQ1NSIHtcdHQgdnNhdHB9Cj4gPiBAQCAtMTEzNiwxMSArMTEzNiwxMCBAQCBBbiBI RkVOQ0UuVlZNQSBpbnN0cnVjdGlvbiBhcHBsaWVzIG9ubHkgdG8KPiA+IGEgc2luZ2xlIHZpcnR1 YWwgbWFjaGluZSwgaWRlbnRpZmllZAo+ID4gIGJ5IHRoZSBzZXR0aW5nIG9mIHtcdHQgaGdhdHB9 LlZNSUQgd2hlbiBIRkVOQ0UuVlZNQSBleGVjdXRlcy4KPiA+ICBcZW5ke2NvbW1lbnRhcnl9Cj4g PiAKPiA+IC1XaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFhMRU4tMTpBU0lETUFY IG9mIHRoZSB2YWx1ZQo+ID4gaGVsZCBpbiB7XGVtCj4gPiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9y IGZ1dHVyZSB1c2UgYW5kIHNob3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUKPiA+IGFuZCBpZ25v cmVkCj4gPiAtYnkgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuCj4gPiAtRnVydGhlcm1vcmUsIGlm IEFTSURMRU5+JDwkfkFTSURNQVgsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbAo+ID4gaWdub3Jl IGJpdHMKPiA+IC1BU0lETUFYLTE6QVNJRExFTiBvZiB0aGUgdmFsdWUgaGVsZCBpbiB7XGVtIHJz Mn0uCj4gPiArV2hlbiB7XGVtIHJzMn0kXG5lcSR7XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5m b3JtYXRpb25zOiBtb2RlLAo+ID4gcHBuLCBhc2lkLgo+ID4gKzEpIG1vZGUgY29udHJvbCBIRkVO Q0UuVlZNQSBicm9hZGNhc3Qgb3Igbm90Lgo+ID4gKzIpIHBwbiBpcyB0aGUgcm9vdCBwYWdlIHRh bGJlJ3MgUFBOIG9mIHRoZSBhc2lkIGFkZHJlc3Mgc3BhY2UuCj4gPiArMykgYXNpZCBpcyB0aGUg aWRlbnRpZmllciBvZiBwcm9jZXNzIGluIHZpcnR1YWwgbWFjaGluZS4KPiA+IAo+ID4gIFxiZWdp bntjb21tZW50YXJ5fQo+ID4gIFNpbXBsZXIgaW1wbGVtZW50YXRpb25zIG9mIEhGRU5DRS5WVk1B IGNhbiBpZ25vcmUgdGhlIGd1ZXN0Cj4gPiB2aXJ0dWFsIGFkZHJlc3MgaW4KPiA+IEBAIC0xMTY4 LDExICsxMTY3LDEwIEBAIHBoeXNpY2FsIGFkZHJlc3NlcyBpbiBQTVAgYWRkcmVzcyByZWdpc3Rl cnMKPiA+IChTZWN0aW9uflxyZWZ7c2VjOnBtcH0pIGFuZCBpbiBwYWdlCj4gPiAgdGFibGUgZW50 cmllcyAoU2VjdGlvbnMgXHJlZntzZWM6c3YzMn0sIFxyZWZ7c2VjOnN2Mzl9LAo+ID4gYW5kflxy ZWZ7c2VjOnN2NDh9KS4KPiA+ICBcZW5ke2NvbW1lbnRhcnl9Cj4gPiAKPiA+IC1XaGVuIHtcZW0g cnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFhMRU4tMTpWTUlETUFYIG9mIHRoZSB2YWx1ZQo+ID4g aGVsZCBpbiB7XGVtCj4gPiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIHNo b3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUKPiA+IGFuZCBpZ25vcmVkCj4gPiAtYnkgY3VycmVu dCBpbXBsZW1lbnRhdGlvbnMuCj4gPiAtRnVydGhlcm1vcmUsIGlmIFZNSURMRU5+JDwkflZNSURN QVgsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbAo+ID4gaWdub3JlIGJpdHMKPiA+IC1WTUlETUFY LTE6Vk1JRExFTiBvZiB0aGUgdmFsdWUgaGVsZCBpbiB7XGVtIHJzMn0uCj4gPiArV2hlbiB7XGVt IHJzMn0kXG5lcSR7XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5mb3JtYXRpb25zOiBtb2RlLAo+ ID4gdm1pZCwgcHBuLgo+ID4gKzEpIG1vZGUgY29udHJvbCBIRkVOQ0UuR1ZNQSBicm9hZGNhc3Qg b3Igbm90Lgo+ID4gKzIpIHBwbiBpcyB0aGUgcm9vdCBwYWdlIHRhbGJlJ3MgUFBOIG9mIHRoZSB2 bWlkIGFkZHJlc3Mgc3BhY2UuCj4gPiArMykgdm1pZCBpcyB0aGUgaWRlbnRpZmllciBvZiB2aXJ0 dWFsIG1hY2hpbmUuCj4gPiAKPiA+ICBcYmVnaW57Y29tbWVudGFyeX0KPiA+ICBTaW1wbGVyIGlt cGxlbWVudGF0aW9ucyBvZiBIRkVOQ0UuR1ZNQSBjYW4gaWdub3JlIHRoZSBndWVzdAo+ID4gcGh5 c2ljYWwgYWRkcmVzcyBpbgo+ID4gQEAgLTE1NjcsMjEgKzE1NjUsMjIgQEAgcmVnaXN0ZXIuCj4g PiAgXHN1YnNlY3Rpb257TWVtb3J5LU1hbmFnZW1lbnQgRmVuY2VzfQo+ID4gCj4gPiAgVGhlIGJl aGF2aW9yIG9mIHRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIGlzIGFmZmVjdGVkIGJ5IHRoZQo+ ID4gY3VycmVudAo+ID4gLXZpcnR1YWxpemF0aW9uIG1vZGUgVi4gIFdoZW4gVj0wLCB0aGUgdmly dHVhbC1hZGRyZXNzIGFyZ3VtZW50IGlzCj4gPiBhbiBIUy1sZXZlbAo+ID4gLXZpcnR1YWwgYWRk cmVzcywgYW5kIHRoZSBBU0lEIGFyZ3VtZW50IGlzIGFuIEhTLWxldmVsIEFTSUQuCj4gPiArdmly dHVhbGl6YXRpb24gbW9kZSBWLiAgV2hlbiBWPTAsIHRoZSByczEgYXJndW1lbnQgaXMgYW4gSFMt bGV2ZWwKPiA+ICt2aXJ0dWFsIGFkZHJlc3MsIGFuZCB0aGUgcnMyIGFyZ3VtZW50IGlzIGFuIEhT LWxldmVsIEFTSUQgYW5kIHJvb3QKPiA+IHBhZ2UgdGFibGUncyBQUE4uCj4gPiAgVGhlIGluc3Ry dWN0aW9uIG9yZGVycyBzdG9yZXMgb25seSB0byBIUy1sZXZlbCBhZGRyZXNzLXRyYW5zbGF0aW9u IAo+ID4gc3RydWN0dXJlcwo+ID4gIHdpdGggc3Vic2VxdWVudCBIUy1sZXZlbCBhZGRyZXNzIHRy YW5zbGF0aW9ucy4KPiA+IAo+ID4gLVdoZW4gVj0xLCB0aGUgdmlydHVhbC1hZGRyZXNzIGFyZ3Vt ZW50IHRvIFNGRU5DRS5WTUEgaXMgYSBndWVzdAo+ID4gdmlydHVhbAo+ID4gLWFkZHJlc3Mgd2l0 aGluIHRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSBBU0lEIGFyZ3VtZW50Cj4g PiBpcyBhIFZTLWxldmVsCj4gPiAtQVNJRCB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNo aW5lLgo+ID4gK1doZW4gVj0xLCB0aGUgcnMxIGFyZ3VtZW50IHRvIFNGRU5DRS5WTUEgaXMgYSBn dWVzdCB2aXJ0dWFsCj4gPiArYWRkcmVzcyB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNo aW5lLCBhbmQgdGhlIHJzMiBhcmd1bWVudAo+ID4gaXMgYSBWUy1sZXZlbAo+ID4gK0FTSUQgYW5k IHJvb3QgcGFnZSB0YWJsZSdzIFBQTiB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5l Lgo+ID4gIFRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBW TUlEIGZpZWxkIG9mIENTUgo+ID4ge1x0dCBoZ2F0cH0sCj4gPiAtYW5kIHRoZSBlZmZlY3RpdmUg QVNJRCBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSB0aGUgY29tYmluYXRpb24gb2YKPiA+IHRoaXMg Vk1JRAo+ID4gLXdpdGggdGhlIFZTLWxldmVsIEFTSUQuCj4gPiArYW5kIHRoZSBlZmZlY3RpdmUg QVNJRCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIGNhbiBiZSBjb25zaWRlcmVkCj4gPiB0byBi ZSB0aGUKPiA+ICtjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdz IFBQTiB3aXRoIHRoZSBWUy0KPiA+IGxldmVsIEFTSUQgYW5kCj4gPiArcm9vdCBwYWdlIHRhYmxl J3MgUFBOLgo+ID4gIFRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIG9yZGVycyBzdG9yZXMgb25s eSB0byB0aGUgVlMtbGV2ZWwKPiA+ICBhZGRyZXNzLXRyYW5zbGF0aW9uIHN0cnVjdHVyZXMgd2l0 aCBzdWJzZXF1ZW50IFZTLWxldmVsIGFkZHJlc3MKPiA+IHRyYW5zbGF0aW9ucwo+ID4gLWZvciB0 aGUgc2FtZSB2aXJ0dWFsIG1hY2hpbmUsIGkuZS4sIG9ubHkgd2hlbiB7XHR0IGhnYXRwfS5WTUlE IGlzCj4gPiB0aGUgc2FtZSBhcwo+ID4gLXdoZW4gdGhlIFNGRU5DRS5WTUEgZXhlY3V0ZWQuCj4g PiArZm9yIHRoZSBzYW1lIHZpcnR1YWwgbWFjaGluZSwgaS5lLiwgb25seSB3aGVuIHtcdHQgaGdh dHB9LlZNSUQgYW5kCj4gPiB7XFx0dCBoZ2F0cH0uUFBOIGlzCj4gPiArdGhlIHNhbWUgYXMgd2hl biB0aGUgU0ZFTkNFLlZNQSBleGVjdXRlZC4KPiA+IAo+ID4gIEh5cGVydmlzb3IgaW5zdHJ1Y3Rp b25zIEhGRU5DRS5HVk1BIGFuZCBIRkVOQ0UuVlZNQSBwcm92aWRlCj4gPiBhZGRpdGlvbmFsCj4g PiAgbWVtb3J5LW1hbmFnZW1lbnQgZmVuY2VzIHRvIGNvbXBsZW1lbnQgU0ZFTkNFLlZNQS4KPiA+ IGRpZmYgLS1naXQgYS9zcmMvc3VwZXJ2aXNvci50ZXggYi9zcmMvc3VwZXJ2aXNvci50ZXgKPiA+ IGluZGV4IGJhM2NlZDUuLjI4NzdiN2EgMTAwNjQ0Cj4gPiAtLS0gYS9zcmMvc3VwZXJ2aXNvci50 ZXgKPiA+ICsrKyBiL3NyYy9zdXBlcnZpc29yLnRleAo+ID4gQEAgLTQ3LDEwICs0NywxMiBAQCBy ZWdpc3RlciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudAo+ID4gb3BlcmF0 aW5nIHN0YXRlLgo+ID4gIFxiZWdpbntjZW50ZXJ9Cj4gPiAgXHNldGxlbmd0aHtcdGFiY29sc2Vw fXs0cHR9Cj4gPiAgXHNjYWxlYm94ezAuOTV9ewo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtjV2NjY2Nj V2NjY2NXY2N9Cj4gPiArXGJlZ2lue3RhYnVsYXJ9e2NjY1djY2NjY1djY2NjV2NjfQo+ID4gIFxc Cj4gPiAgXGluc3RiaXR7MzF9ICYKPiA+IC1caW5zdGJpdHJhbmdlezMwfXsyMH0gJgo+ID4gK1xp bnN0Yml0ezMwfSAmCj4gPiArXGluc3RiaXR7Mjl9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezI4fXsy MH0gJgo+ID4gIFxpbnN0Yml0ezE5fSAmCj4gPiAgXGluc3RiaXR7MTh9ICYKPiA+ICBcaW5zdGJp dHsxN30gJgo+ID4gQEAgLTY2LDYgKzY4LDggQEAgcmVnaXN0ZXIga2VlcHMgdHJhY2sgb2YgdGhl IHByb2Nlc3NvcidzIGN1cnJlbnQKPiA+IG9wZXJhdGluZyBzdGF0ZS4KPiA+ICBcaW5zdGJpdHsw fSBcXAo+ID4gIFxobGluZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1NEfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17VExCSX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9e1RMQklD fSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsx fXtjfH17TVhSfSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtTVU19ICYKPiA+IEBAIC04Miw3 ICs4Niw3IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50 Cj4gPiBvcGVyYXRpbmcgc3RhdGUuCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0KPiA+ ICBcXAo+ID4gIFxobGluZQo+ID4gLTEgJiAxMSAmIDEgJiAxICYgMSAmIDIgJiAyICYgNCAmIDEg JiAxICYgMSAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICsxICYgMSAmIDEgJiAxMCAmIDEgJiAxICYg MSAmIDIgJiAyICYgNCAmIDEgJiAxICYgMSAmIDEgJiAzICYgMSAmIDEKPiA+IFxcCj4gPiAgXGVu ZHt0YWJ1bGFyfX0KPiA+ICBcZW5ke2NlbnRlcn0KPiA+ICB9Cj4gPiBAQCAtOTUsMTAgKzk5LDEy IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50Cj4gPiBv cGVyYXRpbmcgc3RhdGUuCj4gPiAge1xmb290bm90ZXNpemUKPiA+ICBcYmVnaW57Y2VudGVyfQo+ ID4gIFxzZXRsZW5ndGh7XHRhYmNvbHNlcH17NHB0fQo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtjTUZT Y2NjY30KPiA+ICtcYmVnaW57dGFidWxhcn17Y2NjTUZTY2NjY30KPiA+ICBcXAo+ID4gIFxpbnN0 Yml0e1NYTEVOLTF9ICYKPiA+IC1caW5zdGJpdHJhbmdle1NYTEVOLTJ9ezM0fSAmCj4gPiArXGlu c3RiaXR7U1hMRU4tMn0gJgo+ID4gK1xpbnN0Yml0e1NYTEVOLTN9ICYKPiA+ICtcaW5zdGJpdHJh bmdle1NYTEVOLTR9ezM0fSAmCj4gPiAgXGluc3RiaXRyYW5nZXszM317MzJ9ICYKPiA+ICBcaW5z dGJpdHJhbmdlezMxfXsyMH0gJgo+ID4gIFxpbnN0Yml0ezE5fSAmCj4gPiBAQCAtMTA3LDYgKzEx Myw4IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50Cj4g PiBvcGVyYXRpbmcgc3RhdGUuCj4gPiAgIFxcCj4gPiAgXGhsaW5lCj4gPiAgXG11bHRpY29sdW1u ezF9e3xjfH17U0R9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtUTEJJfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17VExCSUN9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJp fSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtVWExbMTowXX0gJgo+ID4gIFxtdWx0aWNvbHVt bnsxfXtjfH17XHdwcml9ICYKPiA+IEBAIC0xMTUsNyArMTIzLDcgQEAgcmVnaXN0ZXIga2VlcHMg dHJhY2sgb2YgdGhlIHByb2Nlc3NvcidzIGN1cnJlbnQKPiA+IG9wZXJhdGluZyBzdGF0ZS4KPiA+ ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4gPiAgIFxcCj4gPiAgXGhsaW5lCj4gPiAt MSAmIFNYTEVOLTM1ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPiA+ICsxICYgMSAmIDEgJiBT WExFTi0zNyAmIDIgJiAxMiAmIDEgJiAxICYgMSAmIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4g IFxiZWdpbnt0YWJ1bGFyfXtjV1dGY2NjY1djY30KPiA+ICBcXAo+ID4gQEAgLTE1Miw2ICsxNjAs MTcgQEAgcmVnaXN0ZXIga2VlcHMgdHJhY2sgb2YgdGhlIHByb2Nlc3NvcidzCj4gPiBjdXJyZW50 IG9wZXJhdGluZyBzdGF0ZS4KPiA+ICBcbGFiZWx7c3N0YXR1c3JlZ30KPiA+ICBcZW5ke2ZpZ3Vy ZSp9Cj4gPiAKPiA+ICtUaGUgVExCSSAocmVhZC1vbmx5KSBiaXQgaW5kaWNhdGVzIHRoYXQgYW55 IGFzeW5jIHNmZW5jZS52bWEKPiA+IG9wZXJhdGlvbnMgYXJlCj4gPiArc3RpbGwgcGVuZGVkIG9u IHRoZSBoYXJ0LiBUaGUgdmFsdWU6MCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vCj4gPiBzZmVuY2Uu dm1hCj4gPiArb3BlcmF0aW9ucyBwZW5kaW5nIGFuZCB2YWx1ZToxIG1lYW5zIHRoYXQgdGhlcmUg YXJlIHN0aWxsCj4gPiBzZmVuY2Uudm1hIG9wZXJhdGlvbnMKPiA+ICtwZW5kaW5nIG9uIHRoZSBo YXJ0Lgo+ID4gKwo+ID4gK1doZW4gdGhlIHNzdGF0dXM6VExCSUMgYml0IGlzIHdyaXR0ZW4gMSwg aXQgdHJpZ2dlcnMgdGhlIGhhcmR3YXJlCj4gPiB0byBjaGVjayBpZgo+ID4gK3RoZXJlIGFyZSBh bnkgVExCIGludmFsaWRhdGUgb3BlcmF0aW9ucyBiZWluZyBwZW5kZWQuIFdoZW4gYWxsCj4gPiBv cGVyYXRpb25zIGFyZQo+ID4gK2ZpbmlzaGVkLCBhIFRMQiBJbnZhbGlkYXRlIGZpbmlzaCBpbnRl cnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQKPiA+ICsoc2VlIFNlY3Rpb25+XHJlZntzaXByZWd9KS4g V2hlbiB0aGUgc3N0YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbgo+ID4gMCwgaXQgd2lsbAo+ID4g K2NhdXNlIG5vdGhpbmcuIFJlYWRpbmcgc3N0YXR1czpUTEJJQyBiaXQgd2lsbCBhbGF3YXlzIHJl dHVybiAwLgo+ID4gKwo+ID4gIFRoZSBTUFAgYml0IGluZGljYXRlcyB0aGUgcHJpdmlsZWdlIGxl dmVsIGF0IHdoaWNoIGEgaGFydCB3YXMKPiA+IGV4ZWN1dGluZyBiZWZvcmUKPiA+ICBlbnRlcmlu ZyBzdXBlcnZpc29yIG1vZGUuICBXaGVuIGEgdHJhcCBpcyB0YWtlbiwgU1BQIGlzIHNldCB0byAw Cj4gPiBpZiB0aGUgdHJhcAo+ID4gIG9yaWdpbmF0ZWQgZnJvbSB1c2VyIG1vZGUsIG9yIDEgb3Ro ZXJ3aXNlLiAgV2hlbiBhbiBTUkVUCj4gPiBpbnN0cnVjdGlvbgo+ID4gQEAgLTMyOSw4ICszNDgs MTAgQEAgU1hMRU4tYml0IHJlYWQvd3JpdGUgcmVnaXN0ZXIgY29udGFpbmluZwo+ID4gaW50ZXJy dXB0IGVuYWJsZSBiaXRzLgo+ID4gIHtcZm9vdG5vdGVzaXplCj4gPiAgXGJlZ2lue2NlbnRlcn0K PiA+ICBcc2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPiA+IC1cYmVnaW57dGFidWxhcn17S2NG Y0ZjY30KPiA+IC1caW5zdGJpdHJhbmdle1NYTEVOLTF9ezEwfSAmCj4gPiArXGJlZ2lue3RhYnVs YXJ9e0tjRmNGY0ZjY30KPiA+ICtcaW5zdGJpdHJhbmdle1NYTEVOLTF9ezE0fSAmCj4gPiArXGlu c3RiaXR7MTN9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezEyfXsxMH0gJgo+ID4gIFxpbnN0Yml0ezl9 ICYKPiA+ICBcaW5zdGJpdHJhbmdlezh9ezZ9ICYKPiA+ICBcaW5zdGJpdHs1fSAmCj4gPiBAQCAt MzM5LDYgKzM2MCw4IEBAIFNYTEVOLWJpdCByZWFkL3dyaXRlIHJlZ2lzdGVyIGNvbnRhaW5pbmcK PiA+IGludGVycnVwdCBlbmFibGUgYml0cy4KPiA+ICBcaW5zdGJpdHswfSBcXAo+ID4gIFxobGlu ZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4gPiArXG11bHRpY29sdW1uezF9 e2N8fXtTVExCSVB9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtcd3ByaX0gJgo+ID4gIFxt dWx0aWNvbHVtbnsxfXtjfH17U0VJUH0gJgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9 ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSVB9ICYKPiA+IEBAIC0zNDYsNyArMzY5LDcg QEAgU1hMRU4tYml0IHJlYWQvd3JpdGUgcmVnaXN0ZXIgY29udGFpbmluZwo+ID4gaW50ZXJydXB0 IGVuYWJsZSBiaXRzLgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U1NJUH0gJgo+ID4gIFxtdWx0 aWNvbHVtbnsxfXtjfH17XHdwcml9IFxcCj4gPiAgXGhsaW5lCj4gPiAtU1hMRU4tMTAgJiAxICYg MyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICtTWExFTi0xNCAmIDEgJiAzICYgMSAmIDMgJiAxICYg MyAmIDEgJiAxIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gIH0K PiA+IEBAIC0zNTksOCArMzgyLDEwIEBAIFNYTEVOLTEwICYgMSAmIDMgJiAxICYgMyAmIDEgJiAx IFxcCj4gPiAge1xmb290bm90ZXNpemUKPiA+ICBcYmVnaW57Y2VudGVyfQo+ID4gIFxzZXRsZW5n dGh7XHRhYmNvbHNlcH17NHB0fQo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNjfQo+ID4gLVxp bnN0Yml0cmFuZ2V7U1hMRU4tMX17MTB9ICYKPiA+ICtcYmVnaW57dGFidWxhcn17S2NGY0ZjRmNj fQo+ID4gK1xpbnN0Yml0cmFuZ2V7U1hMRU4tMX17MTR9ICYKPiA+ICtcaW5zdGJpdHsxM30gJgo+ ID4gK1xpbnN0Yml0cmFuZ2V7MTJ9ezEwfSAmCj4gPiAgXGluc3RiaXR7OX0gJgo+ID4gIFxpbnN0 Yml0cmFuZ2V7OH17Nn0gJgo+ID4gIFxpbnN0Yml0ezV9ICYKPiA+IEBAIC0zNjksNiArMzk0LDgg QEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICBcaW5zdGJpdHswfSBc XAo+ID4gIFxobGluZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e2N8fXtTVExCSUV9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtcd3By aX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U0VJRX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsx fXtjfH17XHdwcml9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSUV9ICYKPiA+IEBAIC0z NzYsNyArNDAzLDcgQEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICBc bXVsdGljb2x1bW57MX17Y3x9e1NTSUV9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJp fSBcXAo+ID4gIFxobGluZQo+ID4gLVNYTEVOLTEwICYgMSAmIDMgJiAxICYgMyAmIDEgJiAxIFxc Cj4gPiArU1hMRU4tMTQgJiAxICYgMyAmIDEgJiAzICYgMSAmIDMgJiAxICYgMSBcXAo+ID4gIFxl bmR7dGFidWxhcn0KPiA+ICBcZW5ke2NlbnRlcn0KPiA+ICB9Cj4gPiBAQCAtNDEwLDYgKzQzNywx MiBAQCB3aGVuIHRoZSBTRUlFIGJpdCBpbiB0aGUge1x0dCBzaWV9IHJlZ2lzdGVyIGlzCj4gPiBj bGVhci4gIFRoZSBpbXBsZW1lbnRhdGlvbgo+ID4gIHNob3VsZCBwcm92aWRlIGZhY2lsaXRpZXMg dG8gbWFzaywgdW5tYXNrLCBhbmQgcXVlcnkgdGhlIGNhdXNlIG9mCj4gPiBleHRlcm5hbAo+ID4g IGludGVycnVwdHMuCj4gPiAKPiA+ICtBIHN1cGVydmlzb3ItbGV2ZWwgVExCIEludmFsaWRhdGUg ZmluaXNoIGludGVycnVwdCBpcyBwZW5kaW5nIGlmCj4gPiB0aGUgU1RMQklQIGJpdAo+ID4gK2lu IHRoZSB7XHR0IHNpcH0gcmVnaXN0ZXIgaXMgc2V0LiAgU3VwZXJ2aXNvci1sZXZlbCBUTEIgSW52 YWxpZGF0ZQo+ID4gZmluaXNoCj4gPiAraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGUg U1RMQklFIGJpdCBpbiB0aGUge1x0dCBzaWV9Cj4gPiByZWdpc3RlciBpcyBjbGVhci4KPiA+ICtX aGVuIGhhcnQgdGxiIGludmFsaWRhdGUgb3BlcmF0aW9ucyBhcmUgZmluaXNoZWQsIGhhcmR3YXJl IHdpbGwKPiA+IGNoYW5nZSBzc3RhdHVzOlRMQkkKPiA+ICtiaXQgZnJvbSAxIHRvIDAgYW5kIHRy aWdnZXIgVExCIEludmFsaWRhdGUgZmluaXNoIGludGVycnVwdC4KPiA+ICsKPiA+ICBcYmVnaW57 Y29tbWVudGFyeX0KPiA+ICBUaGUge1x0dCBzaXB9IGFuZCB7XHR0IHNpZX0gcmVnaXN0ZXJzIGFy ZSBzdWJzZXRzIG9mIHRoZSB7XHR0IG1pcH0KPiA+IGFuZCB7XHR0Cj4gPiAgbWllfSByZWdpc3Rl cnMuICBSZWFkaW5nIGFueSBmaWVsZCwgb3Igd3JpdGluZyBhbnkgd3JpdGFibGUgZmllbGQsCj4g PiBvZiB7XHR0Cj4gPiBAQCAtNTk4LDcgKzYzMSw5IEBAIHNvIGlzIG9ubHkgZ3VhcmFudGVlZCB0 byBob2xkIHN1cHBvcnRlZAo+ID4gZXhjZXB0aW9uIGNvZGVzLgo+ID4gICAgMSAgICAgICAgICYg NSAgICAgICAgICAgICAgICYgU3VwZXJ2aXNvciB0aW1lciBpbnRlcnJ1cHQgXFwKPiA+ICAgIDEg ICAgICAgICAmIDYtLTggICAgICAgICAgICAmIHtcZW0gUmVzZXJ2ZWR9IFxcCj4gPiAgICAxICAg ICAgICAgJiA5ICAgICAgICAgICAgICAgJiBTdXBlcnZpc29yIGV4dGVybmFsIGludGVycnVwdCBc XAo+ID4gLSAgMSAgICAgICAgICYgMTAtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwK PiA+ICsgIDEgICAgICAgICAmIDEwLS0xMSAgICAgICAgICAmIHtcZW0gUmVzZXJ2ZWR9IFxcCj4g PiArICAxICAgICAgICAgJiAxMiAgICAgICAgICAgICAgJiBTdXBlcnZpc29yIFRMQkkgZmluaXNo IGludGVycnVwdAo+ID4gXFwKPiA+ICsgIDEgICAgICAgICAmIDEzLS0xNSAgICAgICAgICAmIHtc ZW0gUmVzZXJ2ZWR9IFxcCj4gPiAgICAxICAgICAgICAgJiAkXGdlJDE2ICAgICAgICAgJiB7XGVt IEF2YWlsYWJsZSBmb3IgcGxhdGZvcm0gdXNlfQo+ID4gXFwgXGhsaW5lCj4gPiAgICAwICAgICAg ICAgJiAwICAgICAgICAgICAgICAgJiBJbnN0cnVjdGlvbiBhZGRyZXNzIG1pc2FsaWduZWQgXFwK PiA+ICAgIDAgICAgICAgICAmIDEgICAgICAgICAgICAgICAmIEluc3RydWN0aW9uIGFjY2VzcyBm YXVsdCBcXAo+ID4gQEAgLTg4NCw3ICs5MTksNyBAQCBwcm92aWRlZC4KPiA+ICBcbXVsdGljb2x1 bW57MX17Y3x9e29wY29kZX0gXFwKPiA+ICBcaGxpbmUKPiA+ICA3ICYgNSAmIDUgJiAzICYgNSAm IDcgXFwKPiA+IC1TRkVOQ0UuVk1BICYgYXNpZCAmIHZhZGRyICYgUFJJViAmIDAgJiBTWVNURU0g XFwKPiA+ICtTRkVOQ0UuVk1BICYgbW9kZTpwcG46YXNpZCAmIHZhZGRyICYgTE9DQUwgJiAwICYg U1lTVEVNIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gCj4gPiBA QCAtODk5LDIxICs5MzQsNzAgQEAgZnJvbSB0aGF0IGhhcnQgdG8gdGhlIG1lbW9yeS1tYW5hZ2Vt ZW50IGRhdGEKPiA+IHN0cnVjdHVyZXMuCj4gPiAgRnVydGhlciBkZXRhaWxzIG9uIHRoZSBiZWhh dmlvciBvZiB0aGlzIGluc3RydWN0aW9uIGFyZQo+ID4gIGRlc2NyaWJlZCBpbiBTZWN0aW9uflxy ZWZ7dmlydC1jb250cm9sfSBhbmQgU2VjdGlvbn5ccmVme3BtcC0KPiA+IHZtZW19Lgo+ID4gCj4g PiArU0ZFTkNFLlZNQSBpcyBkZWZpbmVkIGFzIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIGlu c3RydWN0aW9uLAo+ID4gd2hpY2ggbWVhbnMKPiA+ICt0aGF0IHRoZSBUTEIgb3BlcmF0aW9uIGlz IG5vdCBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIHdoZW4gdGhlCj4gPiBpbnN0cnVjdGlvbiByZXRp cmVzLgo+ID4gK1NvZnR3YXJlIG5lZWQgY2hlY2sgc3N0YXR1czpUTEJJIHRvIGRldGVybWluZSBh bGwgVExCIG9wZXJhdGlvbnMKPiA+IGNvbXBsZXRlLgo+ID4gK1RoZSBzc3RhdHVzOlRMQkkgZGVz Y3JpYmVkIGluIFNlY3Rpb25+XHJlZntzc3RhdHVzfS4gV2hlbiBoYXJkd2FyZQo+ID4gY2hhbmdl Cj4gPiArc3N0YXR1czpUTEJJIGJpdCBmcm9tIDEgdG8gMCwgdGhlIFRMQiBJbnZhbGlkYXRlIGZp bmlzaCBpbnRlcnJ1cHQKPiA+IHdpbGwgYmUKPiA+ICt0cmlnZ2VyZWQuCj4gPiArCj4gPiAgXGJl Z2lue2NvbW1lbnRhcnl9Cj4gPiAtVGhlIFNGRU5DRS5WTUEgaXMgdXNlZCB0byBmbHVzaCBhbnkg bG9jYWwgaGFyZHdhcmUgY2FjaGVzIHJlbGF0ZWQKPiA+IHRvCj4gPiArVGhlIFNGRU5DRS5WTUEg aXMgdXNlZCB0byBmbHVzaCBhbnkgbG9jYWwvcmVtb3RlIGhhcmR3YXJlIGNhY2hlcwo+ID4gcmVs YXRlZCB0bwo+ID4gIGFkZHJlc3MgdHJhbnNsYXRpb24uICBJdCBpcyBzcGVjaWZpZWQgYXMgYSBm ZW5jZSByYXRoZXIgdGhhbiBhIFRMQgo+ID4gIGZsdXNoIHRvIHByb3ZpZGUgY2xlYW5lciBzZW1h bnRpY3Mgd2l0aCByZXNwZWN0IHRvIHdoaWNoCj4gPiBpbnN0cnVjdGlvbnMKPiA+ICBhcmUgYWZm ZWN0ZWQgYnkgdGhlIGZsdXNoIG9wZXJhdGlvbiBhbmQgdG8gc3VwcG9ydCBhIHdpZGVyIHZhcmll dHkKPiA+IG9mCj4gPiAgZHluYW1pYyBjYWNoaW5nIHN0cnVjdHVyZXMgYW5kIG1lbW9yeS1tYW5h Z2VtZW50IHNjaGVtZXMuIAo+ID4gU0ZFTkNFLlZNQQo+ID4gIGlzIGFsc28gdXNlZCBieSBoaWdo ZXIgcHJpdmlsZWdlIGxldmVscyB0byBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlCj4gPiAtd3JpdGVz IGFuZCB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXJkd2FyZS4KPiA+ICt3cml0ZXMgYW5kIHRo ZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlLiBUaGVyZSBpcyBhIG1vZGUgYml0Cj4gPiB0 byBkZXRlcm1pbmUKPiA+ICtzZmVuY2Uudm1hIHdvdWxkIGJyb2FkY2FzdCBvbiBpbnRlcmNvbm5l Y3Qgb3Igbm90Lgo+ID4gIFxlbmR7Y29tbWVudGFyeX0KPiA+IAo+ID4gLVNGRU5DRS5WTUEgb3Jk ZXJzIG9ubHkgdGhlIGxvY2FsIGhhcnQncyBpbXBsaWNpdCByZWZlcmVuY2VzIHRvIHRoZQo+ID4g LW1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4KPiA+ICtcYmVnaW57ZmlndXJlfVto IV0KPiA+ICt7XGZvb3Rub3Rlc2l6ZQo+ID4gK1xiZWdpbntjZW50ZXJ9Cj4gPiArXGJlZ2lue3Rh YnVsYXJ9e2NAe31FQHt9S30KPiA+ICtcaW5zdGJpdHszMX0gJgo+ID4gK1xpbnN0Yml0cmFuZ2V7 MzB9ezl9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezh9ezB9IFxcCj4gPiArXGhsaW5lCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17e1x0dCBNT0RFfX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9 e3tcdHQgUFBOIChyb290IHBhZ2UgdGFibGUpfX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9 e3tcdHQgQVNJRH19IFxcCj4gPiArXGhsaW5lCj4gPiArMSAmIDIyICYgOSBcXAo+ID4gK1xlbmR7 dGFidWxhcn0KPiA+ICtcZW5ke2NlbnRlcn0KPiA+ICt9Cj4gPiArXHZzcGFjZXstMC4xaW59Cj4g PiArXGNhcHRpb257UlYzMiBzZmVuY2Uudm1hIHJzMiBmb3JtYXQufQo+ID4gK1xsYWJlbHtydjMy c2F0cH0KPiA+ICtcZW5ke2ZpZ3VyZX0KPiA+ICsKPiA+ICtcYmVnaW57ZmlndXJlfVtoIV0KPiA+ ICt7XGZvb3Rub3Rlc2l6ZQo+ID4gK1xiZWdpbntjZW50ZXJ9Cj4gPiArXGJlZ2lue3RhYnVsYXJ9 e0B7fVNAe31UQHt9VX0KPiA+ICtcaW5zdGJpdHJhbmdlezYzfXs2MH0gJgo+ID4gK1xpbnN0Yml0 cmFuZ2V7NTl9ezE2fSAmCj4gPiArXGluc3RiaXRyYW5nZXsxNX17MH0gXFwKPiA+ICtcaGxpbmUK PiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IE1PREV9fSAmCj4gPiArXG11bHRpY29sdW1u ezF9e3xjfH17e1x0dCBQUE4gKHJvb3QgcGFnZSB0YWJsZSl9fSAmCj4gPiArXG11bHRpY29sdW1u ezF9e3xjfH17e1x0dCBBU0lEfX0gXFwKPiA+ICtcaGxpbmUKPiA+ICs0ICYgNDQgJiAxNiBcXAo+ ID4gK1xlbmR7dGFidWxhcn0KPiA+ICtcZW5ke2NlbnRlcn0KPiA+ICt9Cj4gPiArXHZzcGFjZXst MC4xaW59Cj4gPiArXGNhcHRpb257UlY2NCBzZmVuY2Uudm1hIHJzMiBmb3JtYXQsIGZvciBNT0RF IHZhbHVlcywgb25seSBoaWdoZXN0Cj4gPiBiaXQ6NjMgaXMKPiA+ICt2YWxpZCBhbmQgb3RoZXJz IGFyZSByZXNlcnZlZC59Cj4gPiArXGxhYmVse3J2NjRzYXRwfQo+ID4gK1xlbmR7ZmlndXJlfQo+ ID4gCj4gPiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4gPiAtQ29uc2VxdWVudGx5LCBvdGhlciBoYXJ0 cyBtdXN0IGJlIG5vdGlmaWVkIHNlcGFyYXRlbHkgd2hlbiB0aGUKPiA+ICtUaGUgbW9kZSdzIGhp Z2hlc3QgYml0IGNvdWxkIGNvbnRyb2wgc2ZlbmNlLnZtYSBiZWhhdmlvciB3aXRoCj4gPiAxOmJy b2FkY2FzdCBvciAwOmxvY2FsLgo+ID4gK0lmIG9ubHkgaGF2ZSBtb2RlOmxvY2FsLCBvdGhlciBo YXJ0cyBtdXN0IGJlIG5vdGlmaWVkIHNlcGFyYXRlbHkKPiA+IHdoZW4gdGhlCj4gPiAgbWVtb3J5 LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBtb2RpZmllZC4KPiA+ICBPbmUg YXBwcm9hY2ggaXMgdG8gdXNlIDEpCj4gPiAgYSBsb2NhbCBkYXRhIGZlbmNlIHRvIGVuc3VyZSBs b2NhbCB3cml0ZXMgYXJlIHZpc2libGUgZ2xvYmFsbHksCj4gPiB0aGVuCj4gPiBAQCAtOTI4LDgg KzEwMTIsMTcgQEAgbW9kaWZpZWQgZm9yIGEgc2luZ2xlIGFkZHJlc3MgbWFwcGluZyAoaS5lLiwK PiA+IG9uZSBwYWdlIG9yIHN1cGVycGFnZSksIHtcZW0gcnMxfQo+ID4gIGNhbiBzcGVjaWZ5IGEg dmlydHVhbCBhZGRyZXNzIHdpdGhpbiB0aGF0IG1hcHBpbmcgdG8gZWZmZWN0IGEKPiA+IHRyYW5z bGF0aW9uCj4gPiAgZmVuY2UgZm9yIHRoYXQgbWFwcGluZyBvbmx5LiAgRnVydGhlcm1vcmUsIGZv ciB0aGUgY29tbW9uIGNhc2UKPiA+IHRoYXQgdGhlCj4gPiAgdHJhbnNsYXRpb24gZGF0YSBzdHJ1 Y3R1cmVzIGhhdmUgb25seSBiZWVuIG1vZGlmaWVkIGZvciBhIHNpbmdsZQo+ID4gYWRkcmVzcy1z cGFjZQo+ID4gLWlkZW50aWZpZXIsIHtcZW0gcnMyfSBjYW4gc3BlY2lmeSB0aGUgYWRkcmVzcyBz cGFjZS4gIFRoZSBiZWhhdmlvcgo+ID4gb2YKPiA+IC1TRkVOQ0UuVk1BIGRlcGVuZHMgb24ge1xl bSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPiA+ICtpZGVudGlmaWVyLCB7XGVtIHJz Mn0gY2FuIHNwZWNpZnkgdGhlIGFkZHJlc3Mgc3BhY2Ugd2l0aCB7XHR0Cj4gPiBzYXRwfSBmb3Jt YXQKPiA+ICt3aGljaCBpbmNsdWRlIGFzaWQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBpbmZv cm1hdGlvbi4KPiA+ICsKPiA+ICtcYmVnaW57Y29tbWVudGFyeX0KPiA+ICtXZSB1c2UgQVNJRCBh bmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHRvIGRldGVybWluZSBhZGRyZXNzIHNwYWNlCj4gPiBh bmQgdGhlIGZvcm1hdAo+ID4gK3N0b3JlZCBpbiByczIgaXMgc2ltaWxhciB3aXRoIHtcdHQgc2F0 cH0gZGVzY3JpYmVkIGluCj4gPiBTZWN0aW9uflxyZWZ7c2VjOnNhdHB9Lgo+ID4gK0FTSUQgYXJl IHVzZWQgYnkgbG9jYWwgaGFydHMgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBvZiB0aGUgYXNp ZAo+ID4gYXJlIHVzZWQgYnkKPiA+ICtvdGhlciBkaWZmZXJlbnQgVExCIHN5c3RlbXMsIGVnOiBJ T01NVS4KPiA+ICtcZW5ke2NvbW1lbnRhcnl9Cj4gPiArCj4gPiArVGhlIGJlaGF2aW9yIG9mIFNG RU5DRS5WTUEgZGVwZW5kcyBvbiB7XGVtIHJzMX0gYW5kIHtcZW0gcnMyfSBhcwo+ID4gZm9sbG93 czoKPiA+IAo+ID4gIFxiZWdpbntpdGVtaXplfQo+ID4gIFxpdGVtIElmIHtcZW0gcnMxfT17XHR0 IHgwfSBhbmQge1xlbSByczJ9PXtcdHQgeDB9LCB0aGUgZmVuY2UKPiA+IG9yZGVycyBhbGwKPiA+ IEBAIC05MzksMjMgKzEwMzIsMTggQEAgU0ZFTkNFLlZNQSBkZXBlbmRzIG9uIHtcZW0gcnMxfSBh bmQge1xlbQo+ID4gcnMyfSBhcyBmb2xsb3dzOgo+ID4gICAgICAgIGFsbCByZWFkcyBhbmQgd3Jp dGVzIG1hZGUgdG8gYW55IGxldmVsIG9mIHRoZSBwYWdlIHRhYmxlcywKPiA+IGJ1dCBvbmx5Cj4g PiAgICAgICAgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIGlkZW50aWZpZWQgYnkgaW50ZWdlciByZWdp c3RlciB7XGVtCj4gPiByczJ9Lgo+ID4gICAgICAgIEFjY2Vzc2VzIHRvIHtcZW0gZ2xvYmFsfSBt YXBwaW5ncyAoc2VlCj4gPiBTZWN0aW9uflxyZWZ7c2VjOnRyYW5zbGF0aW9ufSkKPiA+IC0gICAg ICBhcmUgbm90IG9yZGVyZWQuCj4gPiArICAgICAgYXJlIG5vdCBvcmRlcmVkLiBUaGUgbW9kZSBm aWVsZCBpbiByczIgaXMgZGV0ZXJtaW5lCj4gPiBicm9hZGNhc3Qgb3IgbG9jYWwuCj4gPiAgXGl0 ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0IHgwfSwgdGhl IGZlbmNlCj4gPiBvcmRlcnMKPiA+ICAgICAgICBvbmx5IHJlYWRzIGFuZCB3cml0ZXMgbWFkZSB0 byB0aGUgbGVhZiBwYWdlIHRhYmxlIGVudHJ5Cj4gPiBjb3JyZXNwb25kaW5nCj4gPiAgICAgICAg dG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiB7XGVtIHJzMX0sIGZvciBhbGwgYWRkcmVzcyBzcGFj ZXMuCj4gPiAgXGl0ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfSRc bmVxJHtcdHQgeDB9LCB0aGUKPiA+IGZlbmNlCj4gPiAgICAgICAgb3JkZXJzIG9ubHkgcmVhZHMg YW5kIHdyaXRlcyBtYWRlIHRvIHRoZSBsZWFmIHBhZ2UgdGFibGUKPiA+IGVudHJ5Cj4gPiAgICAg ICAgY29ycmVzcG9uZGluZyB0byB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9y IHRoZQo+ID4gYWRkcmVzcwo+ID4gLSAgICAgIHNwYWNlIGlkZW50aWZpZWQgYnkgaW50ZWdlciBy ZWdpc3RlciB7XGVtIHJzMn0uCj4gPiArICAgICAgc3BhY2UgaWRlbnRpZmllZCBieSBpbnRlZ2Vy IHJlZ2lzdGVyIHtcZW0gcnMyfS4gVGhlIG1vZGUKPiA+IGZpZWxkIGluIHJzMgo+ID4gKyAgICAg IGlzIGRldGVybWluZSBicm9hZGNhc3Qgb3IgbG9jYWwuCj4gPiAgICAgICAgQWNjZXNzZXMgdG8g Z2xvYmFsIG1hcHBpbmdzIGFyZSBub3Qgb3JkZXJlZC4KPiA+ICBcZW5ke2l0ZW1pemV9Cj4gPiAK PiA+IC1XaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFNYTEVOLTE6QVNJRE1BWCBv ZiB0aGUgdmFsdWUKPiA+IGhlbGQgaW4ge1xlbQo+ID4gLXJzMn0gYXJlIHJlc2VydmVkIGZvciBm dXR1cmUgdXNlIGFuZCBzaG91bGQgYmUgemVyb2VkIGJ5IHNvZnR3YXJlCj4gPiBhbmQgaWdub3Jl ZAo+ID4gLWJ5IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zLiAgRnVydGhlcm1vcmUsIGlmIEFTSURM RU5+JDwkfkFTSURNQVgsCj4gPiB0aGUKPiA+IC1pbXBsZW1lbnRhdGlvbiBzaGFsbCBpZ25vcmUg Yml0cyBBU0lETUFYLTE6QVNJRExFTiBvZiB0aGUgdmFsdWUKPiA+IGhlbGQgaW4ge1xlbQo+ID4g LXJzMn0uCj4gPiAtCj4gPiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4gPiAgU2ltcGxlciBpbXBsZW1l bnRhdGlvbnMgY2FuIGlnbm9yZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0KPiA+IHJzMX0g YW5kCj4gPiAgdGhlIEFTSUQgdmFsdWUgaW4ge1xlbSByczJ9IGFuZCBhbHdheXMgcGVyZm9ybSBh IGdsb2JhbCBmZW5jZS4KPiA+IEBAIC05OTQsNyArMTA4Miw3IEBAIGNhbiBleGVjdXRlIHRoZSBz YW1lIFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb24KPiA+IHdoaWxlIGEgZGlmZmVyZW50IEFTSUQgaXMg bG9hZGVkCj4gPiAgaW50byB7XHR0IHNhdHB9LCBwcm92aWRlZCB0aGUgbmV4dCB0aW1lIHtcdHQg c2F0cH0gaXMgbG9hZGVkIHdpdGgKPiA+IHRoZSByZWN5Y2xlZAo+ID4gIEFTSUQsIGl0IGlzIHNp bXVsdGFuZW91c2x5IGxvYWRlZCB3aXRoIHRoZSBuZXcgcGFnZSB0YWJsZS4KPiA+IAo+ID4gLVxp dGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIEFTSURzLCBvciBzb2Z0 d2FyZQo+ID4gY2hvb3NlcyB0bwo+ID4gK1xpdGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vz IG5vdCBwcm92aWRlIEFTSURzIGFuZCBQUE5zLCBvcgo+ID4gc29mdHdhcmUgY2hvb3NlcyB0bwo+ ID4gIGFsd2F5cyB1c2UgQVNJRCAwLCB0aGVuIGFmdGVyIGV2ZXJ5IHtcdHQgc2F0cH0gd3JpdGUs IHNvZnR3YXJlCj4gPiBzaG91bGQgZXhlY3V0ZQo+ID4gIFNGRU5DRS5WTUEgd2l0aCB7XGVtIHJz MX09e1x0dCB4MH0uICBJbiB0aGUgY29tbW9uIGNhc2UgdGhhdCBubwo+ID4gZ2xvYmFsCj4gPiAg dHJhbnNsYXRpb25zIGhhdmUgYmVlbiBtb2RpZmllZCwge1xlbSByczJ9IHNob3VsZCBiZSBzZXQg dG8gYQo+ID4gcmVnaXN0ZXIgb3RoZXIgdGhhbgo+ID4gQEAgLTEwMDMsMTMgKzEwOTEsMTQgQEAg bm90IGZsdXNoZWQuCj4gPiAKPiA+ICBcaXRlbSBJZiBzb2Z0d2FyZSBtb2RpZmllcyBhIG5vbi1s ZWFmIFBURSwgaXQgc2hvdWxkIGV4ZWN1dGUKPiA+IFNGRU5DRS5WTUEgd2l0aAo+ID4gIHtcZW0g cnMxfT17XHR0IHgwfS4gIElmIGFueSBQVEUgYWxvbmcgdGhlIHRyYXZlcnNhbCBwYXRoIGhhZCBp dHMgRwo+ID4gYml0IHNldCwKPiA+IC17XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3 aXNlLCB7XGVtIHJzMn0gc2hvdWxkIGJlIHNldCB0bwo+ID4gdGhlIEFTSUQgZm9yCj4gPiAtd2hp Y2ggdGhlIHRyYW5zbGF0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLgo+ID4gK3tcZW0gcnMyfSBtdXN0 IGJlIHtcdHQgeDB9OyBvdGhlcndpc2UsIHtcZW0gcnMyfSBzaG91bGQgYmUgc2V0IHRvCj4gPiB0 aGUgQVNJRCBhbmQKPiA+ICtyb290IHBhZ2UgdGFibGUncyBQUE4gZm9yIHdoaWNoIHRoZSB0cmFu c2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPiA+IAo+ID4gIFxpdGVtIElmIHNvZnR3YXJlIG1v ZGlmaWVzIGEgbGVhZiBQVEUsIGl0IHNob3VsZCBleGVjdXRlCj4gPiBTRkVOQ0UuVk1BIHdpdGgg e1xlbQo+ID4gIHJzMX0gc2V0IHRvIGEgdmlydHVhbCBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZS4g IElmIGFueSBQVEUgYWxvbmcKPiA+IHRoZSB0cmF2ZXJzYWwKPiA+ICBwYXRoIGhhZCBpdHMgRyBi aXQgc2V0LCB7XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3aXNlLAo+ID4ge1xlbSBy czJ9Cj4gPiAtc2hvdWxkIGJlIHNldCB0byB0aGUgQVNJRCBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0 aW9uIGlzIGJlaW5nCj4gPiBtb2RpZmllZC4KPiA+ICtzaG91bGQgYmUgc2V0IHRvIHRoZSBBU0lE IGFuZCByb290IHBhZ2UgdGFibGUncyBQUE4gZm9yIHdoaWNoIHRoZQo+ID4gdHJhbnNsYXRpb24K PiA+ICtpcyBiZWluZyBtb2RpZmllZC4KPiA+IAo+ID4gIFxpdGVtIEZvciB0aGUgc3BlY2lhbCBj YXNlcyBvZiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhCj4gPiBsZWFmIFBURSBhbmQK PiA+ICBjaGFuZ2luZyBhbiBpbnZhbGlkIFBURSB0byBhIHZhbGlkIGxlYWYsIHNvZnR3YXJlIG1h eSBjaG9vc2UgdG8KPiA+IGV4ZWN1dGUKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LXJpc2N2Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BE6A4C3A5A6 for ; Fri, 20 Sep 2019 03:01:47 +0000 (UTC) Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 878B721928 for ; Fri, 20 Sep 2019 03:01:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 878B721928 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.crashing.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 40C0CBBC; Fri, 20 Sep 2019 03:01:46 +0000 (UTC) Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id BB852BB3 for ; Fri, 20 Sep 2019 03:01:45 +0000 (UTC) X-Greylist: delayed 00:31:22 by SQLgrey-1.7.6 Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 57C22711 for ; Fri, 20 Sep 2019 03:01:39 +0000 (UTC) Received: from localhost (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id x8K2RJ7O003665; Thu, 19 Sep 2019 21:27:20 -0500 Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma From: Benjamin Herrenschmidt To: Andrew Waterman , Guo Ren Date: Fri, 20 Sep 2019 12:27:19 +1000 In-Reply-To: References: <1568896556-28769-1-git-send-email-guoren@kernel.org> X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 Cc: julien.thierry@arm.com, catalin.marinas@arm.com, palmer@sifive.com, will.deacon@arm.com, Atish.Patra@wdc.com, julien.grall@arm.com, gary@garyguo.net, linux-riscv@lists.infradead.org, kvmarm@lists.cs.columbia.edu, jean-philippe@linaro.org, linux-csky@vger.kernel.org, rppt@linux.ibm.com, Guo Ren , tech-privileged@lists.riscv.org, marc.zyngier@arm.com, linux-arm-kernel@lists.infradead.org, feiteng_li@c-sky.com, Anup.Patel@wdc.com, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, dwmw2@infradead.org X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: iommu-bounces@lists.linux-foundation.org Errors-To: iommu-bounces@lists.linux-foundation.org T24gVGh1LCAyMDE5LTA5LTE5IGF0IDA5OjA0IC0wNzAwLCBBbmRyZXcgV2F0ZXJtYW4gd3JvdGU6 Cj4gVGhpcyBuZWVkcyB0byBiZSBkaXNjdXNzZWQgYW5kIGRlYmF0ZWQgYXQgbGVuZ3RoOyBwcm9w b3NpbmcgZWRpdHMgdG8KPiB0aGUgc3BlYyBhdCB0aGlzIHN0YWdlIGlzIHB1dHRpbmcgdGhlIGNh cnQgYmVmb3JlIHRoZSBob3JzZSEKPiAKPiBXZSBzaG91bGRu4oCZdCBjaGFuZ2UgdGhlIGRlZmlu aXRpb24gb2YgdGhlIGV4aXN0aW5nIFNGRU5DRS5WTUEKPiBpbnN0cnVjdGlvbiB0byBhY2NvbXBs aXNoIHRoaXMuIEl04oCZcyBhbHNvIG5vdCBhYnVuZGFudGx5IGNsZWFyIHRvIG1lCj4gdGhhdCB0 aGlzIHNob3VsZCBiZSBhbiBpbnN0cnVjdGlvbjogVExCIHNob290ZG93biBsb29rcyBtb3JlIGxp a2UKPiBNTUlPLgoKUXVpdGUgYSBmZXcgcG9pbnRzIHRvIG1ha2UgaGVyZToKCiAtIFRMQiBzaG9v dGRvd24gYXMgTU1JTyBpcyBhIHByb2JsZW0gd2hlbiB5b3Ugc3RhcnQgdHJ5aW5nIHRvIGRvIGl0 CmRpcmVjdGx5IGZyb20gZ3Vlc3RzICh3aGljaCBpcyB2ZXJ5IGRlc2lyYWJsZSkuIEkgY2FuIGVs YWJvcmF0ZSBpZiB5b3UKd2FudCwgYnV0IGl0IGdlbmVyYWxseSBib2lscyBkb3duIHRvIGhhdmlu ZyBhIHBpbGUgb2YgY29waWVzIG9mIHRoZQpNTUlPIHJlc291cmNlcyB0byBhc3NpZ24gdG8gZ3Vl c3RzIGFuZCBoYXZpbmcgdG8gY29uc3RhbnRseSBjaGFuZ2UKbWFwcGluZ3Mgd2hpY2ggaXMgdW5y ZWFsaXN0aWMuCgogLSBJIGdlbmVyYWxseSBoYXZlIHZlcnkgc2VyaW91cyBkb3VidHMgYXMgdG8g dGhlIHZhbHVlIG9mIGRvaW5nCmJyb2FkY2FzdCBUTEIgc2hvb3Rkb3ducyBpbiBIVy4gSSB3ZW50 IGF0IGxlbmdodCBhYm91dCBpdCBkdXJpbmcgTGludXgKUGx1bWJlcnMgQ29uZmVyZW5jZSwgYnV0 IEknbGwgdHJ5IHRvIHN1bW1hcmlzZSBoZXJlLCBmcm9tIG15IGV4cGVyaWVuY2UKYmFjayBhdCBJ Qk0gd29ya2luZyBvbiBQT1dFUi4gSW4gbm8gc3BlY2lhbCBvcmRlcjoKCiAgICogSXQgZG9lc24n dCBzY2FsZSB3ZWxsLiBZb3UgaGF2ZSB0byBkcmFpbiBhbGwgdGhlIHRhcmdldCBDUFUgcXVldWVz Cm9mIGFscmVhZHkgdHJhbnNsYXRlZCBsb2FkIHN0b3Jlcywga2VlcCBvcmRlcmluZywgZXRjLi4u IGl0IGNhdXNlcyBhCmdpYW50IGZhYnJpYyB0cmFmZmljIGphbS4gRXhwZXJpZW5jZSBoYXMgc2hv d24gdGhhdCBvbiBzb21lIFBPV0VSCnN5c3RlbXMsIGl0IGJlY29tZXMgZXh0cmVtZWx5IGV4cGVu c2l2ZS4KCiAgICogU29tZSBPUyBzdWNoIGFzIExpbnV4IHRyYWNrIHdoaWNoIENQVSBoYXMgc2Vl biBhIGdpdmVuIGNvbnRleHQuClRoYXQgYWxsb3dzIHRvICJ0YXJnZXQiIFRMQiBpbnZhbGlkYXRp b25zIGluIGEgbW9yZSBzZW5zaWJsZSB3YXkuCkJyb2FkY2FzdCBpbnN0cnVjdGlvbnMgdGVuZCB0 byBsb3NlIHRoYXQgYWJpbGl0eSAoaXQncyBoYXJkIHRvIGRvIGluIEhXCmVzcC4gaW4gYSB3YXkg dGhhdCBjYW4gYmUgdmlydHVhbGl6ZWQgcHJvcGVybHkpLgoKICAgKiBCZWNhdXNlIHRob3NlIGlu c3RydWN0aW9ucyBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1lIChmb3IgdGhlCmFib3ZlIHJlYXNv bnMgYW5kIHNvbWUgb2YgYmVsb3cgb25lcyksIG9yIGF0IGxlYXN0IHdoYXRldmVyIGNvbnRleHQK c3luY2hyb25pemluZyBpbnN0cnVjdGlvbiB0aGF0IGZvbGxvdyB3aGljaCB3YWl0cyBmb3IgY29t cGxldGlvbiBvZiB0aGUKaW52YWxpZGF0aW9ucywgeW91IGVuZCB1cCB3aXRoIGEgQ1BVIGVmZmVj dGl2ZWx5ICJzdHVjayIgZm9yIGEgbG9uZwp0aW1lLCBub3QgdGFraW5nIGludGVycnVwdHMsIGlu Y2x1ZGluZyB0aG9zZSByb3V0ZWQgdG8gaGlnaGVyIHByaW9yaXR5CmxldmVscyAoaWUuIGh5cGVy dmlzb3IgZXRjLi4uKS4gVGhpcyBpcyBwcm9ibGVtYXRpYy4gQSBjb21wbGV0aW9uCnBvbGxpbmcg bWVjaGFuaXNtIGlzIHByZWZlcmFibGUgc28gdGhhdCBvbmNlIGNhbiBzdGlsbCBoYW5kbGUgc3Vj aCB3b3JrCndoaWxlIHdhaXRpbmcgYnV0IGlzIGhhcmQgdG8gYXJjaGl0ZWN0L2ltcGxlbWVudCBw cm9wZXJseSB3aGVuIGRvbmUgYXMKImluc3RydWN0aW9ucyIgc2luY2UgdGhleSBjYW4gaGFwcGVu IGNvbmN1cnJlbnRseSBmcm9tIG11bHRpcGxlCmNvbnRleHRzLiBJdCdzIGVhc2llciB3aXRoIE1N SU8gYnV0IHRoYXQgaGFzIG90aGVyIGlzc3Vlcy4KCiAgICogSXQgaW50cm9kdWNlcyByYWNlcyB3 aXRoIGFueXRoaW5nIHRoYXQgZG9lcyBTVyB3YWxrIG9mIHBhZ2UKdGFibGVzLiBGb3IgZXhhbXBs ZSBNTUlPIGVtdWxhdGlvbiBieSBhIGh5cGVydmlzb3IgY2Fubm90IGJlIGRvbmUgcmFjZS0KZnJl ZSBpZiB0aGUgZ3Vlc3QgY2FuIGRvIGl0cyBvd24gYnJvYWRjYXN0IGludmFsaWRhdGlvbnMgYW5k IHRoZQpoeXBlcnZpc29yIGhhcyB0byB3YWxrIHRoZSBndWVzdCBwYWdlIHRhYmxlcyB0byB0cmFu c2xhdGUuIEkgY2FuCmVsYWJvcmF0ZSBpZiByZXF1ZXN0ZWQuCgogICAqIFRob3NlIGludmFsaWRh dGlvbnMgbmVlZCB0byBhbHNvIHRhcmdldCBuZXN0IGFnZW50cyB0aGF0IGNhbiBob2xkCnRyYW5z bGF0aW9ucywgc3VjaCBhcyBJT01NVXMgdGhhdCBjYW4gb3BlcmF0ZSBpbiB1c3IgY29udGV4dHMg ZXRjLi4uClN1Y2ggSU9NTVVzIGNhbiB0YWtlIGEgVkVSWSBMT05HIHRpbWUgdG8gcHJvY2VzcyBp bnZhbGlkYXRpb25zLAplc3BlY2lhbGx5IGlmIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gY2hlY2tl ZCBvdXQgYnkgZGV2aWNlcyBzdWNoIGFzClBDSWUgZGV2aWNlcyB1c2luZyBBVFMuIFNvbWUgR1BV cyBmb3IgZXhhbXBsZSBjYW4gaGl0IGEgd29yc3QgY2FzZSBvZgpodW5kcmVkcyBvZiAqbWlsbGlz ZWNvbmRzKiB0byBwcm9jZXNzIGEgVExCIGludmFsaWRhdGlvbi4KCiAtIE5vdyBmb3IgdGhlIHBy b3Bvc2VkIHNjaGVtZS4gSSByZWFsbHkgZG9uJ3QgbGlrZSBpbnRyb2R1Y2luZyBhICpuZXcqCndh eSBvZiB0YWdnaW5nIGFuIGFkZHJlc3Mgc3BhY2UgdXNpbmcgdGhlIFBQTi4gSXQncyBhIGhhY2su IFRoZSByaWdodAp3YXkgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGV4aXN0aW5nIGNvbnRleHQgdGFn cyBhcmUgYmlnIGVub3VnaCB0byBub3QKcmVxdWlyZSByZS11c2UgYW5kIHRodXMgY2FuIGJlIHRy ZWF0ZWQgYXMgZ2xvYmFsIGNvbnRleHQgdGFncyBieSB0aGUKaHlwZXJ2aXNvciBhbmQgT1MuIElF LiBoYXZlIGJpZyBlbm91Z2ggVk1JRHMgYW5kIEFTSURzIHRoYXQgZWFjaApydW5uaW5nIFZNIGNh biBoYXZlIGEgZ2xvYmFsIHN0YWJsZSBWTUlEIGFuZCBlYWNoIHByb2Nlc3Mgd2l0aGluIGEKZ2l2 ZW4gVk0gY2FuIGhhdmUgYSBnbG9iYWwgKHdpdGhpbiB0aGF0IFZNKSBBU0lEIGluc3RlYWQgb2Yg cGxheWluZwpyZWFsbG9jYXRpb24gb2YgQVNJRCB0cmlja3MgYXQgY29udGV4dCBzd2l0Y2ggKHRo YXQncyB2ZXJ5IGluZWZmaWNpZW50CmFueXdheSwgc28gdGhhdCBzaG91bGQgYmUgZml4ZWQgZm9y IGFueXRoaW5nIHRoYXQgY2xhaW1zIHBlcmZvcm1hbmNlCmFuZCBzY2FsYWJpbGl0eSkuCgpOb3cg YWxsIG9mIHRoZXNlIHRoaW5ncyBjYW4gcHJvYmFibHkgaGF2ZSBzb2x1dGlvbnMgYnV0IGV4cGVy aWVuY2UKZG9lc24ndCBzZWVtIHRvIGluZGljYXRlIHRoYXQgaXQncyByZWFsbHkgd29ydGh3aGls ZS4gV2UgYXJlIGJldHRlciBvZmYKbWFraW5nIHN1cmUgd2UgaGF2ZSBhIHJlYWxseSBmYXN0IElQ SSBwYXRoIHRvIHBlcmZvcm0gdGhvc2UgdmlhCmludGVycnVwdHMgYW5kIGxvY2FsbHkgdG8gdGhl IHRhcmdldHRlZCBDUFVzIElNSE8uCgpDaGVlcnMsCkJlbi4KCj4gCj4gT24gVGh1LCBTZXAgMTks IDIwMTkgYXQgNTozNiBBTSBHdW8gUmVuIDxndW9yZW5Aa2VybmVsLm9yZz4gd3JvdGU6Cj4gPiBG cm9tOiBHdW8gUmVuIDxyZW5fZ3VvQGMtc2t5LmNvbT4KPiA+IAo+ID4gVGhlIHBhdGNoIGlzIGZv ciBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtaXNhLW1hbnVhbAo+ID4gCj4gPiBUaGUg cHJvcG9zYWwgaGFzIGJlZW4gdGFsa2VkIGluIExQQy0yMDE5IFJJU0MtViBNQyByZWYgWzFdLiBI ZXJlIGlzCj4gPiB0aGUKPiA+IGZvcm1hbCBwYXRjaC4KPiA+IAo+ID4gSW50cm9kdWN0aW9uCj4g PiA9PT09PT09PT09PT0KPiA+IAo+ID4gVXNpbmcgdGhlIEhhcmR3YXJlIFRMQiBicm9hZGNhc3Qg aW52YWxpZGF0aW9uIGluc3RydWN0aW9uIHRvCj4gPiBtYWludGFpbiB0aGUKPiA+IHN5c3RlbSBU TEIgaXMgYSBnb29kIGNob2ljZSBhbmQgaXQnbGwgc2ltcGxpZnkgdGhlIHN5c3RlbSBzb2Z0d2Fy ZQo+ID4gZGVzaWduLgo+ID4gVGhlIHByb3Bvc2FsIGhvcGVzIHRvIGFkZCBhIGJyb2FkY2FzdCBt b2RlIHRvIHRoZSBzZmVuY2Uudm1hIGluIHRoZQo+ID4gcmlzY3YtcHJpdmlsZWdlIHNwZWNpZmlj YXRpb24uIFRvIHN1cHBvcnQgdGhlIHNmZW5jZS52bWEgYnJvYWRjYXN0Cj4gPiBtb2RlLAo+ID4g dGhlcmUgYXJlIHR3byBtb2RpZmljYXRpb24gaW50cm9kdWNlZCBiZWxvdzoKPiA+IAo+ID4gIDEp IEFkZCBQR0QuUFBOIChyb290IHBhZ2UgdGFibGUncyBQUE4pIGFzIHRoZSB1bmlxdWUgaWRlbnRp ZmllciBvZgo+ID4gdGhlCj4gPiAgICAgYWRkcmVzcyBzcGFjZSBpbiBhZGRpdGlvbiB0byBhc2lk L3ZtaWQuIENvbXBhcmVkIHRvIHRoZQo+ID4gZHluYW1pY2FsbHkKPiA+ICAgICBjaGFuZ2VkIGFz aWQvdm1pZCwgUEdELlBQTiBpcyBmaXhlZCB0aHJvdWdob3V0IHRoZSBhZGRyZXNzCj4gPiBzcGFj ZSBsaWZlCj4gPiAgICAgY3ljbGUuIFRoaXMgZmVhdHVyZSBlbmFibGVzIHVuaWZvcm0gYWRkcmVz cyBzcGFjZQo+ID4gaWRlbnRpZmljYXRpb24KPiA+ICAgICBiZXR3ZWVuIGRpZmZlcmVudCBUTEIg c3lzdGVtcyAoYWN0dWFsbHksIGl0J3MgZGlmZmljdWx0IHRvCj4gPiB1bmlmeSB0aGUKPiA+ICAg ICBhc2lkL3ZtaWQgYmV0d2VlbiB0aGUgQ1BVIHN5c3RlbSBhbmQgdGhlIElPTU1VIHN5c3RlbSwg YmVjYXVzZQo+ID4gdGhlaXIKPiA+ICAgICBtZWNoYW5pc21zIGFyZSBkaWZmZXJlbnQpCj4gPiAK PiA+ICAyKSBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIHNmZW5jZS52bWEgaW5zdHJ1Y3Rp b24gZnJvbQo+ID4gc3luY2hyb25vdXMKPiA+ICAgICBtb2RlIHRvIGFzeW5jaHJvbm91cyBtb2Rl LCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb21wbGV0aW9uIG9mCj4gPiB0aGUgVExCCj4gPiAgICAg b3BlcmF0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHdoZW4gdGhlIHNmZW5jZS52bWEgaW5zdHJ1Y3Rp b24KPiA+IHJldGlyZXMuCj4gPiAgICAgSXQgbmVlZHMgdG8gYmUgY29tcGxldGVkIGJ5IGNoZWNr aW5nIHRoZSBmbGFnIGJpdCBvbiB0aGUgaGFydC4KPiA+IFRoZQo+ID4gICAgIHNmZW5jZS52bWEg cmVxdWVzdCBmaW5pc2ggY2FuIG5vdGlmeSB0aGUgc29mdHdhcmUgYnkgZ2VuZXJhdGluZwo+ID4g YW4KPiA+ICAgICBpbnRlcnJ1cHQuIFRoaXMgZnVuY3Rpb24gYWxsZXZpYXRlcyB0aGUgbGFyZ2Ug ZGVsYXkgb2YgVExCCj4gPiBpbnZhbGlkYXRpb24KPiA+ICAgICBpbiB0aGUgUENJIEFUUyBzeXN0 ZW0uCj4gPiAKPiA+IEFkZCBTMS9TMi5QR0QuUFBOIGZvciBBU0lEL1ZNSUQKPiA+ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiA+IAo+ID4gUEdEIGlzIGdsb2JhbCBkaXJlY3Rvcnkg KGRlZmluZWQgaW4gbGludXgpIGFuZCBQUE4gaXMgcGFnZSBwaHlzaWNhbAo+ID4gbnVtYmVyCj4g PiAoZGVmaW5lZCBpbiByaXNjdi1zcGVjKS4gUEdELlBOTiBjb3JyZXNwb25kcyB0byB0aGUgcm9v dCBwYWdlIHRhYmxlCj4gPiBwb2ludGVyCj4gPiBvZiB0aGUgYWRkcmVzcyBzcGFjZSwgaS5lLiBt bS0+cGdkIChsaW51eCBjb25jZXB0KS4KPiA+IAo+ID4gSW4gQ1BVL0lPTU1VIFRMQiwgd2UgdXNl IGFzaWQvdm1pZCB0byBkaXN0aW5ndWlzaCB0aGUgYWRkcmVzcyBzcGFjZQo+ID4gb2YKPiA+IHBy b2Nlc3Mgb3IgdmlydHVhbCBtYWNoaW5lLiBEdWUgdG8gdGhlIGxpbWl0YXRpb24gb2YgaWQgZW5j b2RpbmcsCj4gPiBpdCBjYW4KPiA+IG9ubHkgcmVwcmVzZW50IGEgcGFydCh3aW5kb3cpIG9mIHRo ZSBhZGRyZXNzIHNwYWNlLiBTMS9TMi5QR0QuUFBOCj4gPiBhcmUgdGhlCj4gPiByb290IHBhZ2Ug dGFibGUncyBQUE5zIG9mIHRoZSBhZGRyZXNzIHNwYWNlcyBhbmQgUzEvUzIuUEdELlBQTiBhcmUK PiA+IHRoZQo+ID4gdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFkZHJlc3Mgc3BhY2VzLgo+ID4g Cj4gPiBGb3IgdGhlIENQVSBTTVAgc3lzdGVtLCB5b3UgY2FuIHVzZSBjb250ZXh0IHN3aXRjaCB0 byBwZXJmb3JtIHRoZQo+ID4gbmVjZXNzYXJ5Cj4gPiBzb2Z0d2FyZSBtZWNoYW5pc20gdG8gZW5z dXJlIHRoYXQgdGhlIGFzaWQvdm1pZCBvbiBhbGwgaGFydHMgaXMKPiA+IGNvbnNpc3RlbnQKPiA+ IChwbGVhc2UgcmVmZXIgdG8gdGhlIGFybTY0IGFzaWQgbWVjaGFuaXNtKS4gSW4gdGhpcyB3YXks IHRoZSBUTEIKPiA+IGJyb2FkY2FzdAo+ID4gaW52YWxpZGF0aW9uIGluc3RydWN0aW9uIGNhbiBk ZXRlcm1pbmUgdGhlIGFkZHJlc3Mgc3BhY2UgcHJvY2Vzc2VkCj4gPiBvbiBhbGwKPiA+IGhhcnRz IGJ5IGFzaWQvdm1pZC4KPiA+IAo+ID4gRGlmZmVyZW50IGZyb20gdGhlIENQVSBTTVAgc3lzdGVt LCB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBmb3IKPiA+IHRoZQo+ID4gRE1BLUlPTU1VIHN5 c3RlbSwgc28gdGhlIHVuaWZpY2F0aW9uIHdpdGggdGhlIENQVSBhc2lkL3ZtaWQgY2Fubm90Cj4g PiBiZQo+ID4gZ3VhcmFudGVlZC4gU28gd2UgbmVlZCBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0 aGUgYWRkcmVzcyBzcGFjZSB0bwo+ID4gZXN0YWJsaXNoIGEgY29tbXVuaWNhdGlvbiBicmlkZ2Ug YmV0d2VlbiB0aGUgVExCcyBvZiBkaWZmZXJlbnQKPiA+IHN5c3RlbXMuCj4gPiAKPiA+IFRoYXQg aXMgUEdELlBQTiAoZm9yIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvczogUzEvUzIuUEdELlBQTikK PiA+IAo+ID4gY3VycmVudDoKPiA+ICBzZmVuY2Uudm1hICByczEgPSB2YWRkciwgcnMyID0gYXNp ZAo+ID4gIGhmZW5jZS52dm1hIHJzMSA9IHZhZGRyLCByczIgPSBhc2lkCj4gPiAgaGZlbmNlLmd2 bWEgcnMxID0gZ2FkZHIsIHJzMiA9IHZtaWQKPiA+IAo+ID4gcHJvcG9zZWQ6Cj4gPiAgc2ZlbmNl LnZtYSAgcnMxID0gdmFkZHIsIHJzMiA9IG1vZGU6cHBuOmFzaWQKPiA+ICBoZmVuY2UudnZtYSBy czEgPSB2YWRkciwgcnMyID0gbW9kZTpwcG46YXNpZAo+ID4gIGhmZW5jZS5ndm1hIHJzMSA9IGdh ZGRyLCByczIgPSBtb2RlOnBwbjp2bWlkCj4gPiAKPiA+ICBtb2RlICAgICAgLSBicm9hZGNhc3Qg fCBsb2NhbAo+ID4gIHBwbiAgICAgICAtIHRoZSBQUE4gb2YgdGhlIGFkZHJlc3Mgc3BhY2Ugb2Yg dGhlIHJvb3QgcGFnZSB0YWJsZQo+ID4gIHZtaWQvYXNpZCAtIHRoZSB3aW5kb3cgaWRlbnRpZmll ciBvZiB0aGUgYWRkcmVzcyBzcGFjZQo+ID4gCj4gPiBBdCB0aGUgTGludXggUGx1bWJlciBDb25m ZXJlbmNlIDIwMTkgUklTQ1YtTUMsIHJlZjpbMV0sIHdlJ3ZlCj4gPiBzaG93ZWQgdHdvCj4gPiBJ T01NVSBleGFtcGxlcyB0byBleHBsYWluIGhvdyBpdCB3b3JrIHdpdGggaGFyZHdhcmUuCj4gPiAK PiA+IDEpIEluIGEgbGlnaHR3ZWlnaHQgSU9NTVUgc3lzdGVtICh1cCB0byA2NCBhZGRyZXNzIHNw YWNlcyksIHRoZQo+ID4gaGFyZHdhcmUKPiA+ICAgIGNvdWxkIGRpcmVjdGx5IGNvbnZlcnQgUEdE LlBQTiBpbnRvIERJRCAoSU9NTVUgQVNJRCkKPiA+IAo+ID4gMikgRm9yIHRoZSBQQ0kgQVRTIHNj ZW5hcmlvLCBpdHMgSU8gQVNJRC9WTUlEIGVuY29kaW5nIHNwYWNlIGNhbgo+ID4gc3VwcG9ydAo+ ID4gICAgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBhZGRyZXNzIHNwYWNlcy4gV2UgdXNlIHR3byBy ZXZlcnNlCj4gPiBtYXBwaW5nCj4gPiAgICB0YWJsZXMgdG8gbGV0IHRoZSBoYXJkd2FyZSB0cmFu c2xhdGUgUzEvUzIuUEdELlBQTiBpbnRvIElPCj4gPiBBU0lEL1ZNSUQuCj4gPiAKPiA+IEFTWU5D IEJST0FEQ0FTVCBTRkVOQ0UuVk1BCj4gPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ IAo+ID4gVG8gc3VwcG9ydCB0aGUgaGlnaCBsYXRlbmN5IGJyb2FkY2FzdCBzZmVuY2Uudm1hIG9w ZXJhdGlvbiBpbiB0aGUKPiA+IFBDSSBBVFMKPiA+IHVzYWdlIHNjZW5hcmlvLCB3ZSBtb2RpZnkg dGhlIHNmZW5jZS52bWEgZnJvbSBzeW5jaHJvbm91cyBtb2RlIHRvCj4gPiBhc3luY2hyb25vdXMg bW9kZS4gKEZvciBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBpZiBoYXJkd2FyZSBvbmx5Cj4gPiBp bXBsZW1lbnQKPiA+IHN5bmNocm9ub3VzIG1vZGUgYW5kIHNvZnR3YXJlIHN0aWxsIHdvcmsgaW4g YXN5bmNocm9ub3VzIG1vZGUpCj4gPiAKPiA+IFRvIGltcGxlbWVudCB0aGUgYXN5bmNocm9ub3Vz IG1vZGUsIDMgZmVhdHVyZXMgYXJlIGFkZGVkOgo+ID4gIDEpIHNzdGF0dXM6VExCSQo+ID4gICAg IEEgInN0YXR1cyBiaXQgLSBUTEJJIiBpcyBhZGRlZCB0byB0aGUgc3N0YXR1cyByZWdpc3Rlci4g VGhlCj4gPiBUTEJJIHN0YXR1cwo+ID4gICAgIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIHN0 aWxsIG91dHN0YW5kaW5nIHNmZW5jZS52bWEKPiA+IHJlcXVlc3RzIG9uIHRoZQo+ID4gICAgIGN1 cnJlbnQgaGFydC4KPiA+ICAgICBWYWx1ZToKPiA+ICAgICAgIDE6IHNmZW5jZS52bWEgcmVxdWVz dHMgYXJlIG5vdCBjb21wbGV0ZWQuCj4gPiAgICAgICAwOiBhbGwgc2ZlY2Uudm1hIHJlcXVlc3Rz IGNvbXBsZXRlZCwgcmVxdWVzdCBxdWV1ZSBpcyBlbXB0eS4KPiA+IAo+ID4gIDIpIHNzdGF0dXM6 VExCSUMKPiA+ICAgICBBICJjb250cm9sIGJpdHMgLSBUTEJJQyIgaXMgYWRkZWQgdG8gc3N0YXR1 cyByZWdpc3Rlci4gVGhlCj4gPiBUTEJJQyBjb250cm9sCj4gPiAgICAgYml0cyBhcmUgY29udHJv bGxlZCBieSBzb2Z0d2FyZS4KPiA+ICAgICAiV3JpdGUgMSIgd2lsbCB0cmlnZ2VyIHRoZSBjdXJy ZW50IGhhcnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlCj4gPiBhcmUgc3RpbGwKPiA+ICAgICBvdXRz dGFuZGluZyBzZmVuY2Uudm1hIHJlcXVlc3RzLiBJZiB0aGVyZSBhcmUgdW5maW5pc2hlZAo+ID4g cmVxdWVzdHMsIGFuCj4gPiAgICAgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gdGhl IHJlcXVlc3QgaXMgY29tcGxldGVkLAo+ID4gbm90aWZ5aW5nIHRoZQo+ID4gICAgIHNvZnR3YXJl IHRoYXQgYWxsIG9mIHRoZSBjdXJyZW50IHNmZW5jZS52bWEgcmVxdWVzdHMgaGF2ZSBiZWVuCj4g PiBjb21wbGV0ZWQuCj4gPiAgICAgIldyaXRlIDAiIHdpbGwgY2F1c2Ugbm90aGluZy4KPiA+IAo+ ID4gIDMpIHN1cGVydmlzb3IgaW50ZXJydXB0IHJlZ2lzdGVyIChzaXAgJiBzaWUpOlRMQkkgZmlu aXNoIGludGVycnVwdAo+ID4gICAgIEEgcGVyLWhhcnQgaW50ZXJydXB0IGlzIGFkZGVkIHRvIHN1 cGVydmlzb3IgaW50ZXJydXB0Cj4gPiByZWdpc3RlcnMuCj4gPiAgICAgV2hlbiBhbGwgc2ZlbmNl LnZtYSByZXF1ZXN0cyBhcmUgY29tcGxldGVkIGFuZCBzc3RhdHVzOlRMQklDCj4gPiBoYXMgYmVl bgo+ID4gICAgIHRyaWdnZXJlZCwgaGFydCB3aWxsIHJlY2VpdmUgYSBUTEJJIGZpbmlzaCBpbnRl cnJ1cHQuIEp1c3QgbGlrZQo+ID4gdGltZXIsCj4gPiAgICAgc29mdHdhcmUgYW5kIGV4dGVybmFs IGludGVycnVwdCdzIGRlZmluaXRpb24gaW4gc2lwICYgc2llLgo+ID4gCj4gPiBGYWtlIGNvZGU6 Cj4gPiAKPiA+IGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcikgewo+ID4gICAgIGFzaWQgPSBjcHVf YXNpZCh2bWEtPnZtX21tKTsKPiA+ICAgICBwcG4gPSBQRk5fRE9XTih2bWEtPnZtX21tLT5wZ2Qp Owo+ID4gCj4gPiAgICAgc2ZlbmNlLnZtYSAoYWRkciwgMXxQUE5fT0ZGU0VUKHBwbil8YXNpZCk7 IC8vMS4gc3RhcnQgcmVxdWVzdAo+ID4gCj4gPiAgICAgd2hpbGUoc3N0YXR1czpUTEJJKSBpZiAo dGltZV9vdXQoKSA+IDFtcykgYnJlYWs7IC8vMi4gbG9vcAo+ID4gY2hlY2sKPiA+IAo+ID4gICAg IHdoaWxlIChzc3RhdHVzOlRMQkkpIHsKPiA+ICAgICAgICAgLi4uCj4gPiAgICAgICAgIHNldCBz c3RhdHVzOlRMQklDOwo+ID4gICAgICAgICB3YWl0X1RMQklfZmluaXNoX2ludGVycnVwdCgpOyAv LzMuIHdhaXQgaXJxLCBpb19zY2hlZHVsZQo+ID4gICAgIH0KPiA+IH0KPiA+IAo+ID4gSGVyZSB3 ZSBnaXZlIDIgbGV2ZWwgY2hlY2s6Cj4gPiAgMSkgbG9vcCBjaGVjayBzc3RhdHVzOlRMQkksIENQ VSBjb3VsZCByZXNwb25zZSBJbnRlcnJ1cHQuCj4gPiAgMikgc2V0IHNzdGF0dXM6VExCSUMgYW5k IHdhaXQgZm9yIGlycSwgQ1BVIHNjaGVkdWxlIG91dCBmb3Igb3RoZXIKPiA+IHRhc2suCj4gPiAK PiA+IEFDRS1EVk0gRXhhbXBsZQo+ID4gPT09PT09PT09PT09PT09Cj4gPiAKPiA+IEhvbmVzdGx5 LCAiYnJvYWRjYXN0aW5nIGFkZHIsIGFzaWQsIHZtaWQsIFMxL1MyLlBHRC5QUE4gdG8KPiA+IGlu dGVyY29ubmVjdHMiCj4gPiBhbmQgIkFTWU5DIFNGRU5DRS5WTUEiIGNvdWxkIGJlIGltcGxlbWVu dGVkIGJ5IEFDRS1EVk0gcHJvdG9jb2wgcmVmCj4gPiBbMl0uCj4gPiAKPiA+IFRoZXJlIGFyZSAz IHR5cGVzIG9mIHRyYW5zYWN0aW9ucyBpbiBEVk06Cj4gPiAKPiA+ICAtIERWTSBvcGVyYXRpb24K PiA+ICAgIFNlbmQgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBpbnRlcmNvbm5lY3QsIGluY2x1ZGlu ZyBhZGRyLCBhc2lkLAo+ID4gICAgUzEuUEdELlBQTiwgdm1pZCwgUzIuUEdELlBQTi4KPiA+IAo+ ID4gIC0gRFZNIHN5bmNocm9uaXphdGlvbgo+ID4gICAgQ2hlY2sgdGhhdCBhbGwgRFZNIG9wZXJh dGlvbnMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSWYgbm90LCBpdAo+ID4gd2lsbCB1c2UKPiA+ICAg IHN0YXRlIG1hY2hpbmUgdG8gd2FpdCBEVk0gY29tcGxldGUgcmVxdWVzdHMuCj4gPiAKPiA+ICAt IERWTSBjb21wbGV0ZQo+ID4gICAgUmV0dXJuIHRyYW5zYWN0aW9uIGZyb20gY29tcG9uZW50cywg ZWc6IElPTU1VLiBJZiBoYXJ0IGhhcwo+ID4gcmVjZWl2ZWQgYWxsCj4gPiAgICBEVk0gY29tcGxl dGVzIHdoaWNoIGFyZSB0cmlnZ2VyZWQgYnkgc2ZlbmNlLnZtYSBpbnN0cnVjdGlvbnMgYW5kCj4g PiAgICAic3N0YXR1czpUTEJJQyIgaGFzIGJlZW4gc2V0LCBhIFRMQkkgZmluaXNoIGludGVycnVw dCBpcwo+ID4gdHJpZ2dlcmVkLgo+ID4gCj4gPiAoQWN0dWFsbHksIHdlIGRvIG5vdCBuZWVkIHRv IGltcGxlbWVudCB0aGUgYWJvdmUgZnVuY3Rpb25zIHN0cmljdGx5Cj4gPiAgYWNjb3JkaW5nIHRv IHRoZSBBQ0Ugc3BlY2lmaWNhdGlvbiA6UCApCj4gPiAKPiA+ICAxOiBodHRwczovL3d3dy5saW51 eHBsdW1iZXJzY29uZi5vcmcvZXZlbnQvNC9jb250cmlidXRpb25zLzMwNy8KPiA+ICAyOiBBTUJB IEFYSSBhbmQgQUNFIFByb3RvY29sIFNwZWNpZmljYXRpb24gLSBEaXN0cmlidXRlZCBWaXJ0dWFs Cj4gPiBNZW1vcnkKPiA+ICAgICBUcmFuc2FjdGlvbnMiCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6 IEd1byBSZW4gPHJlbl9ndW9AYy1za3kuY29tPgo+ID4gUmV2aWV3ZWQtYnk6IExpIEZlaXRlbmcg PGZlaXRlbmdfbGlAYy1za3kuY29tPgo+ID4gLS0tCj4gPiAgc3JjL2h5cGVydmlzb3IudGV4IHwg IDQzICsrKysrKysrLS0tLS0tLQo+ID4gIHNyYy9zdXBlcnZpc29yLnRleCB8IDE1NQo+ID4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiA+ICAy IGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL3NyYy9oeXBlcnZpc29yLnRleCBiL3NyYy9oeXBlcnZpc29yLnRleAo+ ID4gaW5kZXggNDdiOTBiMi4uMzcxODgxOSAxMDA2NDQKPiA+IC0tLSBhL3NyYy9oeXBlcnZpc29y LnRleAo+ID4gKysrIGIvc3JjL2h5cGVydmlzb3IudGV4Cj4gPiBAQCAtMTA5NCwxNSArMTA5NCwx NSBAQCBUaGUgaHlwZXJ2aXNvciBleHRlbnNpb24gYWRkcyB0d28gbmV3Cj4gPiBwcml2aWxlZ2Vk IGZlbmNlIGluc3RydWN0aW9ucy4KPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e29wY29kZX0gXFwK PiA+ICBcaGxpbmUKPiA+ICA3ICYgNSAmIDUgJiAzICYgNSAmIDcgXFwKPiA+IC1IRkVOQ0UuR1ZN QSAmIHZtaWQgJiBnYWRkciAmIFBSSVYgJiAwICYgU1lTVEVNIFxcCj4gPiAtSEZFTkNFLlZWTUEg JiBhc2lkICYgdmFkZHIgJiBQUklWICYgMCAmIFNZU1RFTSBcXAo+ID4gK0hGRU5DRS5HVk1BICYg bW9kZTpwcG46dm1pZCAmIGdhZGRyICYgUFJJViAmIDAgJiBTWVNURU0gXFwKPiA+ICtIRkVOQ0Uu VlZNQSAmIG1vZGU6cHBuOmFzaWQgJiB2YWRkciAmIFBSSVYgJiAwICYgU1lTVEVNIFxcCj4gPiAg XGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gCj4gPiAgVGhlIGh5cGVydmlzb3Ig bWVtb3J5LW1hbmFnZW1lbnQgZmVuY2UgaW5zdHJ1Y3Rpb25zLCBIRkVOQ0UuR1ZNQQo+ID4gYW5k Cj4gPiAgSEZFTkNFLlZWTUEsIGFyZSB2YWxpZCBvbmx5IGluIEhTLW1vZGUgd2hlbiB7XHR0IG1z dGF0dXN9LlRWTT0wLAo+ID4gb3IgaW4gTS1tb2RlCj4gPiAgKGlycmVzcGVjdGl2ZSBvZiB7XHR0 IG1zdGF0dXN9LlRWTSkuCj4gPiAtVGhlc2UgaW5zdHJ1Y3Rpb25zIHBlcmZvcm0gYSBmdW5jdGlv biBzaW1pbGFyIHRvIFNGRU5DRS5WTUEKPiA+ICtUaGVzZSBpbnN0cnVjdGlvbnMgcGVyZm9ybSBh IGZ1bmN0aW9uIHNpbWlsYXIgdG8gU0ZFTkNFLlZNQQo+ID4gKGJyb2FkY2FzdC9sb2NhbCkKPiA+ ICAoU2VjdGlvbn5ccmVme3NlYzpzZmVuY2Uudm1hfSksIGV4Y2VwdCBhcHBseWluZyB0byB0aGUg Z3Vlc3QtCj4gPiBwaHlzaWNhbAo+ID4gIG1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJl cyBjb250cm9sbGVkIGJ5IENTUiB7XHR0IGhnYXRwfQo+ID4gKEhGRU5DRS5HVk1BKQo+ID4gIG9y IHRoZSBWUy1sZXZlbCBtZW1vcnktbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgY29udHJvbGxl ZCBieQo+ID4gQ1NSIHtcdHQgdnNhdHB9Cj4gPiBAQCAtMTEzNiwxMSArMTEzNiwxMCBAQCBBbiBI RkVOQ0UuVlZNQSBpbnN0cnVjdGlvbiBhcHBsaWVzIG9ubHkgdG8KPiA+IGEgc2luZ2xlIHZpcnR1 YWwgbWFjaGluZSwgaWRlbnRpZmllZAo+ID4gIGJ5IHRoZSBzZXR0aW5nIG9mIHtcdHQgaGdhdHB9 LlZNSUQgd2hlbiBIRkVOQ0UuVlZNQSBleGVjdXRlcy4KPiA+ICBcZW5ke2NvbW1lbnRhcnl9Cj4g PiAKPiA+IC1XaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFhMRU4tMTpBU0lETUFY IG9mIHRoZSB2YWx1ZQo+ID4gaGVsZCBpbiB7XGVtCj4gPiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9y IGZ1dHVyZSB1c2UgYW5kIHNob3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUKPiA+IGFuZCBpZ25v cmVkCj4gPiAtYnkgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuCj4gPiAtRnVydGhlcm1vcmUsIGlm IEFTSURMRU5+JDwkfkFTSURNQVgsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbAo+ID4gaWdub3Jl IGJpdHMKPiA+IC1BU0lETUFYLTE6QVNJRExFTiBvZiB0aGUgdmFsdWUgaGVsZCBpbiB7XGVtIHJz Mn0uCj4gPiArV2hlbiB7XGVtIHJzMn0kXG5lcSR7XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5m b3JtYXRpb25zOiBtb2RlLAo+ID4gcHBuLCBhc2lkLgo+ID4gKzEpIG1vZGUgY29udHJvbCBIRkVO Q0UuVlZNQSBicm9hZGNhc3Qgb3Igbm90Lgo+ID4gKzIpIHBwbiBpcyB0aGUgcm9vdCBwYWdlIHRh bGJlJ3MgUFBOIG9mIHRoZSBhc2lkIGFkZHJlc3Mgc3BhY2UuCj4gPiArMykgYXNpZCBpcyB0aGUg aWRlbnRpZmllciBvZiBwcm9jZXNzIGluIHZpcnR1YWwgbWFjaGluZS4KPiA+IAo+ID4gIFxiZWdp bntjb21tZW50YXJ5fQo+ID4gIFNpbXBsZXIgaW1wbGVtZW50YXRpb25zIG9mIEhGRU5DRS5WVk1B IGNhbiBpZ25vcmUgdGhlIGd1ZXN0Cj4gPiB2aXJ0dWFsIGFkZHJlc3MgaW4KPiA+IEBAIC0xMTY4 LDExICsxMTY3LDEwIEBAIHBoeXNpY2FsIGFkZHJlc3NlcyBpbiBQTVAgYWRkcmVzcyByZWdpc3Rl cnMKPiA+IChTZWN0aW9uflxyZWZ7c2VjOnBtcH0pIGFuZCBpbiBwYWdlCj4gPiAgdGFibGUgZW50 cmllcyAoU2VjdGlvbnMgXHJlZntzZWM6c3YzMn0sIFxyZWZ7c2VjOnN2Mzl9LAo+ID4gYW5kflxy ZWZ7c2VjOnN2NDh9KS4KPiA+ICBcZW5ke2NvbW1lbnRhcnl9Cj4gPiAKPiA+IC1XaGVuIHtcZW0g cnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFhMRU4tMTpWTUlETUFYIG9mIHRoZSB2YWx1ZQo+ID4g aGVsZCBpbiB7XGVtCj4gPiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIHNo b3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUKPiA+IGFuZCBpZ25vcmVkCj4gPiAtYnkgY3VycmVu dCBpbXBsZW1lbnRhdGlvbnMuCj4gPiAtRnVydGhlcm1vcmUsIGlmIFZNSURMRU5+JDwkflZNSURN QVgsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbAo+ID4gaWdub3JlIGJpdHMKPiA+IC1WTUlETUFY LTE6Vk1JRExFTiBvZiB0aGUgdmFsdWUgaGVsZCBpbiB7XGVtIHJzMn0uCj4gPiArV2hlbiB7XGVt IHJzMn0kXG5lcSR7XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5mb3JtYXRpb25zOiBtb2RlLAo+ ID4gdm1pZCwgcHBuLgo+ID4gKzEpIG1vZGUgY29udHJvbCBIRkVOQ0UuR1ZNQSBicm9hZGNhc3Qg b3Igbm90Lgo+ID4gKzIpIHBwbiBpcyB0aGUgcm9vdCBwYWdlIHRhbGJlJ3MgUFBOIG9mIHRoZSB2 bWlkIGFkZHJlc3Mgc3BhY2UuCj4gPiArMykgdm1pZCBpcyB0aGUgaWRlbnRpZmllciBvZiB2aXJ0 dWFsIG1hY2hpbmUuCj4gPiAKPiA+ICBcYmVnaW57Y29tbWVudGFyeX0KPiA+ICBTaW1wbGVyIGlt cGxlbWVudGF0aW9ucyBvZiBIRkVOQ0UuR1ZNQSBjYW4gaWdub3JlIHRoZSBndWVzdAo+ID4gcGh5 c2ljYWwgYWRkcmVzcyBpbgo+ID4gQEAgLTE1NjcsMjEgKzE1NjUsMjIgQEAgcmVnaXN0ZXIuCj4g PiAgXHN1YnNlY3Rpb257TWVtb3J5LU1hbmFnZW1lbnQgRmVuY2VzfQo+ID4gCj4gPiAgVGhlIGJl aGF2aW9yIG9mIHRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIGlzIGFmZmVjdGVkIGJ5IHRoZQo+ ID4gY3VycmVudAo+ID4gLXZpcnR1YWxpemF0aW9uIG1vZGUgVi4gIFdoZW4gVj0wLCB0aGUgdmly dHVhbC1hZGRyZXNzIGFyZ3VtZW50IGlzCj4gPiBhbiBIUy1sZXZlbAo+ID4gLXZpcnR1YWwgYWRk cmVzcywgYW5kIHRoZSBBU0lEIGFyZ3VtZW50IGlzIGFuIEhTLWxldmVsIEFTSUQuCj4gPiArdmly dHVhbGl6YXRpb24gbW9kZSBWLiAgV2hlbiBWPTAsIHRoZSByczEgYXJndW1lbnQgaXMgYW4gSFMt bGV2ZWwKPiA+ICt2aXJ0dWFsIGFkZHJlc3MsIGFuZCB0aGUgcnMyIGFyZ3VtZW50IGlzIGFuIEhT LWxldmVsIEFTSUQgYW5kIHJvb3QKPiA+IHBhZ2UgdGFibGUncyBQUE4uCj4gPiAgVGhlIGluc3Ry dWN0aW9uIG9yZGVycyBzdG9yZXMgb25seSB0byBIUy1sZXZlbCBhZGRyZXNzLXRyYW5zbGF0aW9u IAo+ID4gc3RydWN0dXJlcwo+ID4gIHdpdGggc3Vic2VxdWVudCBIUy1sZXZlbCBhZGRyZXNzIHRy YW5zbGF0aW9ucy4KPiA+IAo+ID4gLVdoZW4gVj0xLCB0aGUgdmlydHVhbC1hZGRyZXNzIGFyZ3Vt ZW50IHRvIFNGRU5DRS5WTUEgaXMgYSBndWVzdAo+ID4gdmlydHVhbAo+ID4gLWFkZHJlc3Mgd2l0 aGluIHRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSBBU0lEIGFyZ3VtZW50Cj4g PiBpcyBhIFZTLWxldmVsCj4gPiAtQVNJRCB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNo aW5lLgo+ID4gK1doZW4gVj0xLCB0aGUgcnMxIGFyZ3VtZW50IHRvIFNGRU5DRS5WTUEgaXMgYSBn dWVzdCB2aXJ0dWFsCj4gPiArYWRkcmVzcyB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNo aW5lLCBhbmQgdGhlIHJzMiBhcmd1bWVudAo+ID4gaXMgYSBWUy1sZXZlbAo+ID4gK0FTSUQgYW5k IHJvb3QgcGFnZSB0YWJsZSdzIFBQTiB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5l Lgo+ID4gIFRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBW TUlEIGZpZWxkIG9mIENTUgo+ID4ge1x0dCBoZ2F0cH0sCj4gPiAtYW5kIHRoZSBlZmZlY3RpdmUg QVNJRCBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSB0aGUgY29tYmluYXRpb24gb2YKPiA+IHRoaXMg Vk1JRAo+ID4gLXdpdGggdGhlIFZTLWxldmVsIEFTSUQuCj4gPiArYW5kIHRoZSBlZmZlY3RpdmUg QVNJRCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIGNhbiBiZSBjb25zaWRlcmVkCj4gPiB0byBi ZSB0aGUKPiA+ICtjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdz IFBQTiB3aXRoIHRoZSBWUy0KPiA+IGxldmVsIEFTSUQgYW5kCj4gPiArcm9vdCBwYWdlIHRhYmxl J3MgUFBOLgo+ID4gIFRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIG9yZGVycyBzdG9yZXMgb25s eSB0byB0aGUgVlMtbGV2ZWwKPiA+ICBhZGRyZXNzLXRyYW5zbGF0aW9uIHN0cnVjdHVyZXMgd2l0 aCBzdWJzZXF1ZW50IFZTLWxldmVsIGFkZHJlc3MKPiA+IHRyYW5zbGF0aW9ucwo+ID4gLWZvciB0 aGUgc2FtZSB2aXJ0dWFsIG1hY2hpbmUsIGkuZS4sIG9ubHkgd2hlbiB7XHR0IGhnYXRwfS5WTUlE IGlzCj4gPiB0aGUgc2FtZSBhcwo+ID4gLXdoZW4gdGhlIFNGRU5DRS5WTUEgZXhlY3V0ZWQuCj4g PiArZm9yIHRoZSBzYW1lIHZpcnR1YWwgbWFjaGluZSwgaS5lLiwgb25seSB3aGVuIHtcdHQgaGdh dHB9LlZNSUQgYW5kCj4gPiB7XFx0dCBoZ2F0cH0uUFBOIGlzCj4gPiArdGhlIHNhbWUgYXMgd2hl biB0aGUgU0ZFTkNFLlZNQSBleGVjdXRlZC4KPiA+IAo+ID4gIEh5cGVydmlzb3IgaW5zdHJ1Y3Rp b25zIEhGRU5DRS5HVk1BIGFuZCBIRkVOQ0UuVlZNQSBwcm92aWRlCj4gPiBhZGRpdGlvbmFsCj4g PiAgbWVtb3J5LW1hbmFnZW1lbnQgZmVuY2VzIHRvIGNvbXBsZW1lbnQgU0ZFTkNFLlZNQS4KPiA+ IGRpZmYgLS1naXQgYS9zcmMvc3VwZXJ2aXNvci50ZXggYi9zcmMvc3VwZXJ2aXNvci50ZXgKPiA+ IGluZGV4IGJhM2NlZDUuLjI4NzdiN2EgMTAwNjQ0Cj4gPiAtLS0gYS9zcmMvc3VwZXJ2aXNvci50 ZXgKPiA+ICsrKyBiL3NyYy9zdXBlcnZpc29yLnRleAo+ID4gQEAgLTQ3LDEwICs0NywxMiBAQCBy ZWdpc3RlciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudAo+ID4gb3BlcmF0 aW5nIHN0YXRlLgo+ID4gIFxiZWdpbntjZW50ZXJ9Cj4gPiAgXHNldGxlbmd0aHtcdGFiY29sc2Vw fXs0cHR9Cj4gPiAgXHNjYWxlYm94ezAuOTV9ewo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtjV2NjY2Nj V2NjY2NXY2N9Cj4gPiArXGJlZ2lue3RhYnVsYXJ9e2NjY1djY2NjY1djY2NjV2NjfQo+ID4gIFxc Cj4gPiAgXGluc3RiaXR7MzF9ICYKPiA+IC1caW5zdGJpdHJhbmdlezMwfXsyMH0gJgo+ID4gK1xp bnN0Yml0ezMwfSAmCj4gPiArXGluc3RiaXR7Mjl9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezI4fXsy MH0gJgo+ID4gIFxpbnN0Yml0ezE5fSAmCj4gPiAgXGluc3RiaXR7MTh9ICYKPiA+ICBcaW5zdGJp dHsxN30gJgo+ID4gQEAgLTY2LDYgKzY4LDggQEAgcmVnaXN0ZXIga2VlcHMgdHJhY2sgb2YgdGhl IHByb2Nlc3NvcidzIGN1cnJlbnQKPiA+IG9wZXJhdGluZyBzdGF0ZS4KPiA+ICBcaW5zdGJpdHsw fSBcXAo+ID4gIFxobGluZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1NEfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17VExCSX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9e1RMQklD fSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsx fXtjfH17TVhSfSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtTVU19ICYKPiA+IEBAIC04Miw3 ICs4Niw3IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50 Cj4gPiBvcGVyYXRpbmcgc3RhdGUuCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0KPiA+ ICBcXAo+ID4gIFxobGluZQo+ID4gLTEgJiAxMSAmIDEgJiAxICYgMSAmIDIgJiAyICYgNCAmIDEg JiAxICYgMSAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICsxICYgMSAmIDEgJiAxMCAmIDEgJiAxICYg MSAmIDIgJiAyICYgNCAmIDEgJiAxICYgMSAmIDEgJiAzICYgMSAmIDEKPiA+IFxcCj4gPiAgXGVu ZHt0YWJ1bGFyfX0KPiA+ICBcZW5ke2NlbnRlcn0KPiA+ICB9Cj4gPiBAQCAtOTUsMTAgKzk5LDEy IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50Cj4gPiBv cGVyYXRpbmcgc3RhdGUuCj4gPiAge1xmb290bm90ZXNpemUKPiA+ICBcYmVnaW57Y2VudGVyfQo+ ID4gIFxzZXRsZW5ndGh7XHRhYmNvbHNlcH17NHB0fQo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtjTUZT Y2NjY30KPiA+ICtcYmVnaW57dGFidWxhcn17Y2NjTUZTY2NjY30KPiA+ICBcXAo+ID4gIFxpbnN0 Yml0e1NYTEVOLTF9ICYKPiA+IC1caW5zdGJpdHJhbmdle1NYTEVOLTJ9ezM0fSAmCj4gPiArXGlu c3RiaXR7U1hMRU4tMn0gJgo+ID4gK1xpbnN0Yml0e1NYTEVOLTN9ICYKPiA+ICtcaW5zdGJpdHJh bmdle1NYTEVOLTR9ezM0fSAmCj4gPiAgXGluc3RiaXRyYW5nZXszM317MzJ9ICYKPiA+ICBcaW5z dGJpdHJhbmdlezMxfXsyMH0gJgo+ID4gIFxpbnN0Yml0ezE5fSAmCj4gPiBAQCAtMTA3LDYgKzEx Myw4IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50Cj4g PiBvcGVyYXRpbmcgc3RhdGUuCj4gPiAgIFxcCj4gPiAgXGhsaW5lCj4gPiAgXG11bHRpY29sdW1u ezF9e3xjfH17U0R9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtUTEJJfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17VExCSUN9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJp fSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtVWExbMTowXX0gJgo+ID4gIFxtdWx0aWNvbHVt bnsxfXtjfH17XHdwcml9ICYKPiA+IEBAIC0xMTUsNyArMTIzLDcgQEAgcmVnaXN0ZXIga2VlcHMg dHJhY2sgb2YgdGhlIHByb2Nlc3NvcidzIGN1cnJlbnQKPiA+IG9wZXJhdGluZyBzdGF0ZS4KPiA+ ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4gPiAgIFxcCj4gPiAgXGhsaW5lCj4gPiAt MSAmIFNYTEVOLTM1ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPiA+ICsxICYgMSAmIDEgJiBT WExFTi0zNyAmIDIgJiAxMiAmIDEgJiAxICYgMSAmIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4g IFxiZWdpbnt0YWJ1bGFyfXtjV1dGY2NjY1djY30KPiA+ICBcXAo+ID4gQEAgLTE1Miw2ICsxNjAs MTcgQEAgcmVnaXN0ZXIga2VlcHMgdHJhY2sgb2YgdGhlIHByb2Nlc3NvcidzCj4gPiBjdXJyZW50 IG9wZXJhdGluZyBzdGF0ZS4KPiA+ICBcbGFiZWx7c3N0YXR1c3JlZ30KPiA+ICBcZW5ke2ZpZ3Vy ZSp9Cj4gPiAKPiA+ICtUaGUgVExCSSAocmVhZC1vbmx5KSBiaXQgaW5kaWNhdGVzIHRoYXQgYW55 IGFzeW5jIHNmZW5jZS52bWEKPiA+IG9wZXJhdGlvbnMgYXJlCj4gPiArc3RpbGwgcGVuZGVkIG9u IHRoZSBoYXJ0LiBUaGUgdmFsdWU6MCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vCj4gPiBzZmVuY2Uu dm1hCj4gPiArb3BlcmF0aW9ucyBwZW5kaW5nIGFuZCB2YWx1ZToxIG1lYW5zIHRoYXQgdGhlcmUg YXJlIHN0aWxsCj4gPiBzZmVuY2Uudm1hIG9wZXJhdGlvbnMKPiA+ICtwZW5kaW5nIG9uIHRoZSBo YXJ0Lgo+ID4gKwo+ID4gK1doZW4gdGhlIHNzdGF0dXM6VExCSUMgYml0IGlzIHdyaXR0ZW4gMSwg aXQgdHJpZ2dlcnMgdGhlIGhhcmR3YXJlCj4gPiB0byBjaGVjayBpZgo+ID4gK3RoZXJlIGFyZSBh bnkgVExCIGludmFsaWRhdGUgb3BlcmF0aW9ucyBiZWluZyBwZW5kZWQuIFdoZW4gYWxsCj4gPiBv cGVyYXRpb25zIGFyZQo+ID4gK2ZpbmlzaGVkLCBhIFRMQiBJbnZhbGlkYXRlIGZpbmlzaCBpbnRl cnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQKPiA+ICsoc2VlIFNlY3Rpb25+XHJlZntzaXByZWd9KS4g V2hlbiB0aGUgc3N0YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbgo+ID4gMCwgaXQgd2lsbAo+ID4g K2NhdXNlIG5vdGhpbmcuIFJlYWRpbmcgc3N0YXR1czpUTEJJQyBiaXQgd2lsbCBhbGF3YXlzIHJl dHVybiAwLgo+ID4gKwo+ID4gIFRoZSBTUFAgYml0IGluZGljYXRlcyB0aGUgcHJpdmlsZWdlIGxl dmVsIGF0IHdoaWNoIGEgaGFydCB3YXMKPiA+IGV4ZWN1dGluZyBiZWZvcmUKPiA+ICBlbnRlcmlu ZyBzdXBlcnZpc29yIG1vZGUuICBXaGVuIGEgdHJhcCBpcyB0YWtlbiwgU1BQIGlzIHNldCB0byAw Cj4gPiBpZiB0aGUgdHJhcAo+ID4gIG9yaWdpbmF0ZWQgZnJvbSB1c2VyIG1vZGUsIG9yIDEgb3Ro ZXJ3aXNlLiAgV2hlbiBhbiBTUkVUCj4gPiBpbnN0cnVjdGlvbgo+ID4gQEAgLTMyOSw4ICszNDgs MTAgQEAgU1hMRU4tYml0IHJlYWQvd3JpdGUgcmVnaXN0ZXIgY29udGFpbmluZwo+ID4gaW50ZXJy dXB0IGVuYWJsZSBiaXRzLgo+ID4gIHtcZm9vdG5vdGVzaXplCj4gPiAgXGJlZ2lue2NlbnRlcn0K PiA+ICBcc2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPiA+IC1cYmVnaW57dGFidWxhcn17S2NG Y0ZjY30KPiA+IC1caW5zdGJpdHJhbmdle1NYTEVOLTF9ezEwfSAmCj4gPiArXGJlZ2lue3RhYnVs YXJ9e0tjRmNGY0ZjY30KPiA+ICtcaW5zdGJpdHJhbmdle1NYTEVOLTF9ezE0fSAmCj4gPiArXGlu c3RiaXR7MTN9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezEyfXsxMH0gJgo+ID4gIFxpbnN0Yml0ezl9 ICYKPiA+ICBcaW5zdGJpdHJhbmdlezh9ezZ9ICYKPiA+ICBcaW5zdGJpdHs1fSAmCj4gPiBAQCAt MzM5LDYgKzM2MCw4IEBAIFNYTEVOLWJpdCByZWFkL3dyaXRlIHJlZ2lzdGVyIGNvbnRhaW5pbmcK PiA+IGludGVycnVwdCBlbmFibGUgYml0cy4KPiA+ICBcaW5zdGJpdHswfSBcXAo+ID4gIFxobGlu ZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4gPiArXG11bHRpY29sdW1uezF9 e2N8fXtTVExCSVB9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtcd3ByaX0gJgo+ID4gIFxt dWx0aWNvbHVtbnsxfXtjfH17U0VJUH0gJgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9 ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSVB9ICYKPiA+IEBAIC0zNDYsNyArMzY5LDcg QEAgU1hMRU4tYml0IHJlYWQvd3JpdGUgcmVnaXN0ZXIgY29udGFpbmluZwo+ID4gaW50ZXJydXB0 IGVuYWJsZSBiaXRzLgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U1NJUH0gJgo+ID4gIFxtdWx0 aWNvbHVtbnsxfXtjfH17XHdwcml9IFxcCj4gPiAgXGhsaW5lCj4gPiAtU1hMRU4tMTAgJiAxICYg MyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICtTWExFTi0xNCAmIDEgJiAzICYgMSAmIDMgJiAxICYg MyAmIDEgJiAxIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gIH0K PiA+IEBAIC0zNTksOCArMzgyLDEwIEBAIFNYTEVOLTEwICYgMSAmIDMgJiAxICYgMyAmIDEgJiAx IFxcCj4gPiAge1xmb290bm90ZXNpemUKPiA+ICBcYmVnaW57Y2VudGVyfQo+ID4gIFxzZXRsZW5n dGh7XHRhYmNvbHNlcH17NHB0fQo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNjfQo+ID4gLVxp bnN0Yml0cmFuZ2V7U1hMRU4tMX17MTB9ICYKPiA+ICtcYmVnaW57dGFidWxhcn17S2NGY0ZjRmNj fQo+ID4gK1xpbnN0Yml0cmFuZ2V7U1hMRU4tMX17MTR9ICYKPiA+ICtcaW5zdGJpdHsxM30gJgo+ ID4gK1xpbnN0Yml0cmFuZ2V7MTJ9ezEwfSAmCj4gPiAgXGluc3RiaXR7OX0gJgo+ID4gIFxpbnN0 Yml0cmFuZ2V7OH17Nn0gJgo+ID4gIFxpbnN0Yml0ezV9ICYKPiA+IEBAIC0zNjksNiArMzk0LDgg QEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICBcaW5zdGJpdHswfSBc XAo+ID4gIFxobGluZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e2N8fXtTVExCSUV9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtcd3By aX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U0VJRX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsx fXtjfH17XHdwcml9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSUV9ICYKPiA+IEBAIC0z NzYsNyArNDAzLDcgQEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICBc bXVsdGljb2x1bW57MX17Y3x9e1NTSUV9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJp fSBcXAo+ID4gIFxobGluZQo+ID4gLVNYTEVOLTEwICYgMSAmIDMgJiAxICYgMyAmIDEgJiAxIFxc Cj4gPiArU1hMRU4tMTQgJiAxICYgMyAmIDEgJiAzICYgMSAmIDMgJiAxICYgMSBcXAo+ID4gIFxl bmR7dGFidWxhcn0KPiA+ICBcZW5ke2NlbnRlcn0KPiA+ICB9Cj4gPiBAQCAtNDEwLDYgKzQzNywx MiBAQCB3aGVuIHRoZSBTRUlFIGJpdCBpbiB0aGUge1x0dCBzaWV9IHJlZ2lzdGVyIGlzCj4gPiBj bGVhci4gIFRoZSBpbXBsZW1lbnRhdGlvbgo+ID4gIHNob3VsZCBwcm92aWRlIGZhY2lsaXRpZXMg dG8gbWFzaywgdW5tYXNrLCBhbmQgcXVlcnkgdGhlIGNhdXNlIG9mCj4gPiBleHRlcm5hbAo+ID4g IGludGVycnVwdHMuCj4gPiAKPiA+ICtBIHN1cGVydmlzb3ItbGV2ZWwgVExCIEludmFsaWRhdGUg ZmluaXNoIGludGVycnVwdCBpcyBwZW5kaW5nIGlmCj4gPiB0aGUgU1RMQklQIGJpdAo+ID4gK2lu IHRoZSB7XHR0IHNpcH0gcmVnaXN0ZXIgaXMgc2V0LiAgU3VwZXJ2aXNvci1sZXZlbCBUTEIgSW52 YWxpZGF0ZQo+ID4gZmluaXNoCj4gPiAraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGUg U1RMQklFIGJpdCBpbiB0aGUge1x0dCBzaWV9Cj4gPiByZWdpc3RlciBpcyBjbGVhci4KPiA+ICtX aGVuIGhhcnQgdGxiIGludmFsaWRhdGUgb3BlcmF0aW9ucyBhcmUgZmluaXNoZWQsIGhhcmR3YXJl IHdpbGwKPiA+IGNoYW5nZSBzc3RhdHVzOlRMQkkKPiA+ICtiaXQgZnJvbSAxIHRvIDAgYW5kIHRy aWdnZXIgVExCIEludmFsaWRhdGUgZmluaXNoIGludGVycnVwdC4KPiA+ICsKPiA+ICBcYmVnaW57 Y29tbWVudGFyeX0KPiA+ICBUaGUge1x0dCBzaXB9IGFuZCB7XHR0IHNpZX0gcmVnaXN0ZXJzIGFy ZSBzdWJzZXRzIG9mIHRoZSB7XHR0IG1pcH0KPiA+IGFuZCB7XHR0Cj4gPiAgbWllfSByZWdpc3Rl cnMuICBSZWFkaW5nIGFueSBmaWVsZCwgb3Igd3JpdGluZyBhbnkgd3JpdGFibGUgZmllbGQsCj4g PiBvZiB7XHR0Cj4gPiBAQCAtNTk4LDcgKzYzMSw5IEBAIHNvIGlzIG9ubHkgZ3VhcmFudGVlZCB0 byBob2xkIHN1cHBvcnRlZAo+ID4gZXhjZXB0aW9uIGNvZGVzLgo+ID4gICAgMSAgICAgICAgICYg NSAgICAgICAgICAgICAgICYgU3VwZXJ2aXNvciB0aW1lciBpbnRlcnJ1cHQgXFwKPiA+ICAgIDEg ICAgICAgICAmIDYtLTggICAgICAgICAgICAmIHtcZW0gUmVzZXJ2ZWR9IFxcCj4gPiAgICAxICAg ICAgICAgJiA5ICAgICAgICAgICAgICAgJiBTdXBlcnZpc29yIGV4dGVybmFsIGludGVycnVwdCBc XAo+ID4gLSAgMSAgICAgICAgICYgMTAtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwK PiA+ICsgIDEgICAgICAgICAmIDEwLS0xMSAgICAgICAgICAmIHtcZW0gUmVzZXJ2ZWR9IFxcCj4g PiArICAxICAgICAgICAgJiAxMiAgICAgICAgICAgICAgJiBTdXBlcnZpc29yIFRMQkkgZmluaXNo IGludGVycnVwdAo+ID4gXFwKPiA+ICsgIDEgICAgICAgICAmIDEzLS0xNSAgICAgICAgICAmIHtc ZW0gUmVzZXJ2ZWR9IFxcCj4gPiAgICAxICAgICAgICAgJiAkXGdlJDE2ICAgICAgICAgJiB7XGVt IEF2YWlsYWJsZSBmb3IgcGxhdGZvcm0gdXNlfQo+ID4gXFwgXGhsaW5lCj4gPiAgICAwICAgICAg ICAgJiAwICAgICAgICAgICAgICAgJiBJbnN0cnVjdGlvbiBhZGRyZXNzIG1pc2FsaWduZWQgXFwK PiA+ICAgIDAgICAgICAgICAmIDEgICAgICAgICAgICAgICAmIEluc3RydWN0aW9uIGFjY2VzcyBm YXVsdCBcXAo+ID4gQEAgLTg4NCw3ICs5MTksNyBAQCBwcm92aWRlZC4KPiA+ICBcbXVsdGljb2x1 bW57MX17Y3x9e29wY29kZX0gXFwKPiA+ICBcaGxpbmUKPiA+ICA3ICYgNSAmIDUgJiAzICYgNSAm IDcgXFwKPiA+IC1TRkVOQ0UuVk1BICYgYXNpZCAmIHZhZGRyICYgUFJJViAmIDAgJiBTWVNURU0g XFwKPiA+ICtTRkVOQ0UuVk1BICYgbW9kZTpwcG46YXNpZCAmIHZhZGRyICYgTE9DQUwgJiAwICYg U1lTVEVNIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gCj4gPiBA QCAtODk5LDIxICs5MzQsNzAgQEAgZnJvbSB0aGF0IGhhcnQgdG8gdGhlIG1lbW9yeS1tYW5hZ2Vt ZW50IGRhdGEKPiA+IHN0cnVjdHVyZXMuCj4gPiAgRnVydGhlciBkZXRhaWxzIG9uIHRoZSBiZWhh dmlvciBvZiB0aGlzIGluc3RydWN0aW9uIGFyZQo+ID4gIGRlc2NyaWJlZCBpbiBTZWN0aW9uflxy ZWZ7dmlydC1jb250cm9sfSBhbmQgU2VjdGlvbn5ccmVme3BtcC0KPiA+IHZtZW19Lgo+ID4gCj4g PiArU0ZFTkNFLlZNQSBpcyBkZWZpbmVkIGFzIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIGlu c3RydWN0aW9uLAo+ID4gd2hpY2ggbWVhbnMKPiA+ICt0aGF0IHRoZSBUTEIgb3BlcmF0aW9uIGlz IG5vdCBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIHdoZW4gdGhlCj4gPiBpbnN0cnVjdGlvbiByZXRp cmVzLgo+ID4gK1NvZnR3YXJlIG5lZWQgY2hlY2sgc3N0YXR1czpUTEJJIHRvIGRldGVybWluZSBh bGwgVExCIG9wZXJhdGlvbnMKPiA+IGNvbXBsZXRlLgo+ID4gK1RoZSBzc3RhdHVzOlRMQkkgZGVz Y3JpYmVkIGluIFNlY3Rpb25+XHJlZntzc3RhdHVzfS4gV2hlbiBoYXJkd2FyZQo+ID4gY2hhbmdl Cj4gPiArc3N0YXR1czpUTEJJIGJpdCBmcm9tIDEgdG8gMCwgdGhlIFRMQiBJbnZhbGlkYXRlIGZp bmlzaCBpbnRlcnJ1cHQKPiA+IHdpbGwgYmUKPiA+ICt0cmlnZ2VyZWQuCj4gPiArCj4gPiAgXGJl Z2lue2NvbW1lbnRhcnl9Cj4gPiAtVGhlIFNGRU5DRS5WTUEgaXMgdXNlZCB0byBmbHVzaCBhbnkg bG9jYWwgaGFyZHdhcmUgY2FjaGVzIHJlbGF0ZWQKPiA+IHRvCj4gPiArVGhlIFNGRU5DRS5WTUEg aXMgdXNlZCB0byBmbHVzaCBhbnkgbG9jYWwvcmVtb3RlIGhhcmR3YXJlIGNhY2hlcwo+ID4gcmVs YXRlZCB0bwo+ID4gIGFkZHJlc3MgdHJhbnNsYXRpb24uICBJdCBpcyBzcGVjaWZpZWQgYXMgYSBm ZW5jZSByYXRoZXIgdGhhbiBhIFRMQgo+ID4gIGZsdXNoIHRvIHByb3ZpZGUgY2xlYW5lciBzZW1h bnRpY3Mgd2l0aCByZXNwZWN0IHRvIHdoaWNoCj4gPiBpbnN0cnVjdGlvbnMKPiA+ICBhcmUgYWZm ZWN0ZWQgYnkgdGhlIGZsdXNoIG9wZXJhdGlvbiBhbmQgdG8gc3VwcG9ydCBhIHdpZGVyIHZhcmll dHkKPiA+IG9mCj4gPiAgZHluYW1pYyBjYWNoaW5nIHN0cnVjdHVyZXMgYW5kIG1lbW9yeS1tYW5h Z2VtZW50IHNjaGVtZXMuIAo+ID4gU0ZFTkNFLlZNQQo+ID4gIGlzIGFsc28gdXNlZCBieSBoaWdo ZXIgcHJpdmlsZWdlIGxldmVscyB0byBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlCj4gPiAtd3JpdGVz IGFuZCB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXJkd2FyZS4KPiA+ICt3cml0ZXMgYW5kIHRo ZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlLiBUaGVyZSBpcyBhIG1vZGUgYml0Cj4gPiB0 byBkZXRlcm1pbmUKPiA+ICtzZmVuY2Uudm1hIHdvdWxkIGJyb2FkY2FzdCBvbiBpbnRlcmNvbm5l Y3Qgb3Igbm90Lgo+ID4gIFxlbmR7Y29tbWVudGFyeX0KPiA+IAo+ID4gLVNGRU5DRS5WTUEgb3Jk ZXJzIG9ubHkgdGhlIGxvY2FsIGhhcnQncyBpbXBsaWNpdCByZWZlcmVuY2VzIHRvIHRoZQo+ID4g LW1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4KPiA+ICtcYmVnaW57ZmlndXJlfVto IV0KPiA+ICt7XGZvb3Rub3Rlc2l6ZQo+ID4gK1xiZWdpbntjZW50ZXJ9Cj4gPiArXGJlZ2lue3Rh YnVsYXJ9e2NAe31FQHt9S30KPiA+ICtcaW5zdGJpdHszMX0gJgo+ID4gK1xpbnN0Yml0cmFuZ2V7 MzB9ezl9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezh9ezB9IFxcCj4gPiArXGhsaW5lCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17e1x0dCBNT0RFfX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9 e3tcdHQgUFBOIChyb290IHBhZ2UgdGFibGUpfX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9 e3tcdHQgQVNJRH19IFxcCj4gPiArXGhsaW5lCj4gPiArMSAmIDIyICYgOSBcXAo+ID4gK1xlbmR7 dGFidWxhcn0KPiA+ICtcZW5ke2NlbnRlcn0KPiA+ICt9Cj4gPiArXHZzcGFjZXstMC4xaW59Cj4g PiArXGNhcHRpb257UlYzMiBzZmVuY2Uudm1hIHJzMiBmb3JtYXQufQo+ID4gK1xsYWJlbHtydjMy c2F0cH0KPiA+ICtcZW5ke2ZpZ3VyZX0KPiA+ICsKPiA+ICtcYmVnaW57ZmlndXJlfVtoIV0KPiA+ ICt7XGZvb3Rub3Rlc2l6ZQo+ID4gK1xiZWdpbntjZW50ZXJ9Cj4gPiArXGJlZ2lue3RhYnVsYXJ9 e0B7fVNAe31UQHt9VX0KPiA+ICtcaW5zdGJpdHJhbmdlezYzfXs2MH0gJgo+ID4gK1xpbnN0Yml0 cmFuZ2V7NTl9ezE2fSAmCj4gPiArXGluc3RiaXRyYW5nZXsxNX17MH0gXFwKPiA+ICtcaGxpbmUK PiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IE1PREV9fSAmCj4gPiArXG11bHRpY29sdW1u ezF9e3xjfH17e1x0dCBQUE4gKHJvb3QgcGFnZSB0YWJsZSl9fSAmCj4gPiArXG11bHRpY29sdW1u ezF9e3xjfH17e1x0dCBBU0lEfX0gXFwKPiA+ICtcaGxpbmUKPiA+ICs0ICYgNDQgJiAxNiBcXAo+ ID4gK1xlbmR7dGFidWxhcn0KPiA+ICtcZW5ke2NlbnRlcn0KPiA+ICt9Cj4gPiArXHZzcGFjZXst MC4xaW59Cj4gPiArXGNhcHRpb257UlY2NCBzZmVuY2Uudm1hIHJzMiBmb3JtYXQsIGZvciBNT0RF IHZhbHVlcywgb25seSBoaWdoZXN0Cj4gPiBiaXQ6NjMgaXMKPiA+ICt2YWxpZCBhbmQgb3RoZXJz IGFyZSByZXNlcnZlZC59Cj4gPiArXGxhYmVse3J2NjRzYXRwfQo+ID4gK1xlbmR7ZmlndXJlfQo+ ID4gCj4gPiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4gPiAtQ29uc2VxdWVudGx5LCBvdGhlciBoYXJ0 cyBtdXN0IGJlIG5vdGlmaWVkIHNlcGFyYXRlbHkgd2hlbiB0aGUKPiA+ICtUaGUgbW9kZSdzIGhp Z2hlc3QgYml0IGNvdWxkIGNvbnRyb2wgc2ZlbmNlLnZtYSBiZWhhdmlvciB3aXRoCj4gPiAxOmJy b2FkY2FzdCBvciAwOmxvY2FsLgo+ID4gK0lmIG9ubHkgaGF2ZSBtb2RlOmxvY2FsLCBvdGhlciBo YXJ0cyBtdXN0IGJlIG5vdGlmaWVkIHNlcGFyYXRlbHkKPiA+IHdoZW4gdGhlCj4gPiAgbWVtb3J5 LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBtb2RpZmllZC4KPiA+ICBPbmUg YXBwcm9hY2ggaXMgdG8gdXNlIDEpCj4gPiAgYSBsb2NhbCBkYXRhIGZlbmNlIHRvIGVuc3VyZSBs b2NhbCB3cml0ZXMgYXJlIHZpc2libGUgZ2xvYmFsbHksCj4gPiB0aGVuCj4gPiBAQCAtOTI4LDgg KzEwMTIsMTcgQEAgbW9kaWZpZWQgZm9yIGEgc2luZ2xlIGFkZHJlc3MgbWFwcGluZyAoaS5lLiwK PiA+IG9uZSBwYWdlIG9yIHN1cGVycGFnZSksIHtcZW0gcnMxfQo+ID4gIGNhbiBzcGVjaWZ5IGEg dmlydHVhbCBhZGRyZXNzIHdpdGhpbiB0aGF0IG1hcHBpbmcgdG8gZWZmZWN0IGEKPiA+IHRyYW5z bGF0aW9uCj4gPiAgZmVuY2UgZm9yIHRoYXQgbWFwcGluZyBvbmx5LiAgRnVydGhlcm1vcmUsIGZv ciB0aGUgY29tbW9uIGNhc2UKPiA+IHRoYXQgdGhlCj4gPiAgdHJhbnNsYXRpb24gZGF0YSBzdHJ1 Y3R1cmVzIGhhdmUgb25seSBiZWVuIG1vZGlmaWVkIGZvciBhIHNpbmdsZQo+ID4gYWRkcmVzcy1z cGFjZQo+ID4gLWlkZW50aWZpZXIsIHtcZW0gcnMyfSBjYW4gc3BlY2lmeSB0aGUgYWRkcmVzcyBz cGFjZS4gIFRoZSBiZWhhdmlvcgo+ID4gb2YKPiA+IC1TRkVOQ0UuVk1BIGRlcGVuZHMgb24ge1xl bSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPiA+ICtpZGVudGlmaWVyLCB7XGVtIHJz Mn0gY2FuIHNwZWNpZnkgdGhlIGFkZHJlc3Mgc3BhY2Ugd2l0aCB7XHR0Cj4gPiBzYXRwfSBmb3Jt YXQKPiA+ICt3aGljaCBpbmNsdWRlIGFzaWQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBpbmZv cm1hdGlvbi4KPiA+ICsKPiA+ICtcYmVnaW57Y29tbWVudGFyeX0KPiA+ICtXZSB1c2UgQVNJRCBh bmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHRvIGRldGVybWluZSBhZGRyZXNzIHNwYWNlCj4gPiBh bmQgdGhlIGZvcm1hdAo+ID4gK3N0b3JlZCBpbiByczIgaXMgc2ltaWxhciB3aXRoIHtcdHQgc2F0 cH0gZGVzY3JpYmVkIGluCj4gPiBTZWN0aW9uflxyZWZ7c2VjOnNhdHB9Lgo+ID4gK0FTSUQgYXJl IHVzZWQgYnkgbG9jYWwgaGFydHMgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBvZiB0aGUgYXNp ZAo+ID4gYXJlIHVzZWQgYnkKPiA+ICtvdGhlciBkaWZmZXJlbnQgVExCIHN5c3RlbXMsIGVnOiBJ T01NVS4KPiA+ICtcZW5ke2NvbW1lbnRhcnl9Cj4gPiArCj4gPiArVGhlIGJlaGF2aW9yIG9mIFNG RU5DRS5WTUEgZGVwZW5kcyBvbiB7XGVtIHJzMX0gYW5kIHtcZW0gcnMyfSBhcwo+ID4gZm9sbG93 czoKPiA+IAo+ID4gIFxiZWdpbntpdGVtaXplfQo+ID4gIFxpdGVtIElmIHtcZW0gcnMxfT17XHR0 IHgwfSBhbmQge1xlbSByczJ9PXtcdHQgeDB9LCB0aGUgZmVuY2UKPiA+IG9yZGVycyBhbGwKPiA+ IEBAIC05MzksMjMgKzEwMzIsMTggQEAgU0ZFTkNFLlZNQSBkZXBlbmRzIG9uIHtcZW0gcnMxfSBh bmQge1xlbQo+ID4gcnMyfSBhcyBmb2xsb3dzOgo+ID4gICAgICAgIGFsbCByZWFkcyBhbmQgd3Jp dGVzIG1hZGUgdG8gYW55IGxldmVsIG9mIHRoZSBwYWdlIHRhYmxlcywKPiA+IGJ1dCBvbmx5Cj4g PiAgICAgICAgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIGlkZW50aWZpZWQgYnkgaW50ZWdlciByZWdp c3RlciB7XGVtCj4gPiByczJ9Lgo+ID4gICAgICAgIEFjY2Vzc2VzIHRvIHtcZW0gZ2xvYmFsfSBt YXBwaW5ncyAoc2VlCj4gPiBTZWN0aW9uflxyZWZ7c2VjOnRyYW5zbGF0aW9ufSkKPiA+IC0gICAg ICBhcmUgbm90IG9yZGVyZWQuCj4gPiArICAgICAgYXJlIG5vdCBvcmRlcmVkLiBUaGUgbW9kZSBm aWVsZCBpbiByczIgaXMgZGV0ZXJtaW5lCj4gPiBicm9hZGNhc3Qgb3IgbG9jYWwuCj4gPiAgXGl0 ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0IHgwfSwgdGhl IGZlbmNlCj4gPiBvcmRlcnMKPiA+ICAgICAgICBvbmx5IHJlYWRzIGFuZCB3cml0ZXMgbWFkZSB0 byB0aGUgbGVhZiBwYWdlIHRhYmxlIGVudHJ5Cj4gPiBjb3JyZXNwb25kaW5nCj4gPiAgICAgICAg dG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiB7XGVtIHJzMX0sIGZvciBhbGwgYWRkcmVzcyBzcGFj ZXMuCj4gPiAgXGl0ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfSRc bmVxJHtcdHQgeDB9LCB0aGUKPiA+IGZlbmNlCj4gPiAgICAgICAgb3JkZXJzIG9ubHkgcmVhZHMg YW5kIHdyaXRlcyBtYWRlIHRvIHRoZSBsZWFmIHBhZ2UgdGFibGUKPiA+IGVudHJ5Cj4gPiAgICAg ICAgY29ycmVzcG9uZGluZyB0byB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9y IHRoZQo+ID4gYWRkcmVzcwo+ID4gLSAgICAgIHNwYWNlIGlkZW50aWZpZWQgYnkgaW50ZWdlciBy ZWdpc3RlciB7XGVtIHJzMn0uCj4gPiArICAgICAgc3BhY2UgaWRlbnRpZmllZCBieSBpbnRlZ2Vy IHJlZ2lzdGVyIHtcZW0gcnMyfS4gVGhlIG1vZGUKPiA+IGZpZWxkIGluIHJzMgo+ID4gKyAgICAg IGlzIGRldGVybWluZSBicm9hZGNhc3Qgb3IgbG9jYWwuCj4gPiAgICAgICAgQWNjZXNzZXMgdG8g Z2xvYmFsIG1hcHBpbmdzIGFyZSBub3Qgb3JkZXJlZC4KPiA+ICBcZW5ke2l0ZW1pemV9Cj4gPiAK PiA+IC1XaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFNYTEVOLTE6QVNJRE1BWCBv ZiB0aGUgdmFsdWUKPiA+IGhlbGQgaW4ge1xlbQo+ID4gLXJzMn0gYXJlIHJlc2VydmVkIGZvciBm dXR1cmUgdXNlIGFuZCBzaG91bGQgYmUgemVyb2VkIGJ5IHNvZnR3YXJlCj4gPiBhbmQgaWdub3Jl ZAo+ID4gLWJ5IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zLiAgRnVydGhlcm1vcmUsIGlmIEFTSURM RU5+JDwkfkFTSURNQVgsCj4gPiB0aGUKPiA+IC1pbXBsZW1lbnRhdGlvbiBzaGFsbCBpZ25vcmUg Yml0cyBBU0lETUFYLTE6QVNJRExFTiBvZiB0aGUgdmFsdWUKPiA+IGhlbGQgaW4ge1xlbQo+ID4g LXJzMn0uCj4gPiAtCj4gPiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4gPiAgU2ltcGxlciBpbXBsZW1l bnRhdGlvbnMgY2FuIGlnbm9yZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0KPiA+IHJzMX0g YW5kCj4gPiAgdGhlIEFTSUQgdmFsdWUgaW4ge1xlbSByczJ9IGFuZCBhbHdheXMgcGVyZm9ybSBh IGdsb2JhbCBmZW5jZS4KPiA+IEBAIC05OTQsNyArMTA4Miw3IEBAIGNhbiBleGVjdXRlIHRoZSBz YW1lIFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb24KPiA+IHdoaWxlIGEgZGlmZmVyZW50IEFTSUQgaXMg bG9hZGVkCj4gPiAgaW50byB7XHR0IHNhdHB9LCBwcm92aWRlZCB0aGUgbmV4dCB0aW1lIHtcdHQg c2F0cH0gaXMgbG9hZGVkIHdpdGgKPiA+IHRoZSByZWN5Y2xlZAo+ID4gIEFTSUQsIGl0IGlzIHNp bXVsdGFuZW91c2x5IGxvYWRlZCB3aXRoIHRoZSBuZXcgcGFnZSB0YWJsZS4KPiA+IAo+ID4gLVxp dGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIEFTSURzLCBvciBzb2Z0 d2FyZQo+ID4gY2hvb3NlcyB0bwo+ID4gK1xpdGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vz IG5vdCBwcm92aWRlIEFTSURzIGFuZCBQUE5zLCBvcgo+ID4gc29mdHdhcmUgY2hvb3NlcyB0bwo+ ID4gIGFsd2F5cyB1c2UgQVNJRCAwLCB0aGVuIGFmdGVyIGV2ZXJ5IHtcdHQgc2F0cH0gd3JpdGUs IHNvZnR3YXJlCj4gPiBzaG91bGQgZXhlY3V0ZQo+ID4gIFNGRU5DRS5WTUEgd2l0aCB7XGVtIHJz MX09e1x0dCB4MH0uICBJbiB0aGUgY29tbW9uIGNhc2UgdGhhdCBubwo+ID4gZ2xvYmFsCj4gPiAg dHJhbnNsYXRpb25zIGhhdmUgYmVlbiBtb2RpZmllZCwge1xlbSByczJ9IHNob3VsZCBiZSBzZXQg dG8gYQo+ID4gcmVnaXN0ZXIgb3RoZXIgdGhhbgo+ID4gQEAgLTEwMDMsMTMgKzEwOTEsMTQgQEAg bm90IGZsdXNoZWQuCj4gPiAKPiA+ICBcaXRlbSBJZiBzb2Z0d2FyZSBtb2RpZmllcyBhIG5vbi1s ZWFmIFBURSwgaXQgc2hvdWxkIGV4ZWN1dGUKPiA+IFNGRU5DRS5WTUEgd2l0aAo+ID4gIHtcZW0g cnMxfT17XHR0IHgwfS4gIElmIGFueSBQVEUgYWxvbmcgdGhlIHRyYXZlcnNhbCBwYXRoIGhhZCBp dHMgRwo+ID4gYml0IHNldCwKPiA+IC17XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3 aXNlLCB7XGVtIHJzMn0gc2hvdWxkIGJlIHNldCB0bwo+ID4gdGhlIEFTSUQgZm9yCj4gPiAtd2hp Y2ggdGhlIHRyYW5zbGF0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLgo+ID4gK3tcZW0gcnMyfSBtdXN0 IGJlIHtcdHQgeDB9OyBvdGhlcndpc2UsIHtcZW0gcnMyfSBzaG91bGQgYmUgc2V0IHRvCj4gPiB0 aGUgQVNJRCBhbmQKPiA+ICtyb290IHBhZ2UgdGFibGUncyBQUE4gZm9yIHdoaWNoIHRoZSB0cmFu c2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPiA+IAo+ID4gIFxpdGVtIElmIHNvZnR3YXJlIG1v ZGlmaWVzIGEgbGVhZiBQVEUsIGl0IHNob3VsZCBleGVjdXRlCj4gPiBTRkVOQ0UuVk1BIHdpdGgg e1xlbQo+ID4gIHJzMX0gc2V0IHRvIGEgdmlydHVhbCBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZS4g IElmIGFueSBQVEUgYWxvbmcKPiA+IHRoZSB0cmF2ZXJzYWwKPiA+ICBwYXRoIGhhZCBpdHMgRyBi aXQgc2V0LCB7XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3aXNlLAo+ID4ge1xlbSBy czJ9Cj4gPiAtc2hvdWxkIGJlIHNldCB0byB0aGUgQVNJRCBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0 aW9uIGlzIGJlaW5nCj4gPiBtb2RpZmllZC4KPiA+ICtzaG91bGQgYmUgc2V0IHRvIHRoZSBBU0lE IGFuZCByb290IHBhZ2UgdGFibGUncyBQUE4gZm9yIHdoaWNoIHRoZQo+ID4gdHJhbnNsYXRpb24K PiA+ICtpcyBiZWluZyBtb2RpZmllZC4KPiA+IAo+ID4gIFxpdGVtIEZvciB0aGUgc3BlY2lhbCBj YXNlcyBvZiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhCj4gPiBsZWFmIFBURSBhbmQK PiA+ICBjaGFuZ2luZyBhbiBpbnZhbGlkIFBURSB0byBhIHZhbGlkIGxlYWYsIHNvZnR3YXJlIG1h eSBjaG9vc2UgdG8KPiA+IGV4ZWN1dGUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlvbW11IG1haWxpbmcgbGlzdAppb21tdUBsaXN0cy5saW51eC1mb3Vu ZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0 aW5mby9pb21tdQ== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6A2A9C3A5A6 for ; Fri, 20 Sep 2019 02:30:20 +0000 (UTC) Received: from mm01.cs.columbia.edu (mm01.cs.columbia.edu [128.59.11.253]) by mail.kernel.org (Postfix) with ESMTP id D578A21928 for ; Fri, 20 Sep 2019 02:30:19 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D578A21928 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.crashing.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvmarm-bounces@lists.cs.columbia.edu Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 3D1C34A6FA; Thu, 19 Sep 2019 22:30:19 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9ycy935mNfoc; Thu, 19 Sep 2019 22:30:16 -0400 (EDT) Received: from mm01.cs.columbia.edu (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 76B344A6E9; Thu, 19 Sep 2019 22:30:16 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mm01.cs.columbia.edu (Postfix) with ESMTP id 2D38F4A6E4 for ; Thu, 19 Sep 2019 22:30:15 -0400 (EDT) X-Virus-Scanned: at lists.cs.columbia.edu Received: from mm01.cs.columbia.edu ([127.0.0.1]) by localhost (mm01.cs.columbia.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6kKNAhzmm6aT for ; Thu, 19 Sep 2019 22:30:11 -0400 (EDT) Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) by mm01.cs.columbia.edu (Postfix) with ESMTPS id 9EFF44A6E2 for ; Thu, 19 Sep 2019 22:30:11 -0400 (EDT) Received: from localhost (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id x8K2RJ7O003665; Thu, 19 Sep 2019 21:27:20 -0500 Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma From: Benjamin Herrenschmidt To: Andrew Waterman , Guo Ren Date: Fri, 20 Sep 2019 12:27:19 +1000 In-Reply-To: References: <1568896556-28769-1-git-send-email-guoren@kernel.org> X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 Cc: catalin.marinas@arm.com, palmer@sifive.com, will.deacon@arm.com, Atish.Patra@wdc.com, julien.grall@arm.com, gary@garyguo.net, linux-riscv@lists.infradead.org, kvmarm@lists.cs.columbia.edu, jean-philippe@linaro.org, linux-csky@vger.kernel.org, rppt@linux.ibm.com, Guo Ren , jacob.jun.pan@linux.intel.com, tech-privileged@lists.riscv.org, marc.zyngier@arm.com, linux-arm-kernel@lists.infradead.org, feiteng_li@c-sky.com, Anup.Patel@wdc.com, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, dwmw2@infradead.org X-BeenThere: kvmarm@lists.cs.columbia.edu X-Mailman-Version: 2.1.14 Precedence: list List-Id: Where KVM/ARM decisions are made List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: kvmarm-bounces@lists.cs.columbia.edu Sender: kvmarm-bounces@lists.cs.columbia.edu T24gVGh1LCAyMDE5LTA5LTE5IGF0IDA5OjA0IC0wNzAwLCBBbmRyZXcgV2F0ZXJtYW4gd3JvdGU6 Cj4gVGhpcyBuZWVkcyB0byBiZSBkaXNjdXNzZWQgYW5kIGRlYmF0ZWQgYXQgbGVuZ3RoOyBwcm9w b3NpbmcgZWRpdHMgdG8KPiB0aGUgc3BlYyBhdCB0aGlzIHN0YWdlIGlzIHB1dHRpbmcgdGhlIGNh cnQgYmVmb3JlIHRoZSBob3JzZSEKPiAKPiBXZSBzaG91bGRu4oCZdCBjaGFuZ2UgdGhlIGRlZmlu aXRpb24gb2YgdGhlIGV4aXN0aW5nIFNGRU5DRS5WTUEKPiBpbnN0cnVjdGlvbiB0byBhY2NvbXBs aXNoIHRoaXMuIEl04oCZcyBhbHNvIG5vdCBhYnVuZGFudGx5IGNsZWFyIHRvIG1lCj4gdGhhdCB0 aGlzIHNob3VsZCBiZSBhbiBpbnN0cnVjdGlvbjogVExCIHNob290ZG93biBsb29rcyBtb3JlIGxp a2UKPiBNTUlPLgoKUXVpdGUgYSBmZXcgcG9pbnRzIHRvIG1ha2UgaGVyZToKCiAtIFRMQiBzaG9v dGRvd24gYXMgTU1JTyBpcyBhIHByb2JsZW0gd2hlbiB5b3Ugc3RhcnQgdHJ5aW5nIHRvIGRvIGl0 CmRpcmVjdGx5IGZyb20gZ3Vlc3RzICh3aGljaCBpcyB2ZXJ5IGRlc2lyYWJsZSkuIEkgY2FuIGVs YWJvcmF0ZSBpZiB5b3UKd2FudCwgYnV0IGl0IGdlbmVyYWxseSBib2lscyBkb3duIHRvIGhhdmlu ZyBhIHBpbGUgb2YgY29waWVzIG9mIHRoZQpNTUlPIHJlc291cmNlcyB0byBhc3NpZ24gdG8gZ3Vl c3RzIGFuZCBoYXZpbmcgdG8gY29uc3RhbnRseSBjaGFuZ2UKbWFwcGluZ3Mgd2hpY2ggaXMgdW5y ZWFsaXN0aWMuCgogLSBJIGdlbmVyYWxseSBoYXZlIHZlcnkgc2VyaW91cyBkb3VidHMgYXMgdG8g dGhlIHZhbHVlIG9mIGRvaW5nCmJyb2FkY2FzdCBUTEIgc2hvb3Rkb3ducyBpbiBIVy4gSSB3ZW50 IGF0IGxlbmdodCBhYm91dCBpdCBkdXJpbmcgTGludXgKUGx1bWJlcnMgQ29uZmVyZW5jZSwgYnV0 IEknbGwgdHJ5IHRvIHN1bW1hcmlzZSBoZXJlLCBmcm9tIG15IGV4cGVyaWVuY2UKYmFjayBhdCBJ Qk0gd29ya2luZyBvbiBQT1dFUi4gSW4gbm8gc3BlY2lhbCBvcmRlcjoKCiAgICogSXQgZG9lc24n dCBzY2FsZSB3ZWxsLiBZb3UgaGF2ZSB0byBkcmFpbiBhbGwgdGhlIHRhcmdldCBDUFUgcXVldWVz Cm9mIGFscmVhZHkgdHJhbnNsYXRlZCBsb2FkIHN0b3Jlcywga2VlcCBvcmRlcmluZywgZXRjLi4u IGl0IGNhdXNlcyBhCmdpYW50IGZhYnJpYyB0cmFmZmljIGphbS4gRXhwZXJpZW5jZSBoYXMgc2hv d24gdGhhdCBvbiBzb21lIFBPV0VSCnN5c3RlbXMsIGl0IGJlY29tZXMgZXh0cmVtZWx5IGV4cGVu c2l2ZS4KCiAgICogU29tZSBPUyBzdWNoIGFzIExpbnV4IHRyYWNrIHdoaWNoIENQVSBoYXMgc2Vl biBhIGdpdmVuIGNvbnRleHQuClRoYXQgYWxsb3dzIHRvICJ0YXJnZXQiIFRMQiBpbnZhbGlkYXRp b25zIGluIGEgbW9yZSBzZW5zaWJsZSB3YXkuCkJyb2FkY2FzdCBpbnN0cnVjdGlvbnMgdGVuZCB0 byBsb3NlIHRoYXQgYWJpbGl0eSAoaXQncyBoYXJkIHRvIGRvIGluIEhXCmVzcC4gaW4gYSB3YXkg dGhhdCBjYW4gYmUgdmlydHVhbGl6ZWQgcHJvcGVybHkpLgoKICAgKiBCZWNhdXNlIHRob3NlIGlu c3RydWN0aW9ucyBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1lIChmb3IgdGhlCmFib3ZlIHJlYXNv bnMgYW5kIHNvbWUgb2YgYmVsb3cgb25lcyksIG9yIGF0IGxlYXN0IHdoYXRldmVyIGNvbnRleHQK c3luY2hyb25pemluZyBpbnN0cnVjdGlvbiB0aGF0IGZvbGxvdyB3aGljaCB3YWl0cyBmb3IgY29t cGxldGlvbiBvZiB0aGUKaW52YWxpZGF0aW9ucywgeW91IGVuZCB1cCB3aXRoIGEgQ1BVIGVmZmVj dGl2ZWx5ICJzdHVjayIgZm9yIGEgbG9uZwp0aW1lLCBub3QgdGFraW5nIGludGVycnVwdHMsIGlu Y2x1ZGluZyB0aG9zZSByb3V0ZWQgdG8gaGlnaGVyIHByaW9yaXR5CmxldmVscyAoaWUuIGh5cGVy dmlzb3IgZXRjLi4uKS4gVGhpcyBpcyBwcm9ibGVtYXRpYy4gQSBjb21wbGV0aW9uCnBvbGxpbmcg bWVjaGFuaXNtIGlzIHByZWZlcmFibGUgc28gdGhhdCBvbmNlIGNhbiBzdGlsbCBoYW5kbGUgc3Vj aCB3b3JrCndoaWxlIHdhaXRpbmcgYnV0IGlzIGhhcmQgdG8gYXJjaGl0ZWN0L2ltcGxlbWVudCBw cm9wZXJseSB3aGVuIGRvbmUgYXMKImluc3RydWN0aW9ucyIgc2luY2UgdGhleSBjYW4gaGFwcGVu IGNvbmN1cnJlbnRseSBmcm9tIG11bHRpcGxlCmNvbnRleHRzLiBJdCdzIGVhc2llciB3aXRoIE1N SU8gYnV0IHRoYXQgaGFzIG90aGVyIGlzc3Vlcy4KCiAgICogSXQgaW50cm9kdWNlcyByYWNlcyB3 aXRoIGFueXRoaW5nIHRoYXQgZG9lcyBTVyB3YWxrIG9mIHBhZ2UKdGFibGVzLiBGb3IgZXhhbXBs ZSBNTUlPIGVtdWxhdGlvbiBieSBhIGh5cGVydmlzb3IgY2Fubm90IGJlIGRvbmUgcmFjZS0KZnJl ZSBpZiB0aGUgZ3Vlc3QgY2FuIGRvIGl0cyBvd24gYnJvYWRjYXN0IGludmFsaWRhdGlvbnMgYW5k IHRoZQpoeXBlcnZpc29yIGhhcyB0byB3YWxrIHRoZSBndWVzdCBwYWdlIHRhYmxlcyB0byB0cmFu c2xhdGUuIEkgY2FuCmVsYWJvcmF0ZSBpZiByZXF1ZXN0ZWQuCgogICAqIFRob3NlIGludmFsaWRh dGlvbnMgbmVlZCB0byBhbHNvIHRhcmdldCBuZXN0IGFnZW50cyB0aGF0IGNhbiBob2xkCnRyYW5z bGF0aW9ucywgc3VjaCBhcyBJT01NVXMgdGhhdCBjYW4gb3BlcmF0ZSBpbiB1c3IgY29udGV4dHMg ZXRjLi4uClN1Y2ggSU9NTVVzIGNhbiB0YWtlIGEgVkVSWSBMT05HIHRpbWUgdG8gcHJvY2VzcyBp bnZhbGlkYXRpb25zLAplc3BlY2lhbGx5IGlmIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gY2hlY2tl ZCBvdXQgYnkgZGV2aWNlcyBzdWNoIGFzClBDSWUgZGV2aWNlcyB1c2luZyBBVFMuIFNvbWUgR1BV cyBmb3IgZXhhbXBsZSBjYW4gaGl0IGEgd29yc3QgY2FzZSBvZgpodW5kcmVkcyBvZiAqbWlsbGlz ZWNvbmRzKiB0byBwcm9jZXNzIGEgVExCIGludmFsaWRhdGlvbi4KCiAtIE5vdyBmb3IgdGhlIHBy b3Bvc2VkIHNjaGVtZS4gSSByZWFsbHkgZG9uJ3QgbGlrZSBpbnRyb2R1Y2luZyBhICpuZXcqCndh eSBvZiB0YWdnaW5nIGFuIGFkZHJlc3Mgc3BhY2UgdXNpbmcgdGhlIFBQTi4gSXQncyBhIGhhY2su IFRoZSByaWdodAp3YXkgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGV4aXN0aW5nIGNvbnRleHQgdGFn cyBhcmUgYmlnIGVub3VnaCB0byBub3QKcmVxdWlyZSByZS11c2UgYW5kIHRodXMgY2FuIGJlIHRy ZWF0ZWQgYXMgZ2xvYmFsIGNvbnRleHQgdGFncyBieSB0aGUKaHlwZXJ2aXNvciBhbmQgT1MuIElF LiBoYXZlIGJpZyBlbm91Z2ggVk1JRHMgYW5kIEFTSURzIHRoYXQgZWFjaApydW5uaW5nIFZNIGNh biBoYXZlIGEgZ2xvYmFsIHN0YWJsZSBWTUlEIGFuZCBlYWNoIHByb2Nlc3Mgd2l0aGluIGEKZ2l2 ZW4gVk0gY2FuIGhhdmUgYSBnbG9iYWwgKHdpdGhpbiB0aGF0IFZNKSBBU0lEIGluc3RlYWQgb2Yg cGxheWluZwpyZWFsbG9jYXRpb24gb2YgQVNJRCB0cmlja3MgYXQgY29udGV4dCBzd2l0Y2ggKHRo YXQncyB2ZXJ5IGluZWZmaWNpZW50CmFueXdheSwgc28gdGhhdCBzaG91bGQgYmUgZml4ZWQgZm9y IGFueXRoaW5nIHRoYXQgY2xhaW1zIHBlcmZvcm1hbmNlCmFuZCBzY2FsYWJpbGl0eSkuCgpOb3cg YWxsIG9mIHRoZXNlIHRoaW5ncyBjYW4gcHJvYmFibHkgaGF2ZSBzb2x1dGlvbnMgYnV0IGV4cGVy aWVuY2UKZG9lc24ndCBzZWVtIHRvIGluZGljYXRlIHRoYXQgaXQncyByZWFsbHkgd29ydGh3aGls ZS4gV2UgYXJlIGJldHRlciBvZmYKbWFraW5nIHN1cmUgd2UgaGF2ZSBhIHJlYWxseSBmYXN0IElQ SSBwYXRoIHRvIHBlcmZvcm0gdGhvc2UgdmlhCmludGVycnVwdHMgYW5kIGxvY2FsbHkgdG8gdGhl IHRhcmdldHRlZCBDUFVzIElNSE8uCgpDaGVlcnMsCkJlbi4KCj4gCj4gT24gVGh1LCBTZXAgMTks IDIwMTkgYXQgNTozNiBBTSBHdW8gUmVuIDxndW9yZW5Aa2VybmVsLm9yZz4gd3JvdGU6Cj4gPiBG cm9tOiBHdW8gUmVuIDxyZW5fZ3VvQGMtc2t5LmNvbT4KPiA+IAo+ID4gVGhlIHBhdGNoIGlzIGZv ciBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtaXNhLW1hbnVhbAo+ID4gCj4gPiBUaGUg cHJvcG9zYWwgaGFzIGJlZW4gdGFsa2VkIGluIExQQy0yMDE5IFJJU0MtViBNQyByZWYgWzFdLiBI ZXJlIGlzCj4gPiB0aGUKPiA+IGZvcm1hbCBwYXRjaC4KPiA+IAo+ID4gSW50cm9kdWN0aW9uCj4g PiA9PT09PT09PT09PT0KPiA+IAo+ID4gVXNpbmcgdGhlIEhhcmR3YXJlIFRMQiBicm9hZGNhc3Qg aW52YWxpZGF0aW9uIGluc3RydWN0aW9uIHRvCj4gPiBtYWludGFpbiB0aGUKPiA+IHN5c3RlbSBU TEIgaXMgYSBnb29kIGNob2ljZSBhbmQgaXQnbGwgc2ltcGxpZnkgdGhlIHN5c3RlbSBzb2Z0d2Fy ZQo+ID4gZGVzaWduLgo+ID4gVGhlIHByb3Bvc2FsIGhvcGVzIHRvIGFkZCBhIGJyb2FkY2FzdCBt b2RlIHRvIHRoZSBzZmVuY2Uudm1hIGluIHRoZQo+ID4gcmlzY3YtcHJpdmlsZWdlIHNwZWNpZmlj YXRpb24uIFRvIHN1cHBvcnQgdGhlIHNmZW5jZS52bWEgYnJvYWRjYXN0Cj4gPiBtb2RlLAo+ID4g dGhlcmUgYXJlIHR3byBtb2RpZmljYXRpb24gaW50cm9kdWNlZCBiZWxvdzoKPiA+IAo+ID4gIDEp IEFkZCBQR0QuUFBOIChyb290IHBhZ2UgdGFibGUncyBQUE4pIGFzIHRoZSB1bmlxdWUgaWRlbnRp ZmllciBvZgo+ID4gdGhlCj4gPiAgICAgYWRkcmVzcyBzcGFjZSBpbiBhZGRpdGlvbiB0byBhc2lk L3ZtaWQuIENvbXBhcmVkIHRvIHRoZQo+ID4gZHluYW1pY2FsbHkKPiA+ICAgICBjaGFuZ2VkIGFz aWQvdm1pZCwgUEdELlBQTiBpcyBmaXhlZCB0aHJvdWdob3V0IHRoZSBhZGRyZXNzCj4gPiBzcGFj ZSBsaWZlCj4gPiAgICAgY3ljbGUuIFRoaXMgZmVhdHVyZSBlbmFibGVzIHVuaWZvcm0gYWRkcmVz cyBzcGFjZQo+ID4gaWRlbnRpZmljYXRpb24KPiA+ICAgICBiZXR3ZWVuIGRpZmZlcmVudCBUTEIg c3lzdGVtcyAoYWN0dWFsbHksIGl0J3MgZGlmZmljdWx0IHRvCj4gPiB1bmlmeSB0aGUKPiA+ICAg ICBhc2lkL3ZtaWQgYmV0d2VlbiB0aGUgQ1BVIHN5c3RlbSBhbmQgdGhlIElPTU1VIHN5c3RlbSwg YmVjYXVzZQo+ID4gdGhlaXIKPiA+ICAgICBtZWNoYW5pc21zIGFyZSBkaWZmZXJlbnQpCj4gPiAK PiA+ICAyKSBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIHNmZW5jZS52bWEgaW5zdHJ1Y3Rp b24gZnJvbQo+ID4gc3luY2hyb25vdXMKPiA+ICAgICBtb2RlIHRvIGFzeW5jaHJvbm91cyBtb2Rl LCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb21wbGV0aW9uIG9mCj4gPiB0aGUgVExCCj4gPiAgICAg b3BlcmF0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHdoZW4gdGhlIHNmZW5jZS52bWEgaW5zdHJ1Y3Rp b24KPiA+IHJldGlyZXMuCj4gPiAgICAgSXQgbmVlZHMgdG8gYmUgY29tcGxldGVkIGJ5IGNoZWNr aW5nIHRoZSBmbGFnIGJpdCBvbiB0aGUgaGFydC4KPiA+IFRoZQo+ID4gICAgIHNmZW5jZS52bWEg cmVxdWVzdCBmaW5pc2ggY2FuIG5vdGlmeSB0aGUgc29mdHdhcmUgYnkgZ2VuZXJhdGluZwo+ID4g YW4KPiA+ICAgICBpbnRlcnJ1cHQuIFRoaXMgZnVuY3Rpb24gYWxsZXZpYXRlcyB0aGUgbGFyZ2Ug ZGVsYXkgb2YgVExCCj4gPiBpbnZhbGlkYXRpb24KPiA+ICAgICBpbiB0aGUgUENJIEFUUyBzeXN0 ZW0uCj4gPiAKPiA+IEFkZCBTMS9TMi5QR0QuUFBOIGZvciBBU0lEL1ZNSUQKPiA+ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiA+IAo+ID4gUEdEIGlzIGdsb2JhbCBkaXJlY3Rvcnkg KGRlZmluZWQgaW4gbGludXgpIGFuZCBQUE4gaXMgcGFnZSBwaHlzaWNhbAo+ID4gbnVtYmVyCj4g PiAoZGVmaW5lZCBpbiByaXNjdi1zcGVjKS4gUEdELlBOTiBjb3JyZXNwb25kcyB0byB0aGUgcm9v dCBwYWdlIHRhYmxlCj4gPiBwb2ludGVyCj4gPiBvZiB0aGUgYWRkcmVzcyBzcGFjZSwgaS5lLiBt bS0+cGdkIChsaW51eCBjb25jZXB0KS4KPiA+IAo+ID4gSW4gQ1BVL0lPTU1VIFRMQiwgd2UgdXNl IGFzaWQvdm1pZCB0byBkaXN0aW5ndWlzaCB0aGUgYWRkcmVzcyBzcGFjZQo+ID4gb2YKPiA+IHBy b2Nlc3Mgb3IgdmlydHVhbCBtYWNoaW5lLiBEdWUgdG8gdGhlIGxpbWl0YXRpb24gb2YgaWQgZW5j b2RpbmcsCj4gPiBpdCBjYW4KPiA+IG9ubHkgcmVwcmVzZW50IGEgcGFydCh3aW5kb3cpIG9mIHRo ZSBhZGRyZXNzIHNwYWNlLiBTMS9TMi5QR0QuUFBOCj4gPiBhcmUgdGhlCj4gPiByb290IHBhZ2Ug dGFibGUncyBQUE5zIG9mIHRoZSBhZGRyZXNzIHNwYWNlcyBhbmQgUzEvUzIuUEdELlBQTiBhcmUK PiA+IHRoZQo+ID4gdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFkZHJlc3Mgc3BhY2VzLgo+ID4g Cj4gPiBGb3IgdGhlIENQVSBTTVAgc3lzdGVtLCB5b3UgY2FuIHVzZSBjb250ZXh0IHN3aXRjaCB0 byBwZXJmb3JtIHRoZQo+ID4gbmVjZXNzYXJ5Cj4gPiBzb2Z0d2FyZSBtZWNoYW5pc20gdG8gZW5z dXJlIHRoYXQgdGhlIGFzaWQvdm1pZCBvbiBhbGwgaGFydHMgaXMKPiA+IGNvbnNpc3RlbnQKPiA+ IChwbGVhc2UgcmVmZXIgdG8gdGhlIGFybTY0IGFzaWQgbWVjaGFuaXNtKS4gSW4gdGhpcyB3YXks IHRoZSBUTEIKPiA+IGJyb2FkY2FzdAo+ID4gaW52YWxpZGF0aW9uIGluc3RydWN0aW9uIGNhbiBk ZXRlcm1pbmUgdGhlIGFkZHJlc3Mgc3BhY2UgcHJvY2Vzc2VkCj4gPiBvbiBhbGwKPiA+IGhhcnRz IGJ5IGFzaWQvdm1pZC4KPiA+IAo+ID4gRGlmZmVyZW50IGZyb20gdGhlIENQVSBTTVAgc3lzdGVt LCB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBmb3IKPiA+IHRoZQo+ID4gRE1BLUlPTU1VIHN5 c3RlbSwgc28gdGhlIHVuaWZpY2F0aW9uIHdpdGggdGhlIENQVSBhc2lkL3ZtaWQgY2Fubm90Cj4g PiBiZQo+ID4gZ3VhcmFudGVlZC4gU28gd2UgbmVlZCBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0 aGUgYWRkcmVzcyBzcGFjZSB0bwo+ID4gZXN0YWJsaXNoIGEgY29tbXVuaWNhdGlvbiBicmlkZ2Ug YmV0d2VlbiB0aGUgVExCcyBvZiBkaWZmZXJlbnQKPiA+IHN5c3RlbXMuCj4gPiAKPiA+IFRoYXQg aXMgUEdELlBQTiAoZm9yIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvczogUzEvUzIuUEdELlBQTikK PiA+IAo+ID4gY3VycmVudDoKPiA+ICBzZmVuY2Uudm1hICByczEgPSB2YWRkciwgcnMyID0gYXNp ZAo+ID4gIGhmZW5jZS52dm1hIHJzMSA9IHZhZGRyLCByczIgPSBhc2lkCj4gPiAgaGZlbmNlLmd2 bWEgcnMxID0gZ2FkZHIsIHJzMiA9IHZtaWQKPiA+IAo+ID4gcHJvcG9zZWQ6Cj4gPiAgc2ZlbmNl LnZtYSAgcnMxID0gdmFkZHIsIHJzMiA9IG1vZGU6cHBuOmFzaWQKPiA+ICBoZmVuY2UudnZtYSBy czEgPSB2YWRkciwgcnMyID0gbW9kZTpwcG46YXNpZAo+ID4gIGhmZW5jZS5ndm1hIHJzMSA9IGdh ZGRyLCByczIgPSBtb2RlOnBwbjp2bWlkCj4gPiAKPiA+ICBtb2RlICAgICAgLSBicm9hZGNhc3Qg fCBsb2NhbAo+ID4gIHBwbiAgICAgICAtIHRoZSBQUE4gb2YgdGhlIGFkZHJlc3Mgc3BhY2Ugb2Yg dGhlIHJvb3QgcGFnZSB0YWJsZQo+ID4gIHZtaWQvYXNpZCAtIHRoZSB3aW5kb3cgaWRlbnRpZmll ciBvZiB0aGUgYWRkcmVzcyBzcGFjZQo+ID4gCj4gPiBBdCB0aGUgTGludXggUGx1bWJlciBDb25m ZXJlbmNlIDIwMTkgUklTQ1YtTUMsIHJlZjpbMV0sIHdlJ3ZlCj4gPiBzaG93ZWQgdHdvCj4gPiBJ T01NVSBleGFtcGxlcyB0byBleHBsYWluIGhvdyBpdCB3b3JrIHdpdGggaGFyZHdhcmUuCj4gPiAK PiA+IDEpIEluIGEgbGlnaHR3ZWlnaHQgSU9NTVUgc3lzdGVtICh1cCB0byA2NCBhZGRyZXNzIHNw YWNlcyksIHRoZQo+ID4gaGFyZHdhcmUKPiA+ICAgIGNvdWxkIGRpcmVjdGx5IGNvbnZlcnQgUEdE LlBQTiBpbnRvIERJRCAoSU9NTVUgQVNJRCkKPiA+IAo+ID4gMikgRm9yIHRoZSBQQ0kgQVRTIHNj ZW5hcmlvLCBpdHMgSU8gQVNJRC9WTUlEIGVuY29kaW5nIHNwYWNlIGNhbgo+ID4gc3VwcG9ydAo+ ID4gICAgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBhZGRyZXNzIHNwYWNlcy4gV2UgdXNlIHR3byBy ZXZlcnNlCj4gPiBtYXBwaW5nCj4gPiAgICB0YWJsZXMgdG8gbGV0IHRoZSBoYXJkd2FyZSB0cmFu c2xhdGUgUzEvUzIuUEdELlBQTiBpbnRvIElPCj4gPiBBU0lEL1ZNSUQuCj4gPiAKPiA+IEFTWU5D IEJST0FEQ0FTVCBTRkVOQ0UuVk1BCj4gPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ IAo+ID4gVG8gc3VwcG9ydCB0aGUgaGlnaCBsYXRlbmN5IGJyb2FkY2FzdCBzZmVuY2Uudm1hIG9w ZXJhdGlvbiBpbiB0aGUKPiA+IFBDSSBBVFMKPiA+IHVzYWdlIHNjZW5hcmlvLCB3ZSBtb2RpZnkg dGhlIHNmZW5jZS52bWEgZnJvbSBzeW5jaHJvbm91cyBtb2RlIHRvCj4gPiBhc3luY2hyb25vdXMg bW9kZS4gKEZvciBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBpZiBoYXJkd2FyZSBvbmx5Cj4gPiBp bXBsZW1lbnQKPiA+IHN5bmNocm9ub3VzIG1vZGUgYW5kIHNvZnR3YXJlIHN0aWxsIHdvcmsgaW4g YXN5bmNocm9ub3VzIG1vZGUpCj4gPiAKPiA+IFRvIGltcGxlbWVudCB0aGUgYXN5bmNocm9ub3Vz IG1vZGUsIDMgZmVhdHVyZXMgYXJlIGFkZGVkOgo+ID4gIDEpIHNzdGF0dXM6VExCSQo+ID4gICAg IEEgInN0YXR1cyBiaXQgLSBUTEJJIiBpcyBhZGRlZCB0byB0aGUgc3N0YXR1cyByZWdpc3Rlci4g VGhlCj4gPiBUTEJJIHN0YXR1cwo+ID4gICAgIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIHN0 aWxsIG91dHN0YW5kaW5nIHNmZW5jZS52bWEKPiA+IHJlcXVlc3RzIG9uIHRoZQo+ID4gICAgIGN1 cnJlbnQgaGFydC4KPiA+ICAgICBWYWx1ZToKPiA+ICAgICAgIDE6IHNmZW5jZS52bWEgcmVxdWVz dHMgYXJlIG5vdCBjb21wbGV0ZWQuCj4gPiAgICAgICAwOiBhbGwgc2ZlY2Uudm1hIHJlcXVlc3Rz IGNvbXBsZXRlZCwgcmVxdWVzdCBxdWV1ZSBpcyBlbXB0eS4KPiA+IAo+ID4gIDIpIHNzdGF0dXM6 VExCSUMKPiA+ICAgICBBICJjb250cm9sIGJpdHMgLSBUTEJJQyIgaXMgYWRkZWQgdG8gc3N0YXR1 cyByZWdpc3Rlci4gVGhlCj4gPiBUTEJJQyBjb250cm9sCj4gPiAgICAgYml0cyBhcmUgY29udHJv bGxlZCBieSBzb2Z0d2FyZS4KPiA+ICAgICAiV3JpdGUgMSIgd2lsbCB0cmlnZ2VyIHRoZSBjdXJy ZW50IGhhcnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlCj4gPiBhcmUgc3RpbGwKPiA+ICAgICBvdXRz dGFuZGluZyBzZmVuY2Uudm1hIHJlcXVlc3RzLiBJZiB0aGVyZSBhcmUgdW5maW5pc2hlZAo+ID4g cmVxdWVzdHMsIGFuCj4gPiAgICAgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gdGhl IHJlcXVlc3QgaXMgY29tcGxldGVkLAo+ID4gbm90aWZ5aW5nIHRoZQo+ID4gICAgIHNvZnR3YXJl IHRoYXQgYWxsIG9mIHRoZSBjdXJyZW50IHNmZW5jZS52bWEgcmVxdWVzdHMgaGF2ZSBiZWVuCj4g PiBjb21wbGV0ZWQuCj4gPiAgICAgIldyaXRlIDAiIHdpbGwgY2F1c2Ugbm90aGluZy4KPiA+IAo+ ID4gIDMpIHN1cGVydmlzb3IgaW50ZXJydXB0IHJlZ2lzdGVyIChzaXAgJiBzaWUpOlRMQkkgZmlu aXNoIGludGVycnVwdAo+ID4gICAgIEEgcGVyLWhhcnQgaW50ZXJydXB0IGlzIGFkZGVkIHRvIHN1 cGVydmlzb3IgaW50ZXJydXB0Cj4gPiByZWdpc3RlcnMuCj4gPiAgICAgV2hlbiBhbGwgc2ZlbmNl LnZtYSByZXF1ZXN0cyBhcmUgY29tcGxldGVkIGFuZCBzc3RhdHVzOlRMQklDCj4gPiBoYXMgYmVl bgo+ID4gICAgIHRyaWdnZXJlZCwgaGFydCB3aWxsIHJlY2VpdmUgYSBUTEJJIGZpbmlzaCBpbnRl cnJ1cHQuIEp1c3QgbGlrZQo+ID4gdGltZXIsCj4gPiAgICAgc29mdHdhcmUgYW5kIGV4dGVybmFs IGludGVycnVwdCdzIGRlZmluaXRpb24gaW4gc2lwICYgc2llLgo+ID4gCj4gPiBGYWtlIGNvZGU6 Cj4gPiAKPiA+IGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcikgewo+ID4gICAgIGFzaWQgPSBjcHVf YXNpZCh2bWEtPnZtX21tKTsKPiA+ICAgICBwcG4gPSBQRk5fRE9XTih2bWEtPnZtX21tLT5wZ2Qp Owo+ID4gCj4gPiAgICAgc2ZlbmNlLnZtYSAoYWRkciwgMXxQUE5fT0ZGU0VUKHBwbil8YXNpZCk7 IC8vMS4gc3RhcnQgcmVxdWVzdAo+ID4gCj4gPiAgICAgd2hpbGUoc3N0YXR1czpUTEJJKSBpZiAo dGltZV9vdXQoKSA+IDFtcykgYnJlYWs7IC8vMi4gbG9vcAo+ID4gY2hlY2sKPiA+IAo+ID4gICAg IHdoaWxlIChzc3RhdHVzOlRMQkkpIHsKPiA+ICAgICAgICAgLi4uCj4gPiAgICAgICAgIHNldCBz c3RhdHVzOlRMQklDOwo+ID4gICAgICAgICB3YWl0X1RMQklfZmluaXNoX2ludGVycnVwdCgpOyAv LzMuIHdhaXQgaXJxLCBpb19zY2hlZHVsZQo+ID4gICAgIH0KPiA+IH0KPiA+IAo+ID4gSGVyZSB3 ZSBnaXZlIDIgbGV2ZWwgY2hlY2s6Cj4gPiAgMSkgbG9vcCBjaGVjayBzc3RhdHVzOlRMQkksIENQ VSBjb3VsZCByZXNwb25zZSBJbnRlcnJ1cHQuCj4gPiAgMikgc2V0IHNzdGF0dXM6VExCSUMgYW5k IHdhaXQgZm9yIGlycSwgQ1BVIHNjaGVkdWxlIG91dCBmb3Igb3RoZXIKPiA+IHRhc2suCj4gPiAK PiA+IEFDRS1EVk0gRXhhbXBsZQo+ID4gPT09PT09PT09PT09PT09Cj4gPiAKPiA+IEhvbmVzdGx5 LCAiYnJvYWRjYXN0aW5nIGFkZHIsIGFzaWQsIHZtaWQsIFMxL1MyLlBHRC5QUE4gdG8KPiA+IGlu dGVyY29ubmVjdHMiCj4gPiBhbmQgIkFTWU5DIFNGRU5DRS5WTUEiIGNvdWxkIGJlIGltcGxlbWVu dGVkIGJ5IEFDRS1EVk0gcHJvdG9jb2wgcmVmCj4gPiBbMl0uCj4gPiAKPiA+IFRoZXJlIGFyZSAz IHR5cGVzIG9mIHRyYW5zYWN0aW9ucyBpbiBEVk06Cj4gPiAKPiA+ICAtIERWTSBvcGVyYXRpb24K PiA+ICAgIFNlbmQgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBpbnRlcmNvbm5lY3QsIGluY2x1ZGlu ZyBhZGRyLCBhc2lkLAo+ID4gICAgUzEuUEdELlBQTiwgdm1pZCwgUzIuUEdELlBQTi4KPiA+IAo+ ID4gIC0gRFZNIHN5bmNocm9uaXphdGlvbgo+ID4gICAgQ2hlY2sgdGhhdCBhbGwgRFZNIG9wZXJh dGlvbnMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSWYgbm90LCBpdAo+ID4gd2lsbCB1c2UKPiA+ICAg IHN0YXRlIG1hY2hpbmUgdG8gd2FpdCBEVk0gY29tcGxldGUgcmVxdWVzdHMuCj4gPiAKPiA+ICAt IERWTSBjb21wbGV0ZQo+ID4gICAgUmV0dXJuIHRyYW5zYWN0aW9uIGZyb20gY29tcG9uZW50cywg ZWc6IElPTU1VLiBJZiBoYXJ0IGhhcwo+ID4gcmVjZWl2ZWQgYWxsCj4gPiAgICBEVk0gY29tcGxl dGVzIHdoaWNoIGFyZSB0cmlnZ2VyZWQgYnkgc2ZlbmNlLnZtYSBpbnN0cnVjdGlvbnMgYW5kCj4g PiAgICAic3N0YXR1czpUTEJJQyIgaGFzIGJlZW4gc2V0LCBhIFRMQkkgZmluaXNoIGludGVycnVw dCBpcwo+ID4gdHJpZ2dlcmVkLgo+ID4gCj4gPiAoQWN0dWFsbHksIHdlIGRvIG5vdCBuZWVkIHRv IGltcGxlbWVudCB0aGUgYWJvdmUgZnVuY3Rpb25zIHN0cmljdGx5Cj4gPiAgYWNjb3JkaW5nIHRv IHRoZSBBQ0Ugc3BlY2lmaWNhdGlvbiA6UCApCj4gPiAKPiA+ICAxOiBodHRwczovL3d3dy5saW51 eHBsdW1iZXJzY29uZi5vcmcvZXZlbnQvNC9jb250cmlidXRpb25zLzMwNy8KPiA+ICAyOiBBTUJB IEFYSSBhbmQgQUNFIFByb3RvY29sIFNwZWNpZmljYXRpb24gLSBEaXN0cmlidXRlZCBWaXJ0dWFs Cj4gPiBNZW1vcnkKPiA+ICAgICBUcmFuc2FjdGlvbnMiCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6 IEd1byBSZW4gPHJlbl9ndW9AYy1za3kuY29tPgo+ID4gUmV2aWV3ZWQtYnk6IExpIEZlaXRlbmcg PGZlaXRlbmdfbGlAYy1za3kuY29tPgo+ID4gLS0tCj4gPiAgc3JjL2h5cGVydmlzb3IudGV4IHwg IDQzICsrKysrKysrLS0tLS0tLQo+ID4gIHNyYy9zdXBlcnZpc29yLnRleCB8IDE1NQo+ID4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiA+ICAy IGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL3NyYy9oeXBlcnZpc29yLnRleCBiL3NyYy9oeXBlcnZpc29yLnRleAo+ ID4gaW5kZXggNDdiOTBiMi4uMzcxODgxOSAxMDA2NDQKPiA+IC0tLSBhL3NyYy9oeXBlcnZpc29y LnRleAo+ID4gKysrIGIvc3JjL2h5cGVydmlzb3IudGV4Cj4gPiBAQCAtMTA5NCwxNSArMTA5NCwx NSBAQCBUaGUgaHlwZXJ2aXNvciBleHRlbnNpb24gYWRkcyB0d28gbmV3Cj4gPiBwcml2aWxlZ2Vk IGZlbmNlIGluc3RydWN0aW9ucy4KPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e29wY29kZX0gXFwK PiA+ICBcaGxpbmUKPiA+ICA3ICYgNSAmIDUgJiAzICYgNSAmIDcgXFwKPiA+IC1IRkVOQ0UuR1ZN QSAmIHZtaWQgJiBnYWRkciAmIFBSSVYgJiAwICYgU1lTVEVNIFxcCj4gPiAtSEZFTkNFLlZWTUEg JiBhc2lkICYgdmFkZHIgJiBQUklWICYgMCAmIFNZU1RFTSBcXAo+ID4gK0hGRU5DRS5HVk1BICYg bW9kZTpwcG46dm1pZCAmIGdhZGRyICYgUFJJViAmIDAgJiBTWVNURU0gXFwKPiA+ICtIRkVOQ0Uu VlZNQSAmIG1vZGU6cHBuOmFzaWQgJiB2YWRkciAmIFBSSVYgJiAwICYgU1lTVEVNIFxcCj4gPiAg XGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gCj4gPiAgVGhlIGh5cGVydmlzb3Ig bWVtb3J5LW1hbmFnZW1lbnQgZmVuY2UgaW5zdHJ1Y3Rpb25zLCBIRkVOQ0UuR1ZNQQo+ID4gYW5k Cj4gPiAgSEZFTkNFLlZWTUEsIGFyZSB2YWxpZCBvbmx5IGluIEhTLW1vZGUgd2hlbiB7XHR0IG1z dGF0dXN9LlRWTT0wLAo+ID4gb3IgaW4gTS1tb2RlCj4gPiAgKGlycmVzcGVjdGl2ZSBvZiB7XHR0 IG1zdGF0dXN9LlRWTSkuCj4gPiAtVGhlc2UgaW5zdHJ1Y3Rpb25zIHBlcmZvcm0gYSBmdW5jdGlv biBzaW1pbGFyIHRvIFNGRU5DRS5WTUEKPiA+ICtUaGVzZSBpbnN0cnVjdGlvbnMgcGVyZm9ybSBh IGZ1bmN0aW9uIHNpbWlsYXIgdG8gU0ZFTkNFLlZNQQo+ID4gKGJyb2FkY2FzdC9sb2NhbCkKPiA+ ICAoU2VjdGlvbn5ccmVme3NlYzpzZmVuY2Uudm1hfSksIGV4Y2VwdCBhcHBseWluZyB0byB0aGUg Z3Vlc3QtCj4gPiBwaHlzaWNhbAo+ID4gIG1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJl cyBjb250cm9sbGVkIGJ5IENTUiB7XHR0IGhnYXRwfQo+ID4gKEhGRU5DRS5HVk1BKQo+ID4gIG9y IHRoZSBWUy1sZXZlbCBtZW1vcnktbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgY29udHJvbGxl ZCBieQo+ID4gQ1NSIHtcdHQgdnNhdHB9Cj4gPiBAQCAtMTEzNiwxMSArMTEzNiwxMCBAQCBBbiBI RkVOQ0UuVlZNQSBpbnN0cnVjdGlvbiBhcHBsaWVzIG9ubHkgdG8KPiA+IGEgc2luZ2xlIHZpcnR1 YWwgbWFjaGluZSwgaWRlbnRpZmllZAo+ID4gIGJ5IHRoZSBzZXR0aW5nIG9mIHtcdHQgaGdhdHB9 LlZNSUQgd2hlbiBIRkVOQ0UuVlZNQSBleGVjdXRlcy4KPiA+ICBcZW5ke2NvbW1lbnRhcnl9Cj4g PiAKPiA+IC1XaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFhMRU4tMTpBU0lETUFY IG9mIHRoZSB2YWx1ZQo+ID4gaGVsZCBpbiB7XGVtCj4gPiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9y IGZ1dHVyZSB1c2UgYW5kIHNob3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUKPiA+IGFuZCBpZ25v cmVkCj4gPiAtYnkgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuCj4gPiAtRnVydGhlcm1vcmUsIGlm IEFTSURMRU5+JDwkfkFTSURNQVgsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbAo+ID4gaWdub3Jl IGJpdHMKPiA+IC1BU0lETUFYLTE6QVNJRExFTiBvZiB0aGUgdmFsdWUgaGVsZCBpbiB7XGVtIHJz Mn0uCj4gPiArV2hlbiB7XGVtIHJzMn0kXG5lcSR7XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5m b3JtYXRpb25zOiBtb2RlLAo+ID4gcHBuLCBhc2lkLgo+ID4gKzEpIG1vZGUgY29udHJvbCBIRkVO Q0UuVlZNQSBicm9hZGNhc3Qgb3Igbm90Lgo+ID4gKzIpIHBwbiBpcyB0aGUgcm9vdCBwYWdlIHRh bGJlJ3MgUFBOIG9mIHRoZSBhc2lkIGFkZHJlc3Mgc3BhY2UuCj4gPiArMykgYXNpZCBpcyB0aGUg aWRlbnRpZmllciBvZiBwcm9jZXNzIGluIHZpcnR1YWwgbWFjaGluZS4KPiA+IAo+ID4gIFxiZWdp bntjb21tZW50YXJ5fQo+ID4gIFNpbXBsZXIgaW1wbGVtZW50YXRpb25zIG9mIEhGRU5DRS5WVk1B IGNhbiBpZ25vcmUgdGhlIGd1ZXN0Cj4gPiB2aXJ0dWFsIGFkZHJlc3MgaW4KPiA+IEBAIC0xMTY4 LDExICsxMTY3LDEwIEBAIHBoeXNpY2FsIGFkZHJlc3NlcyBpbiBQTVAgYWRkcmVzcyByZWdpc3Rl cnMKPiA+IChTZWN0aW9uflxyZWZ7c2VjOnBtcH0pIGFuZCBpbiBwYWdlCj4gPiAgdGFibGUgZW50 cmllcyAoU2VjdGlvbnMgXHJlZntzZWM6c3YzMn0sIFxyZWZ7c2VjOnN2Mzl9LAo+ID4gYW5kflxy ZWZ7c2VjOnN2NDh9KS4KPiA+ICBcZW5ke2NvbW1lbnRhcnl9Cj4gPiAKPiA+IC1XaGVuIHtcZW0g cnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFhMRU4tMTpWTUlETUFYIG9mIHRoZSB2YWx1ZQo+ID4g aGVsZCBpbiB7XGVtCj4gPiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIHNo b3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUKPiA+IGFuZCBpZ25vcmVkCj4gPiAtYnkgY3VycmVu dCBpbXBsZW1lbnRhdGlvbnMuCj4gPiAtRnVydGhlcm1vcmUsIGlmIFZNSURMRU5+JDwkflZNSURN QVgsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbAo+ID4gaWdub3JlIGJpdHMKPiA+IC1WTUlETUFY LTE6Vk1JRExFTiBvZiB0aGUgdmFsdWUgaGVsZCBpbiB7XGVtIHJzMn0uCj4gPiArV2hlbiB7XGVt IHJzMn0kXG5lcSR7XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5mb3JtYXRpb25zOiBtb2RlLAo+ ID4gdm1pZCwgcHBuLgo+ID4gKzEpIG1vZGUgY29udHJvbCBIRkVOQ0UuR1ZNQSBicm9hZGNhc3Qg b3Igbm90Lgo+ID4gKzIpIHBwbiBpcyB0aGUgcm9vdCBwYWdlIHRhbGJlJ3MgUFBOIG9mIHRoZSB2 bWlkIGFkZHJlc3Mgc3BhY2UuCj4gPiArMykgdm1pZCBpcyB0aGUgaWRlbnRpZmllciBvZiB2aXJ0 dWFsIG1hY2hpbmUuCj4gPiAKPiA+ICBcYmVnaW57Y29tbWVudGFyeX0KPiA+ICBTaW1wbGVyIGlt cGxlbWVudGF0aW9ucyBvZiBIRkVOQ0UuR1ZNQSBjYW4gaWdub3JlIHRoZSBndWVzdAo+ID4gcGh5 c2ljYWwgYWRkcmVzcyBpbgo+ID4gQEAgLTE1NjcsMjEgKzE1NjUsMjIgQEAgcmVnaXN0ZXIuCj4g PiAgXHN1YnNlY3Rpb257TWVtb3J5LU1hbmFnZW1lbnQgRmVuY2VzfQo+ID4gCj4gPiAgVGhlIGJl aGF2aW9yIG9mIHRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIGlzIGFmZmVjdGVkIGJ5IHRoZQo+ ID4gY3VycmVudAo+ID4gLXZpcnR1YWxpemF0aW9uIG1vZGUgVi4gIFdoZW4gVj0wLCB0aGUgdmly dHVhbC1hZGRyZXNzIGFyZ3VtZW50IGlzCj4gPiBhbiBIUy1sZXZlbAo+ID4gLXZpcnR1YWwgYWRk cmVzcywgYW5kIHRoZSBBU0lEIGFyZ3VtZW50IGlzIGFuIEhTLWxldmVsIEFTSUQuCj4gPiArdmly dHVhbGl6YXRpb24gbW9kZSBWLiAgV2hlbiBWPTAsIHRoZSByczEgYXJndW1lbnQgaXMgYW4gSFMt bGV2ZWwKPiA+ICt2aXJ0dWFsIGFkZHJlc3MsIGFuZCB0aGUgcnMyIGFyZ3VtZW50IGlzIGFuIEhT LWxldmVsIEFTSUQgYW5kIHJvb3QKPiA+IHBhZ2UgdGFibGUncyBQUE4uCj4gPiAgVGhlIGluc3Ry dWN0aW9uIG9yZGVycyBzdG9yZXMgb25seSB0byBIUy1sZXZlbCBhZGRyZXNzLXRyYW5zbGF0aW9u IAo+ID4gc3RydWN0dXJlcwo+ID4gIHdpdGggc3Vic2VxdWVudCBIUy1sZXZlbCBhZGRyZXNzIHRy YW5zbGF0aW9ucy4KPiA+IAo+ID4gLVdoZW4gVj0xLCB0aGUgdmlydHVhbC1hZGRyZXNzIGFyZ3Vt ZW50IHRvIFNGRU5DRS5WTUEgaXMgYSBndWVzdAo+ID4gdmlydHVhbAo+ID4gLWFkZHJlc3Mgd2l0 aGluIHRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSBBU0lEIGFyZ3VtZW50Cj4g PiBpcyBhIFZTLWxldmVsCj4gPiAtQVNJRCB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNo aW5lLgo+ID4gK1doZW4gVj0xLCB0aGUgcnMxIGFyZ3VtZW50IHRvIFNGRU5DRS5WTUEgaXMgYSBn dWVzdCB2aXJ0dWFsCj4gPiArYWRkcmVzcyB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNo aW5lLCBhbmQgdGhlIHJzMiBhcmd1bWVudAo+ID4gaXMgYSBWUy1sZXZlbAo+ID4gK0FTSUQgYW5k IHJvb3QgcGFnZSB0YWJsZSdzIFBQTiB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5l Lgo+ID4gIFRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBW TUlEIGZpZWxkIG9mIENTUgo+ID4ge1x0dCBoZ2F0cH0sCj4gPiAtYW5kIHRoZSBlZmZlY3RpdmUg QVNJRCBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSB0aGUgY29tYmluYXRpb24gb2YKPiA+IHRoaXMg Vk1JRAo+ID4gLXdpdGggdGhlIFZTLWxldmVsIEFTSUQuCj4gPiArYW5kIHRoZSBlZmZlY3RpdmUg QVNJRCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIGNhbiBiZSBjb25zaWRlcmVkCj4gPiB0byBi ZSB0aGUKPiA+ICtjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdz IFBQTiB3aXRoIHRoZSBWUy0KPiA+IGxldmVsIEFTSUQgYW5kCj4gPiArcm9vdCBwYWdlIHRhYmxl J3MgUFBOLgo+ID4gIFRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIG9yZGVycyBzdG9yZXMgb25s eSB0byB0aGUgVlMtbGV2ZWwKPiA+ICBhZGRyZXNzLXRyYW5zbGF0aW9uIHN0cnVjdHVyZXMgd2l0 aCBzdWJzZXF1ZW50IFZTLWxldmVsIGFkZHJlc3MKPiA+IHRyYW5zbGF0aW9ucwo+ID4gLWZvciB0 aGUgc2FtZSB2aXJ0dWFsIG1hY2hpbmUsIGkuZS4sIG9ubHkgd2hlbiB7XHR0IGhnYXRwfS5WTUlE IGlzCj4gPiB0aGUgc2FtZSBhcwo+ID4gLXdoZW4gdGhlIFNGRU5DRS5WTUEgZXhlY3V0ZWQuCj4g PiArZm9yIHRoZSBzYW1lIHZpcnR1YWwgbWFjaGluZSwgaS5lLiwgb25seSB3aGVuIHtcdHQgaGdh dHB9LlZNSUQgYW5kCj4gPiB7XFx0dCBoZ2F0cH0uUFBOIGlzCj4gPiArdGhlIHNhbWUgYXMgd2hl biB0aGUgU0ZFTkNFLlZNQSBleGVjdXRlZC4KPiA+IAo+ID4gIEh5cGVydmlzb3IgaW5zdHJ1Y3Rp b25zIEhGRU5DRS5HVk1BIGFuZCBIRkVOQ0UuVlZNQSBwcm92aWRlCj4gPiBhZGRpdGlvbmFsCj4g PiAgbWVtb3J5LW1hbmFnZW1lbnQgZmVuY2VzIHRvIGNvbXBsZW1lbnQgU0ZFTkNFLlZNQS4KPiA+ IGRpZmYgLS1naXQgYS9zcmMvc3VwZXJ2aXNvci50ZXggYi9zcmMvc3VwZXJ2aXNvci50ZXgKPiA+ IGluZGV4IGJhM2NlZDUuLjI4NzdiN2EgMTAwNjQ0Cj4gPiAtLS0gYS9zcmMvc3VwZXJ2aXNvci50 ZXgKPiA+ICsrKyBiL3NyYy9zdXBlcnZpc29yLnRleAo+ID4gQEAgLTQ3LDEwICs0NywxMiBAQCBy ZWdpc3RlciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudAo+ID4gb3BlcmF0 aW5nIHN0YXRlLgo+ID4gIFxiZWdpbntjZW50ZXJ9Cj4gPiAgXHNldGxlbmd0aHtcdGFiY29sc2Vw fXs0cHR9Cj4gPiAgXHNjYWxlYm94ezAuOTV9ewo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtjV2NjY2Nj V2NjY2NXY2N9Cj4gPiArXGJlZ2lue3RhYnVsYXJ9e2NjY1djY2NjY1djY2NjV2NjfQo+ID4gIFxc Cj4gPiAgXGluc3RiaXR7MzF9ICYKPiA+IC1caW5zdGJpdHJhbmdlezMwfXsyMH0gJgo+ID4gK1xp bnN0Yml0ezMwfSAmCj4gPiArXGluc3RiaXR7Mjl9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezI4fXsy MH0gJgo+ID4gIFxpbnN0Yml0ezE5fSAmCj4gPiAgXGluc3RiaXR7MTh9ICYKPiA+ICBcaW5zdGJp dHsxN30gJgo+ID4gQEAgLTY2LDYgKzY4LDggQEAgcmVnaXN0ZXIga2VlcHMgdHJhY2sgb2YgdGhl IHByb2Nlc3NvcidzIGN1cnJlbnQKPiA+IG9wZXJhdGluZyBzdGF0ZS4KPiA+ICBcaW5zdGJpdHsw fSBcXAo+ID4gIFxobGluZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1NEfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17VExCSX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9e1RMQklD fSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsx fXtjfH17TVhSfSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtTVU19ICYKPiA+IEBAIC04Miw3 ICs4Niw3IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50 Cj4gPiBvcGVyYXRpbmcgc3RhdGUuCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0KPiA+ ICBcXAo+ID4gIFxobGluZQo+ID4gLTEgJiAxMSAmIDEgJiAxICYgMSAmIDIgJiAyICYgNCAmIDEg JiAxICYgMSAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICsxICYgMSAmIDEgJiAxMCAmIDEgJiAxICYg MSAmIDIgJiAyICYgNCAmIDEgJiAxICYgMSAmIDEgJiAzICYgMSAmIDEKPiA+IFxcCj4gPiAgXGVu ZHt0YWJ1bGFyfX0KPiA+ICBcZW5ke2NlbnRlcn0KPiA+ICB9Cj4gPiBAQCAtOTUsMTAgKzk5LDEy IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50Cj4gPiBv cGVyYXRpbmcgc3RhdGUuCj4gPiAge1xmb290bm90ZXNpemUKPiA+ICBcYmVnaW57Y2VudGVyfQo+ ID4gIFxzZXRsZW5ndGh7XHRhYmNvbHNlcH17NHB0fQo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtjTUZT Y2NjY30KPiA+ICtcYmVnaW57dGFidWxhcn17Y2NjTUZTY2NjY30KPiA+ICBcXAo+ID4gIFxpbnN0 Yml0e1NYTEVOLTF9ICYKPiA+IC1caW5zdGJpdHJhbmdle1NYTEVOLTJ9ezM0fSAmCj4gPiArXGlu c3RiaXR7U1hMRU4tMn0gJgo+ID4gK1xpbnN0Yml0e1NYTEVOLTN9ICYKPiA+ICtcaW5zdGJpdHJh bmdle1NYTEVOLTR9ezM0fSAmCj4gPiAgXGluc3RiaXRyYW5nZXszM317MzJ9ICYKPiA+ICBcaW5z dGJpdHJhbmdlezMxfXsyMH0gJgo+ID4gIFxpbnN0Yml0ezE5fSAmCj4gPiBAQCAtMTA3LDYgKzEx Myw4IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50Cj4g PiBvcGVyYXRpbmcgc3RhdGUuCj4gPiAgIFxcCj4gPiAgXGhsaW5lCj4gPiAgXG11bHRpY29sdW1u ezF9e3xjfH17U0R9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtUTEJJfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17VExCSUN9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJp fSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtVWExbMTowXX0gJgo+ID4gIFxtdWx0aWNvbHVt bnsxfXtjfH17XHdwcml9ICYKPiA+IEBAIC0xMTUsNyArMTIzLDcgQEAgcmVnaXN0ZXIga2VlcHMg dHJhY2sgb2YgdGhlIHByb2Nlc3NvcidzIGN1cnJlbnQKPiA+IG9wZXJhdGluZyBzdGF0ZS4KPiA+ ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4gPiAgIFxcCj4gPiAgXGhsaW5lCj4gPiAt MSAmIFNYTEVOLTM1ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPiA+ICsxICYgMSAmIDEgJiBT WExFTi0zNyAmIDIgJiAxMiAmIDEgJiAxICYgMSAmIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4g IFxiZWdpbnt0YWJ1bGFyfXtjV1dGY2NjY1djY30KPiA+ICBcXAo+ID4gQEAgLTE1Miw2ICsxNjAs MTcgQEAgcmVnaXN0ZXIga2VlcHMgdHJhY2sgb2YgdGhlIHByb2Nlc3NvcidzCj4gPiBjdXJyZW50 IG9wZXJhdGluZyBzdGF0ZS4KPiA+ICBcbGFiZWx7c3N0YXR1c3JlZ30KPiA+ICBcZW5ke2ZpZ3Vy ZSp9Cj4gPiAKPiA+ICtUaGUgVExCSSAocmVhZC1vbmx5KSBiaXQgaW5kaWNhdGVzIHRoYXQgYW55 IGFzeW5jIHNmZW5jZS52bWEKPiA+IG9wZXJhdGlvbnMgYXJlCj4gPiArc3RpbGwgcGVuZGVkIG9u IHRoZSBoYXJ0LiBUaGUgdmFsdWU6MCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vCj4gPiBzZmVuY2Uu dm1hCj4gPiArb3BlcmF0aW9ucyBwZW5kaW5nIGFuZCB2YWx1ZToxIG1lYW5zIHRoYXQgdGhlcmUg YXJlIHN0aWxsCj4gPiBzZmVuY2Uudm1hIG9wZXJhdGlvbnMKPiA+ICtwZW5kaW5nIG9uIHRoZSBo YXJ0Lgo+ID4gKwo+ID4gK1doZW4gdGhlIHNzdGF0dXM6VExCSUMgYml0IGlzIHdyaXR0ZW4gMSwg aXQgdHJpZ2dlcnMgdGhlIGhhcmR3YXJlCj4gPiB0byBjaGVjayBpZgo+ID4gK3RoZXJlIGFyZSBh bnkgVExCIGludmFsaWRhdGUgb3BlcmF0aW9ucyBiZWluZyBwZW5kZWQuIFdoZW4gYWxsCj4gPiBv cGVyYXRpb25zIGFyZQo+ID4gK2ZpbmlzaGVkLCBhIFRMQiBJbnZhbGlkYXRlIGZpbmlzaCBpbnRl cnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQKPiA+ICsoc2VlIFNlY3Rpb25+XHJlZntzaXByZWd9KS4g V2hlbiB0aGUgc3N0YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbgo+ID4gMCwgaXQgd2lsbAo+ID4g K2NhdXNlIG5vdGhpbmcuIFJlYWRpbmcgc3N0YXR1czpUTEJJQyBiaXQgd2lsbCBhbGF3YXlzIHJl dHVybiAwLgo+ID4gKwo+ID4gIFRoZSBTUFAgYml0IGluZGljYXRlcyB0aGUgcHJpdmlsZWdlIGxl dmVsIGF0IHdoaWNoIGEgaGFydCB3YXMKPiA+IGV4ZWN1dGluZyBiZWZvcmUKPiA+ICBlbnRlcmlu ZyBzdXBlcnZpc29yIG1vZGUuICBXaGVuIGEgdHJhcCBpcyB0YWtlbiwgU1BQIGlzIHNldCB0byAw Cj4gPiBpZiB0aGUgdHJhcAo+ID4gIG9yaWdpbmF0ZWQgZnJvbSB1c2VyIG1vZGUsIG9yIDEgb3Ro ZXJ3aXNlLiAgV2hlbiBhbiBTUkVUCj4gPiBpbnN0cnVjdGlvbgo+ID4gQEAgLTMyOSw4ICszNDgs MTAgQEAgU1hMRU4tYml0IHJlYWQvd3JpdGUgcmVnaXN0ZXIgY29udGFpbmluZwo+ID4gaW50ZXJy dXB0IGVuYWJsZSBiaXRzLgo+ID4gIHtcZm9vdG5vdGVzaXplCj4gPiAgXGJlZ2lue2NlbnRlcn0K PiA+ICBcc2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPiA+IC1cYmVnaW57dGFidWxhcn17S2NG Y0ZjY30KPiA+IC1caW5zdGJpdHJhbmdle1NYTEVOLTF9ezEwfSAmCj4gPiArXGJlZ2lue3RhYnVs YXJ9e0tjRmNGY0ZjY30KPiA+ICtcaW5zdGJpdHJhbmdle1NYTEVOLTF9ezE0fSAmCj4gPiArXGlu c3RiaXR7MTN9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezEyfXsxMH0gJgo+ID4gIFxpbnN0Yml0ezl9 ICYKPiA+ICBcaW5zdGJpdHJhbmdlezh9ezZ9ICYKPiA+ICBcaW5zdGJpdHs1fSAmCj4gPiBAQCAt MzM5LDYgKzM2MCw4IEBAIFNYTEVOLWJpdCByZWFkL3dyaXRlIHJlZ2lzdGVyIGNvbnRhaW5pbmcK PiA+IGludGVycnVwdCBlbmFibGUgYml0cy4KPiA+ICBcaW5zdGJpdHswfSBcXAo+ID4gIFxobGlu ZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4gPiArXG11bHRpY29sdW1uezF9 e2N8fXtTVExCSVB9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtcd3ByaX0gJgo+ID4gIFxt dWx0aWNvbHVtbnsxfXtjfH17U0VJUH0gJgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9 ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSVB9ICYKPiA+IEBAIC0zNDYsNyArMzY5LDcg QEAgU1hMRU4tYml0IHJlYWQvd3JpdGUgcmVnaXN0ZXIgY29udGFpbmluZwo+ID4gaW50ZXJydXB0 IGVuYWJsZSBiaXRzLgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U1NJUH0gJgo+ID4gIFxtdWx0 aWNvbHVtbnsxfXtjfH17XHdwcml9IFxcCj4gPiAgXGhsaW5lCj4gPiAtU1hMRU4tMTAgJiAxICYg MyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICtTWExFTi0xNCAmIDEgJiAzICYgMSAmIDMgJiAxICYg MyAmIDEgJiAxIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gIH0K PiA+IEBAIC0zNTksOCArMzgyLDEwIEBAIFNYTEVOLTEwICYgMSAmIDMgJiAxICYgMyAmIDEgJiAx IFxcCj4gPiAge1xmb290bm90ZXNpemUKPiA+ICBcYmVnaW57Y2VudGVyfQo+ID4gIFxzZXRsZW5n dGh7XHRhYmNvbHNlcH17NHB0fQo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNjfQo+ID4gLVxp bnN0Yml0cmFuZ2V7U1hMRU4tMX17MTB9ICYKPiA+ICtcYmVnaW57dGFidWxhcn17S2NGY0ZjRmNj fQo+ID4gK1xpbnN0Yml0cmFuZ2V7U1hMRU4tMX17MTR9ICYKPiA+ICtcaW5zdGJpdHsxM30gJgo+ ID4gK1xpbnN0Yml0cmFuZ2V7MTJ9ezEwfSAmCj4gPiAgXGluc3RiaXR7OX0gJgo+ID4gIFxpbnN0 Yml0cmFuZ2V7OH17Nn0gJgo+ID4gIFxpbnN0Yml0ezV9ICYKPiA+IEBAIC0zNjksNiArMzk0LDgg QEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICBcaW5zdGJpdHswfSBc XAo+ID4gIFxobGluZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e2N8fXtTVExCSUV9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtcd3By aX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U0VJRX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsx fXtjfH17XHdwcml9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSUV9ICYKPiA+IEBAIC0z NzYsNyArNDAzLDcgQEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICBc bXVsdGljb2x1bW57MX17Y3x9e1NTSUV9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJp fSBcXAo+ID4gIFxobGluZQo+ID4gLVNYTEVOLTEwICYgMSAmIDMgJiAxICYgMyAmIDEgJiAxIFxc Cj4gPiArU1hMRU4tMTQgJiAxICYgMyAmIDEgJiAzICYgMSAmIDMgJiAxICYgMSBcXAo+ID4gIFxl bmR7dGFidWxhcn0KPiA+ICBcZW5ke2NlbnRlcn0KPiA+ICB9Cj4gPiBAQCAtNDEwLDYgKzQzNywx MiBAQCB3aGVuIHRoZSBTRUlFIGJpdCBpbiB0aGUge1x0dCBzaWV9IHJlZ2lzdGVyIGlzCj4gPiBj bGVhci4gIFRoZSBpbXBsZW1lbnRhdGlvbgo+ID4gIHNob3VsZCBwcm92aWRlIGZhY2lsaXRpZXMg dG8gbWFzaywgdW5tYXNrLCBhbmQgcXVlcnkgdGhlIGNhdXNlIG9mCj4gPiBleHRlcm5hbAo+ID4g IGludGVycnVwdHMuCj4gPiAKPiA+ICtBIHN1cGVydmlzb3ItbGV2ZWwgVExCIEludmFsaWRhdGUg ZmluaXNoIGludGVycnVwdCBpcyBwZW5kaW5nIGlmCj4gPiB0aGUgU1RMQklQIGJpdAo+ID4gK2lu IHRoZSB7XHR0IHNpcH0gcmVnaXN0ZXIgaXMgc2V0LiAgU3VwZXJ2aXNvci1sZXZlbCBUTEIgSW52 YWxpZGF0ZQo+ID4gZmluaXNoCj4gPiAraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGUg U1RMQklFIGJpdCBpbiB0aGUge1x0dCBzaWV9Cj4gPiByZWdpc3RlciBpcyBjbGVhci4KPiA+ICtX aGVuIGhhcnQgdGxiIGludmFsaWRhdGUgb3BlcmF0aW9ucyBhcmUgZmluaXNoZWQsIGhhcmR3YXJl IHdpbGwKPiA+IGNoYW5nZSBzc3RhdHVzOlRMQkkKPiA+ICtiaXQgZnJvbSAxIHRvIDAgYW5kIHRy aWdnZXIgVExCIEludmFsaWRhdGUgZmluaXNoIGludGVycnVwdC4KPiA+ICsKPiA+ICBcYmVnaW57 Y29tbWVudGFyeX0KPiA+ICBUaGUge1x0dCBzaXB9IGFuZCB7XHR0IHNpZX0gcmVnaXN0ZXJzIGFy ZSBzdWJzZXRzIG9mIHRoZSB7XHR0IG1pcH0KPiA+IGFuZCB7XHR0Cj4gPiAgbWllfSByZWdpc3Rl cnMuICBSZWFkaW5nIGFueSBmaWVsZCwgb3Igd3JpdGluZyBhbnkgd3JpdGFibGUgZmllbGQsCj4g PiBvZiB7XHR0Cj4gPiBAQCAtNTk4LDcgKzYzMSw5IEBAIHNvIGlzIG9ubHkgZ3VhcmFudGVlZCB0 byBob2xkIHN1cHBvcnRlZAo+ID4gZXhjZXB0aW9uIGNvZGVzLgo+ID4gICAgMSAgICAgICAgICYg NSAgICAgICAgICAgICAgICYgU3VwZXJ2aXNvciB0aW1lciBpbnRlcnJ1cHQgXFwKPiA+ICAgIDEg ICAgICAgICAmIDYtLTggICAgICAgICAgICAmIHtcZW0gUmVzZXJ2ZWR9IFxcCj4gPiAgICAxICAg ICAgICAgJiA5ICAgICAgICAgICAgICAgJiBTdXBlcnZpc29yIGV4dGVybmFsIGludGVycnVwdCBc XAo+ID4gLSAgMSAgICAgICAgICYgMTAtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwK PiA+ICsgIDEgICAgICAgICAmIDEwLS0xMSAgICAgICAgICAmIHtcZW0gUmVzZXJ2ZWR9IFxcCj4g PiArICAxICAgICAgICAgJiAxMiAgICAgICAgICAgICAgJiBTdXBlcnZpc29yIFRMQkkgZmluaXNo IGludGVycnVwdAo+ID4gXFwKPiA+ICsgIDEgICAgICAgICAmIDEzLS0xNSAgICAgICAgICAmIHtc ZW0gUmVzZXJ2ZWR9IFxcCj4gPiAgICAxICAgICAgICAgJiAkXGdlJDE2ICAgICAgICAgJiB7XGVt IEF2YWlsYWJsZSBmb3IgcGxhdGZvcm0gdXNlfQo+ID4gXFwgXGhsaW5lCj4gPiAgICAwICAgICAg ICAgJiAwICAgICAgICAgICAgICAgJiBJbnN0cnVjdGlvbiBhZGRyZXNzIG1pc2FsaWduZWQgXFwK PiA+ICAgIDAgICAgICAgICAmIDEgICAgICAgICAgICAgICAmIEluc3RydWN0aW9uIGFjY2VzcyBm YXVsdCBcXAo+ID4gQEAgLTg4NCw3ICs5MTksNyBAQCBwcm92aWRlZC4KPiA+ICBcbXVsdGljb2x1 bW57MX17Y3x9e29wY29kZX0gXFwKPiA+ICBcaGxpbmUKPiA+ICA3ICYgNSAmIDUgJiAzICYgNSAm IDcgXFwKPiA+IC1TRkVOQ0UuVk1BICYgYXNpZCAmIHZhZGRyICYgUFJJViAmIDAgJiBTWVNURU0g XFwKPiA+ICtTRkVOQ0UuVk1BICYgbW9kZTpwcG46YXNpZCAmIHZhZGRyICYgTE9DQUwgJiAwICYg U1lTVEVNIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gCj4gPiBA QCAtODk5LDIxICs5MzQsNzAgQEAgZnJvbSB0aGF0IGhhcnQgdG8gdGhlIG1lbW9yeS1tYW5hZ2Vt ZW50IGRhdGEKPiA+IHN0cnVjdHVyZXMuCj4gPiAgRnVydGhlciBkZXRhaWxzIG9uIHRoZSBiZWhh dmlvciBvZiB0aGlzIGluc3RydWN0aW9uIGFyZQo+ID4gIGRlc2NyaWJlZCBpbiBTZWN0aW9uflxy ZWZ7dmlydC1jb250cm9sfSBhbmQgU2VjdGlvbn5ccmVme3BtcC0KPiA+IHZtZW19Lgo+ID4gCj4g PiArU0ZFTkNFLlZNQSBpcyBkZWZpbmVkIGFzIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIGlu c3RydWN0aW9uLAo+ID4gd2hpY2ggbWVhbnMKPiA+ICt0aGF0IHRoZSBUTEIgb3BlcmF0aW9uIGlz IG5vdCBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIHdoZW4gdGhlCj4gPiBpbnN0cnVjdGlvbiByZXRp cmVzLgo+ID4gK1NvZnR3YXJlIG5lZWQgY2hlY2sgc3N0YXR1czpUTEJJIHRvIGRldGVybWluZSBh bGwgVExCIG9wZXJhdGlvbnMKPiA+IGNvbXBsZXRlLgo+ID4gK1RoZSBzc3RhdHVzOlRMQkkgZGVz Y3JpYmVkIGluIFNlY3Rpb25+XHJlZntzc3RhdHVzfS4gV2hlbiBoYXJkd2FyZQo+ID4gY2hhbmdl Cj4gPiArc3N0YXR1czpUTEJJIGJpdCBmcm9tIDEgdG8gMCwgdGhlIFRMQiBJbnZhbGlkYXRlIGZp bmlzaCBpbnRlcnJ1cHQKPiA+IHdpbGwgYmUKPiA+ICt0cmlnZ2VyZWQuCj4gPiArCj4gPiAgXGJl Z2lue2NvbW1lbnRhcnl9Cj4gPiAtVGhlIFNGRU5DRS5WTUEgaXMgdXNlZCB0byBmbHVzaCBhbnkg bG9jYWwgaGFyZHdhcmUgY2FjaGVzIHJlbGF0ZWQKPiA+IHRvCj4gPiArVGhlIFNGRU5DRS5WTUEg aXMgdXNlZCB0byBmbHVzaCBhbnkgbG9jYWwvcmVtb3RlIGhhcmR3YXJlIGNhY2hlcwo+ID4gcmVs YXRlZCB0bwo+ID4gIGFkZHJlc3MgdHJhbnNsYXRpb24uICBJdCBpcyBzcGVjaWZpZWQgYXMgYSBm ZW5jZSByYXRoZXIgdGhhbiBhIFRMQgo+ID4gIGZsdXNoIHRvIHByb3ZpZGUgY2xlYW5lciBzZW1h bnRpY3Mgd2l0aCByZXNwZWN0IHRvIHdoaWNoCj4gPiBpbnN0cnVjdGlvbnMKPiA+ICBhcmUgYWZm ZWN0ZWQgYnkgdGhlIGZsdXNoIG9wZXJhdGlvbiBhbmQgdG8gc3VwcG9ydCBhIHdpZGVyIHZhcmll dHkKPiA+IG9mCj4gPiAgZHluYW1pYyBjYWNoaW5nIHN0cnVjdHVyZXMgYW5kIG1lbW9yeS1tYW5h Z2VtZW50IHNjaGVtZXMuIAo+ID4gU0ZFTkNFLlZNQQo+ID4gIGlzIGFsc28gdXNlZCBieSBoaWdo ZXIgcHJpdmlsZWdlIGxldmVscyB0byBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlCj4gPiAtd3JpdGVz IGFuZCB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXJkd2FyZS4KPiA+ICt3cml0ZXMgYW5kIHRo ZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlLiBUaGVyZSBpcyBhIG1vZGUgYml0Cj4gPiB0 byBkZXRlcm1pbmUKPiA+ICtzZmVuY2Uudm1hIHdvdWxkIGJyb2FkY2FzdCBvbiBpbnRlcmNvbm5l Y3Qgb3Igbm90Lgo+ID4gIFxlbmR7Y29tbWVudGFyeX0KPiA+IAo+ID4gLVNGRU5DRS5WTUEgb3Jk ZXJzIG9ubHkgdGhlIGxvY2FsIGhhcnQncyBpbXBsaWNpdCByZWZlcmVuY2VzIHRvIHRoZQo+ID4g LW1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4KPiA+ICtcYmVnaW57ZmlndXJlfVto IV0KPiA+ICt7XGZvb3Rub3Rlc2l6ZQo+ID4gK1xiZWdpbntjZW50ZXJ9Cj4gPiArXGJlZ2lue3Rh YnVsYXJ9e2NAe31FQHt9S30KPiA+ICtcaW5zdGJpdHszMX0gJgo+ID4gK1xpbnN0Yml0cmFuZ2V7 MzB9ezl9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezh9ezB9IFxcCj4gPiArXGhsaW5lCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17e1x0dCBNT0RFfX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9 e3tcdHQgUFBOIChyb290IHBhZ2UgdGFibGUpfX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9 e3tcdHQgQVNJRH19IFxcCj4gPiArXGhsaW5lCj4gPiArMSAmIDIyICYgOSBcXAo+ID4gK1xlbmR7 dGFidWxhcn0KPiA+ICtcZW5ke2NlbnRlcn0KPiA+ICt9Cj4gPiArXHZzcGFjZXstMC4xaW59Cj4g PiArXGNhcHRpb257UlYzMiBzZmVuY2Uudm1hIHJzMiBmb3JtYXQufQo+ID4gK1xsYWJlbHtydjMy c2F0cH0KPiA+ICtcZW5ke2ZpZ3VyZX0KPiA+ICsKPiA+ICtcYmVnaW57ZmlndXJlfVtoIV0KPiA+ ICt7XGZvb3Rub3Rlc2l6ZQo+ID4gK1xiZWdpbntjZW50ZXJ9Cj4gPiArXGJlZ2lue3RhYnVsYXJ9 e0B7fVNAe31UQHt9VX0KPiA+ICtcaW5zdGJpdHJhbmdlezYzfXs2MH0gJgo+ID4gK1xpbnN0Yml0 cmFuZ2V7NTl9ezE2fSAmCj4gPiArXGluc3RiaXRyYW5nZXsxNX17MH0gXFwKPiA+ICtcaGxpbmUK PiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IE1PREV9fSAmCj4gPiArXG11bHRpY29sdW1u ezF9e3xjfH17e1x0dCBQUE4gKHJvb3QgcGFnZSB0YWJsZSl9fSAmCj4gPiArXG11bHRpY29sdW1u ezF9e3xjfH17e1x0dCBBU0lEfX0gXFwKPiA+ICtcaGxpbmUKPiA+ICs0ICYgNDQgJiAxNiBcXAo+ ID4gK1xlbmR7dGFidWxhcn0KPiA+ICtcZW5ke2NlbnRlcn0KPiA+ICt9Cj4gPiArXHZzcGFjZXst MC4xaW59Cj4gPiArXGNhcHRpb257UlY2NCBzZmVuY2Uudm1hIHJzMiBmb3JtYXQsIGZvciBNT0RF IHZhbHVlcywgb25seSBoaWdoZXN0Cj4gPiBiaXQ6NjMgaXMKPiA+ICt2YWxpZCBhbmQgb3RoZXJz IGFyZSByZXNlcnZlZC59Cj4gPiArXGxhYmVse3J2NjRzYXRwfQo+ID4gK1xlbmR7ZmlndXJlfQo+ ID4gCj4gPiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4gPiAtQ29uc2VxdWVudGx5LCBvdGhlciBoYXJ0 cyBtdXN0IGJlIG5vdGlmaWVkIHNlcGFyYXRlbHkgd2hlbiB0aGUKPiA+ICtUaGUgbW9kZSdzIGhp Z2hlc3QgYml0IGNvdWxkIGNvbnRyb2wgc2ZlbmNlLnZtYSBiZWhhdmlvciB3aXRoCj4gPiAxOmJy b2FkY2FzdCBvciAwOmxvY2FsLgo+ID4gK0lmIG9ubHkgaGF2ZSBtb2RlOmxvY2FsLCBvdGhlciBo YXJ0cyBtdXN0IGJlIG5vdGlmaWVkIHNlcGFyYXRlbHkKPiA+IHdoZW4gdGhlCj4gPiAgbWVtb3J5 LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBtb2RpZmllZC4KPiA+ICBPbmUg YXBwcm9hY2ggaXMgdG8gdXNlIDEpCj4gPiAgYSBsb2NhbCBkYXRhIGZlbmNlIHRvIGVuc3VyZSBs b2NhbCB3cml0ZXMgYXJlIHZpc2libGUgZ2xvYmFsbHksCj4gPiB0aGVuCj4gPiBAQCAtOTI4LDgg KzEwMTIsMTcgQEAgbW9kaWZpZWQgZm9yIGEgc2luZ2xlIGFkZHJlc3MgbWFwcGluZyAoaS5lLiwK PiA+IG9uZSBwYWdlIG9yIHN1cGVycGFnZSksIHtcZW0gcnMxfQo+ID4gIGNhbiBzcGVjaWZ5IGEg dmlydHVhbCBhZGRyZXNzIHdpdGhpbiB0aGF0IG1hcHBpbmcgdG8gZWZmZWN0IGEKPiA+IHRyYW5z bGF0aW9uCj4gPiAgZmVuY2UgZm9yIHRoYXQgbWFwcGluZyBvbmx5LiAgRnVydGhlcm1vcmUsIGZv ciB0aGUgY29tbW9uIGNhc2UKPiA+IHRoYXQgdGhlCj4gPiAgdHJhbnNsYXRpb24gZGF0YSBzdHJ1 Y3R1cmVzIGhhdmUgb25seSBiZWVuIG1vZGlmaWVkIGZvciBhIHNpbmdsZQo+ID4gYWRkcmVzcy1z cGFjZQo+ID4gLWlkZW50aWZpZXIsIHtcZW0gcnMyfSBjYW4gc3BlY2lmeSB0aGUgYWRkcmVzcyBz cGFjZS4gIFRoZSBiZWhhdmlvcgo+ID4gb2YKPiA+IC1TRkVOQ0UuVk1BIGRlcGVuZHMgb24ge1xl bSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPiA+ICtpZGVudGlmaWVyLCB7XGVtIHJz Mn0gY2FuIHNwZWNpZnkgdGhlIGFkZHJlc3Mgc3BhY2Ugd2l0aCB7XHR0Cj4gPiBzYXRwfSBmb3Jt YXQKPiA+ICt3aGljaCBpbmNsdWRlIGFzaWQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBpbmZv cm1hdGlvbi4KPiA+ICsKPiA+ICtcYmVnaW57Y29tbWVudGFyeX0KPiA+ICtXZSB1c2UgQVNJRCBh bmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHRvIGRldGVybWluZSBhZGRyZXNzIHNwYWNlCj4gPiBh bmQgdGhlIGZvcm1hdAo+ID4gK3N0b3JlZCBpbiByczIgaXMgc2ltaWxhciB3aXRoIHtcdHQgc2F0 cH0gZGVzY3JpYmVkIGluCj4gPiBTZWN0aW9uflxyZWZ7c2VjOnNhdHB9Lgo+ID4gK0FTSUQgYXJl IHVzZWQgYnkgbG9jYWwgaGFydHMgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBvZiB0aGUgYXNp ZAo+ID4gYXJlIHVzZWQgYnkKPiA+ICtvdGhlciBkaWZmZXJlbnQgVExCIHN5c3RlbXMsIGVnOiBJ T01NVS4KPiA+ICtcZW5ke2NvbW1lbnRhcnl9Cj4gPiArCj4gPiArVGhlIGJlaGF2aW9yIG9mIFNG RU5DRS5WTUEgZGVwZW5kcyBvbiB7XGVtIHJzMX0gYW5kIHtcZW0gcnMyfSBhcwo+ID4gZm9sbG93 czoKPiA+IAo+ID4gIFxiZWdpbntpdGVtaXplfQo+ID4gIFxpdGVtIElmIHtcZW0gcnMxfT17XHR0 IHgwfSBhbmQge1xlbSByczJ9PXtcdHQgeDB9LCB0aGUgZmVuY2UKPiA+IG9yZGVycyBhbGwKPiA+ IEBAIC05MzksMjMgKzEwMzIsMTggQEAgU0ZFTkNFLlZNQSBkZXBlbmRzIG9uIHtcZW0gcnMxfSBh bmQge1xlbQo+ID4gcnMyfSBhcyBmb2xsb3dzOgo+ID4gICAgICAgIGFsbCByZWFkcyBhbmQgd3Jp dGVzIG1hZGUgdG8gYW55IGxldmVsIG9mIHRoZSBwYWdlIHRhYmxlcywKPiA+IGJ1dCBvbmx5Cj4g PiAgICAgICAgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIGlkZW50aWZpZWQgYnkgaW50ZWdlciByZWdp c3RlciB7XGVtCj4gPiByczJ9Lgo+ID4gICAgICAgIEFjY2Vzc2VzIHRvIHtcZW0gZ2xvYmFsfSBt YXBwaW5ncyAoc2VlCj4gPiBTZWN0aW9uflxyZWZ7c2VjOnRyYW5zbGF0aW9ufSkKPiA+IC0gICAg ICBhcmUgbm90IG9yZGVyZWQuCj4gPiArICAgICAgYXJlIG5vdCBvcmRlcmVkLiBUaGUgbW9kZSBm aWVsZCBpbiByczIgaXMgZGV0ZXJtaW5lCj4gPiBicm9hZGNhc3Qgb3IgbG9jYWwuCj4gPiAgXGl0 ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0IHgwfSwgdGhl IGZlbmNlCj4gPiBvcmRlcnMKPiA+ICAgICAgICBvbmx5IHJlYWRzIGFuZCB3cml0ZXMgbWFkZSB0 byB0aGUgbGVhZiBwYWdlIHRhYmxlIGVudHJ5Cj4gPiBjb3JyZXNwb25kaW5nCj4gPiAgICAgICAg dG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiB7XGVtIHJzMX0sIGZvciBhbGwgYWRkcmVzcyBzcGFj ZXMuCj4gPiAgXGl0ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfSRc bmVxJHtcdHQgeDB9LCB0aGUKPiA+IGZlbmNlCj4gPiAgICAgICAgb3JkZXJzIG9ubHkgcmVhZHMg YW5kIHdyaXRlcyBtYWRlIHRvIHRoZSBsZWFmIHBhZ2UgdGFibGUKPiA+IGVudHJ5Cj4gPiAgICAg ICAgY29ycmVzcG9uZGluZyB0byB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9y IHRoZQo+ID4gYWRkcmVzcwo+ID4gLSAgICAgIHNwYWNlIGlkZW50aWZpZWQgYnkgaW50ZWdlciBy ZWdpc3RlciB7XGVtIHJzMn0uCj4gPiArICAgICAgc3BhY2UgaWRlbnRpZmllZCBieSBpbnRlZ2Vy IHJlZ2lzdGVyIHtcZW0gcnMyfS4gVGhlIG1vZGUKPiA+IGZpZWxkIGluIHJzMgo+ID4gKyAgICAg IGlzIGRldGVybWluZSBicm9hZGNhc3Qgb3IgbG9jYWwuCj4gPiAgICAgICAgQWNjZXNzZXMgdG8g Z2xvYmFsIG1hcHBpbmdzIGFyZSBub3Qgb3JkZXJlZC4KPiA+ICBcZW5ke2l0ZW1pemV9Cj4gPiAK PiA+IC1XaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFNYTEVOLTE6QVNJRE1BWCBv ZiB0aGUgdmFsdWUKPiA+IGhlbGQgaW4ge1xlbQo+ID4gLXJzMn0gYXJlIHJlc2VydmVkIGZvciBm dXR1cmUgdXNlIGFuZCBzaG91bGQgYmUgemVyb2VkIGJ5IHNvZnR3YXJlCj4gPiBhbmQgaWdub3Jl ZAo+ID4gLWJ5IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zLiAgRnVydGhlcm1vcmUsIGlmIEFTSURM RU5+JDwkfkFTSURNQVgsCj4gPiB0aGUKPiA+IC1pbXBsZW1lbnRhdGlvbiBzaGFsbCBpZ25vcmUg Yml0cyBBU0lETUFYLTE6QVNJRExFTiBvZiB0aGUgdmFsdWUKPiA+IGhlbGQgaW4ge1xlbQo+ID4g LXJzMn0uCj4gPiAtCj4gPiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4gPiAgU2ltcGxlciBpbXBsZW1l bnRhdGlvbnMgY2FuIGlnbm9yZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0KPiA+IHJzMX0g YW5kCj4gPiAgdGhlIEFTSUQgdmFsdWUgaW4ge1xlbSByczJ9IGFuZCBhbHdheXMgcGVyZm9ybSBh IGdsb2JhbCBmZW5jZS4KPiA+IEBAIC05OTQsNyArMTA4Miw3IEBAIGNhbiBleGVjdXRlIHRoZSBz YW1lIFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb24KPiA+IHdoaWxlIGEgZGlmZmVyZW50IEFTSUQgaXMg bG9hZGVkCj4gPiAgaW50byB7XHR0IHNhdHB9LCBwcm92aWRlZCB0aGUgbmV4dCB0aW1lIHtcdHQg c2F0cH0gaXMgbG9hZGVkIHdpdGgKPiA+IHRoZSByZWN5Y2xlZAo+ID4gIEFTSUQsIGl0IGlzIHNp bXVsdGFuZW91c2x5IGxvYWRlZCB3aXRoIHRoZSBuZXcgcGFnZSB0YWJsZS4KPiA+IAo+ID4gLVxp dGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIEFTSURzLCBvciBzb2Z0 d2FyZQo+ID4gY2hvb3NlcyB0bwo+ID4gK1xpdGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vz IG5vdCBwcm92aWRlIEFTSURzIGFuZCBQUE5zLCBvcgo+ID4gc29mdHdhcmUgY2hvb3NlcyB0bwo+ ID4gIGFsd2F5cyB1c2UgQVNJRCAwLCB0aGVuIGFmdGVyIGV2ZXJ5IHtcdHQgc2F0cH0gd3JpdGUs IHNvZnR3YXJlCj4gPiBzaG91bGQgZXhlY3V0ZQo+ID4gIFNGRU5DRS5WTUEgd2l0aCB7XGVtIHJz MX09e1x0dCB4MH0uICBJbiB0aGUgY29tbW9uIGNhc2UgdGhhdCBubwo+ID4gZ2xvYmFsCj4gPiAg dHJhbnNsYXRpb25zIGhhdmUgYmVlbiBtb2RpZmllZCwge1xlbSByczJ9IHNob3VsZCBiZSBzZXQg dG8gYQo+ID4gcmVnaXN0ZXIgb3RoZXIgdGhhbgo+ID4gQEAgLTEwMDMsMTMgKzEwOTEsMTQgQEAg bm90IGZsdXNoZWQuCj4gPiAKPiA+ICBcaXRlbSBJZiBzb2Z0d2FyZSBtb2RpZmllcyBhIG5vbi1s ZWFmIFBURSwgaXQgc2hvdWxkIGV4ZWN1dGUKPiA+IFNGRU5DRS5WTUEgd2l0aAo+ID4gIHtcZW0g cnMxfT17XHR0IHgwfS4gIElmIGFueSBQVEUgYWxvbmcgdGhlIHRyYXZlcnNhbCBwYXRoIGhhZCBp dHMgRwo+ID4gYml0IHNldCwKPiA+IC17XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3 aXNlLCB7XGVtIHJzMn0gc2hvdWxkIGJlIHNldCB0bwo+ID4gdGhlIEFTSUQgZm9yCj4gPiAtd2hp Y2ggdGhlIHRyYW5zbGF0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLgo+ID4gK3tcZW0gcnMyfSBtdXN0 IGJlIHtcdHQgeDB9OyBvdGhlcndpc2UsIHtcZW0gcnMyfSBzaG91bGQgYmUgc2V0IHRvCj4gPiB0 aGUgQVNJRCBhbmQKPiA+ICtyb290IHBhZ2UgdGFibGUncyBQUE4gZm9yIHdoaWNoIHRoZSB0cmFu c2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPiA+IAo+ID4gIFxpdGVtIElmIHNvZnR3YXJlIG1v ZGlmaWVzIGEgbGVhZiBQVEUsIGl0IHNob3VsZCBleGVjdXRlCj4gPiBTRkVOQ0UuVk1BIHdpdGgg e1xlbQo+ID4gIHJzMX0gc2V0IHRvIGEgdmlydHVhbCBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZS4g IElmIGFueSBQVEUgYWxvbmcKPiA+IHRoZSB0cmF2ZXJzYWwKPiA+ICBwYXRoIGhhZCBpdHMgRyBi aXQgc2V0LCB7XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3aXNlLAo+ID4ge1xlbSBy czJ9Cj4gPiAtc2hvdWxkIGJlIHNldCB0byB0aGUgQVNJRCBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0 aW9uIGlzIGJlaW5nCj4gPiBtb2RpZmllZC4KPiA+ICtzaG91bGQgYmUgc2V0IHRvIHRoZSBBU0lE IGFuZCByb290IHBhZ2UgdGFibGUncyBQUE4gZm9yIHdoaWNoIHRoZQo+ID4gdHJhbnNsYXRpb24K PiA+ICtpcyBiZWluZyBtb2RpZmllZC4KPiA+IAo+ID4gIFxpdGVtIEZvciB0aGUgc3BlY2lhbCBj YXNlcyBvZiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhCj4gPiBsZWFmIFBURSBhbmQK PiA+ICBjaGFuZ2luZyBhbiBpbnZhbGlkIFBURSB0byBhIHZhbGlkIGxlYWYsIHNvZnR3YXJlIG1h eSBjaG9vc2UgdG8KPiA+IGV4ZWN1dGUKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmt2bWFybSBtYWlsaW5nIGxpc3QKa3ZtYXJtQGxpc3RzLmNzLmNvbHVt YmlhLmVkdQpodHRwczovL2xpc3RzLmNzLmNvbHVtYmlhLmVkdS9tYWlsbWFuL2xpc3RpbmZvL2t2 bWFybQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6D969C49ED7 for ; Fri, 20 Sep 2019 02:30:28 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3CC3721929 for ; Fri, 20 Sep 2019 02:30:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Ey+JoPO+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3CC3721929 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.crashing.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Mime-Version:References:In-Reply-To: Date:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=iw7NGYkXBHFE0PuOjXX/zg+wPEcCLxV3vFji7kwIXEg=; b=Ey+JoPO+ZCbzui fKo6+5vZ4igM11aOstQYgwBbUdihK7DeK2tjRXPhOz7gHFoNHcalaJBK+ZoVbjPjo8QK0VsV8rHwD F1tRuaWZuxTrazBqROLhNIeY3dEzDaFtf4TPyAHht6NE/WJUJ6Nr7GUEBAaCqZKxaY2i9GvfEmK48 2uTenqYcVZgmolh0XkOdkOBbtFMqbeFYhAQY1wxDuejpQvT6Se2T3BpTZis5Ph73wW0Q7kwfzUnNG GzUyAxSmC+i8OhJPJocJPa/KRXlQn+h/CCQutdas2d9h2D1bzpUJHOvmcj/M06rrDVNIfU58rVo2N m00NKqfH1yZhlQpacp5Q==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.2 #3 (Red Hat Linux)) id 1iB8gf-00063v-Mf; Fri, 20 Sep 2019 02:30:21 +0000 Received: from gate.crashing.org ([63.228.1.57]) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iB8gY-00062B-4y; Fri, 20 Sep 2019 02:30:17 +0000 Received: from localhost (localhost.localdomain [127.0.0.1]) by gate.crashing.org (8.14.1/8.14.1) with ESMTP id x8K2RJ7O003665; Thu, 19 Sep 2019 21:27:20 -0500 Message-ID: Subject: Re: [tech-privileged] [RFC PATCH V1] riscv-privileged: Add broadcast mode to sfence.vma From: Benjamin Herrenschmidt To: Andrew Waterman , Guo Ren Date: Fri, 20 Sep 2019 12:27:19 +1000 In-Reply-To: References: <1568896556-28769-1-git-send-email-guoren@kernel.org> X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.1 Mime-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190919_193014_513788_800AF9CC X-CRM114-Status: GOOD ( 37.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: julien.thierry@arm.com, catalin.marinas@arm.com, palmer@sifive.com, will.deacon@arm.com, Atish.Patra@wdc.com, julien.grall@arm.com, gary@garyguo.net, linux-riscv@lists.infradead.org, kvmarm@lists.cs.columbia.edu, jean-philippe@linaro.org, linux-csky@vger.kernel.org, rppt@linux.ibm.com, Guo Ren , jacob.jun.pan@linux.intel.com, tech-privileged@lists.riscv.org, marc.zyngier@arm.com, linux-arm-kernel@lists.infradead.org, feiteng_li@c-sky.com, Anup.Patel@wdc.com, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, dwmw2@infradead.org Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVGh1LCAyMDE5LTA5LTE5IGF0IDA5OjA0IC0wNzAwLCBBbmRyZXcgV2F0ZXJtYW4gd3JvdGU6 Cj4gVGhpcyBuZWVkcyB0byBiZSBkaXNjdXNzZWQgYW5kIGRlYmF0ZWQgYXQgbGVuZ3RoOyBwcm9w b3NpbmcgZWRpdHMgdG8KPiB0aGUgc3BlYyBhdCB0aGlzIHN0YWdlIGlzIHB1dHRpbmcgdGhlIGNh cnQgYmVmb3JlIHRoZSBob3JzZSEKPiAKPiBXZSBzaG91bGRu4oCZdCBjaGFuZ2UgdGhlIGRlZmlu aXRpb24gb2YgdGhlIGV4aXN0aW5nIFNGRU5DRS5WTUEKPiBpbnN0cnVjdGlvbiB0byBhY2NvbXBs aXNoIHRoaXMuIEl04oCZcyBhbHNvIG5vdCBhYnVuZGFudGx5IGNsZWFyIHRvIG1lCj4gdGhhdCB0 aGlzIHNob3VsZCBiZSBhbiBpbnN0cnVjdGlvbjogVExCIHNob290ZG93biBsb29rcyBtb3JlIGxp a2UKPiBNTUlPLgoKUXVpdGUgYSBmZXcgcG9pbnRzIHRvIG1ha2UgaGVyZToKCiAtIFRMQiBzaG9v dGRvd24gYXMgTU1JTyBpcyBhIHByb2JsZW0gd2hlbiB5b3Ugc3RhcnQgdHJ5aW5nIHRvIGRvIGl0 CmRpcmVjdGx5IGZyb20gZ3Vlc3RzICh3aGljaCBpcyB2ZXJ5IGRlc2lyYWJsZSkuIEkgY2FuIGVs YWJvcmF0ZSBpZiB5b3UKd2FudCwgYnV0IGl0IGdlbmVyYWxseSBib2lscyBkb3duIHRvIGhhdmlu ZyBhIHBpbGUgb2YgY29waWVzIG9mIHRoZQpNTUlPIHJlc291cmNlcyB0byBhc3NpZ24gdG8gZ3Vl c3RzIGFuZCBoYXZpbmcgdG8gY29uc3RhbnRseSBjaGFuZ2UKbWFwcGluZ3Mgd2hpY2ggaXMgdW5y ZWFsaXN0aWMuCgogLSBJIGdlbmVyYWxseSBoYXZlIHZlcnkgc2VyaW91cyBkb3VidHMgYXMgdG8g dGhlIHZhbHVlIG9mIGRvaW5nCmJyb2FkY2FzdCBUTEIgc2hvb3Rkb3ducyBpbiBIVy4gSSB3ZW50 IGF0IGxlbmdodCBhYm91dCBpdCBkdXJpbmcgTGludXgKUGx1bWJlcnMgQ29uZmVyZW5jZSwgYnV0 IEknbGwgdHJ5IHRvIHN1bW1hcmlzZSBoZXJlLCBmcm9tIG15IGV4cGVyaWVuY2UKYmFjayBhdCBJ Qk0gd29ya2luZyBvbiBQT1dFUi4gSW4gbm8gc3BlY2lhbCBvcmRlcjoKCiAgICogSXQgZG9lc24n dCBzY2FsZSB3ZWxsLiBZb3UgaGF2ZSB0byBkcmFpbiBhbGwgdGhlIHRhcmdldCBDUFUgcXVldWVz Cm9mIGFscmVhZHkgdHJhbnNsYXRlZCBsb2FkIHN0b3Jlcywga2VlcCBvcmRlcmluZywgZXRjLi4u IGl0IGNhdXNlcyBhCmdpYW50IGZhYnJpYyB0cmFmZmljIGphbS4gRXhwZXJpZW5jZSBoYXMgc2hv d24gdGhhdCBvbiBzb21lIFBPV0VSCnN5c3RlbXMsIGl0IGJlY29tZXMgZXh0cmVtZWx5IGV4cGVu c2l2ZS4KCiAgICogU29tZSBPUyBzdWNoIGFzIExpbnV4IHRyYWNrIHdoaWNoIENQVSBoYXMgc2Vl biBhIGdpdmVuIGNvbnRleHQuClRoYXQgYWxsb3dzIHRvICJ0YXJnZXQiIFRMQiBpbnZhbGlkYXRp b25zIGluIGEgbW9yZSBzZW5zaWJsZSB3YXkuCkJyb2FkY2FzdCBpbnN0cnVjdGlvbnMgdGVuZCB0 byBsb3NlIHRoYXQgYWJpbGl0eSAoaXQncyBoYXJkIHRvIGRvIGluIEhXCmVzcC4gaW4gYSB3YXkg dGhhdCBjYW4gYmUgdmlydHVhbGl6ZWQgcHJvcGVybHkpLgoKICAgKiBCZWNhdXNlIHRob3NlIGlu c3RydWN0aW9ucyBjYW4gdGFrZSBhIHZlcnkgbG9uZyB0aW1lIChmb3IgdGhlCmFib3ZlIHJlYXNv bnMgYW5kIHNvbWUgb2YgYmVsb3cgb25lcyksIG9yIGF0IGxlYXN0IHdoYXRldmVyIGNvbnRleHQK c3luY2hyb25pemluZyBpbnN0cnVjdGlvbiB0aGF0IGZvbGxvdyB3aGljaCB3YWl0cyBmb3IgY29t cGxldGlvbiBvZiB0aGUKaW52YWxpZGF0aW9ucywgeW91IGVuZCB1cCB3aXRoIGEgQ1BVIGVmZmVj dGl2ZWx5ICJzdHVjayIgZm9yIGEgbG9uZwp0aW1lLCBub3QgdGFraW5nIGludGVycnVwdHMsIGlu Y2x1ZGluZyB0aG9zZSByb3V0ZWQgdG8gaGlnaGVyIHByaW9yaXR5CmxldmVscyAoaWUuIGh5cGVy dmlzb3IgZXRjLi4uKS4gVGhpcyBpcyBwcm9ibGVtYXRpYy4gQSBjb21wbGV0aW9uCnBvbGxpbmcg bWVjaGFuaXNtIGlzIHByZWZlcmFibGUgc28gdGhhdCBvbmNlIGNhbiBzdGlsbCBoYW5kbGUgc3Vj aCB3b3JrCndoaWxlIHdhaXRpbmcgYnV0IGlzIGhhcmQgdG8gYXJjaGl0ZWN0L2ltcGxlbWVudCBw cm9wZXJseSB3aGVuIGRvbmUgYXMKImluc3RydWN0aW9ucyIgc2luY2UgdGhleSBjYW4gaGFwcGVu IGNvbmN1cnJlbnRseSBmcm9tIG11bHRpcGxlCmNvbnRleHRzLiBJdCdzIGVhc2llciB3aXRoIE1N SU8gYnV0IHRoYXQgaGFzIG90aGVyIGlzc3Vlcy4KCiAgICogSXQgaW50cm9kdWNlcyByYWNlcyB3 aXRoIGFueXRoaW5nIHRoYXQgZG9lcyBTVyB3YWxrIG9mIHBhZ2UKdGFibGVzLiBGb3IgZXhhbXBs ZSBNTUlPIGVtdWxhdGlvbiBieSBhIGh5cGVydmlzb3IgY2Fubm90IGJlIGRvbmUgcmFjZS0KZnJl ZSBpZiB0aGUgZ3Vlc3QgY2FuIGRvIGl0cyBvd24gYnJvYWRjYXN0IGludmFsaWRhdGlvbnMgYW5k IHRoZQpoeXBlcnZpc29yIGhhcyB0byB3YWxrIHRoZSBndWVzdCBwYWdlIHRhYmxlcyB0byB0cmFu c2xhdGUuIEkgY2FuCmVsYWJvcmF0ZSBpZiByZXF1ZXN0ZWQuCgogICAqIFRob3NlIGludmFsaWRh dGlvbnMgbmVlZCB0byBhbHNvIHRhcmdldCBuZXN0IGFnZW50cyB0aGF0IGNhbiBob2xkCnRyYW5z bGF0aW9ucywgc3VjaCBhcyBJT01NVXMgdGhhdCBjYW4gb3BlcmF0ZSBpbiB1c3IgY29udGV4dHMg ZXRjLi4uClN1Y2ggSU9NTVVzIGNhbiB0YWtlIGEgVkVSWSBMT05HIHRpbWUgdG8gcHJvY2VzcyBp bnZhbGlkYXRpb25zLAplc3BlY2lhbGx5IGlmIHRyYW5zbGF0aW9ucyBoYXZlIGJlZW4gY2hlY2tl ZCBvdXQgYnkgZGV2aWNlcyBzdWNoIGFzClBDSWUgZGV2aWNlcyB1c2luZyBBVFMuIFNvbWUgR1BV cyBmb3IgZXhhbXBsZSBjYW4gaGl0IGEgd29yc3QgY2FzZSBvZgpodW5kcmVkcyBvZiAqbWlsbGlz ZWNvbmRzKiB0byBwcm9jZXNzIGEgVExCIGludmFsaWRhdGlvbi4KCiAtIE5vdyBmb3IgdGhlIHBy b3Bvc2VkIHNjaGVtZS4gSSByZWFsbHkgZG9uJ3QgbGlrZSBpbnRyb2R1Y2luZyBhICpuZXcqCndh eSBvZiB0YWdnaW5nIGFuIGFkZHJlc3Mgc3BhY2UgdXNpbmcgdGhlIFBQTi4gSXQncyBhIGhhY2su IFRoZSByaWdodAp3YXkgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGV4aXN0aW5nIGNvbnRleHQgdGFn cyBhcmUgYmlnIGVub3VnaCB0byBub3QKcmVxdWlyZSByZS11c2UgYW5kIHRodXMgY2FuIGJlIHRy ZWF0ZWQgYXMgZ2xvYmFsIGNvbnRleHQgdGFncyBieSB0aGUKaHlwZXJ2aXNvciBhbmQgT1MuIElF LiBoYXZlIGJpZyBlbm91Z2ggVk1JRHMgYW5kIEFTSURzIHRoYXQgZWFjaApydW5uaW5nIFZNIGNh biBoYXZlIGEgZ2xvYmFsIHN0YWJsZSBWTUlEIGFuZCBlYWNoIHByb2Nlc3Mgd2l0aGluIGEKZ2l2 ZW4gVk0gY2FuIGhhdmUgYSBnbG9iYWwgKHdpdGhpbiB0aGF0IFZNKSBBU0lEIGluc3RlYWQgb2Yg cGxheWluZwpyZWFsbG9jYXRpb24gb2YgQVNJRCB0cmlja3MgYXQgY29udGV4dCBzd2l0Y2ggKHRo YXQncyB2ZXJ5IGluZWZmaWNpZW50CmFueXdheSwgc28gdGhhdCBzaG91bGQgYmUgZml4ZWQgZm9y IGFueXRoaW5nIHRoYXQgY2xhaW1zIHBlcmZvcm1hbmNlCmFuZCBzY2FsYWJpbGl0eSkuCgpOb3cg YWxsIG9mIHRoZXNlIHRoaW5ncyBjYW4gcHJvYmFibHkgaGF2ZSBzb2x1dGlvbnMgYnV0IGV4cGVy aWVuY2UKZG9lc24ndCBzZWVtIHRvIGluZGljYXRlIHRoYXQgaXQncyByZWFsbHkgd29ydGh3aGls ZS4gV2UgYXJlIGJldHRlciBvZmYKbWFraW5nIHN1cmUgd2UgaGF2ZSBhIHJlYWxseSBmYXN0IElQ SSBwYXRoIHRvIHBlcmZvcm0gdGhvc2UgdmlhCmludGVycnVwdHMgYW5kIGxvY2FsbHkgdG8gdGhl IHRhcmdldHRlZCBDUFVzIElNSE8uCgpDaGVlcnMsCkJlbi4KCj4gCj4gT24gVGh1LCBTZXAgMTks IDIwMTkgYXQgNTozNiBBTSBHdW8gUmVuIDxndW9yZW5Aa2VybmVsLm9yZz4gd3JvdGU6Cj4gPiBG cm9tOiBHdW8gUmVuIDxyZW5fZ3VvQGMtc2t5LmNvbT4KPiA+IAo+ID4gVGhlIHBhdGNoIGlzIGZv ciBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtaXNhLW1hbnVhbAo+ID4gCj4gPiBUaGUg cHJvcG9zYWwgaGFzIGJlZW4gdGFsa2VkIGluIExQQy0yMDE5IFJJU0MtViBNQyByZWYgWzFdLiBI ZXJlIGlzCj4gPiB0aGUKPiA+IGZvcm1hbCBwYXRjaC4KPiA+IAo+ID4gSW50cm9kdWN0aW9uCj4g PiA9PT09PT09PT09PT0KPiA+IAo+ID4gVXNpbmcgdGhlIEhhcmR3YXJlIFRMQiBicm9hZGNhc3Qg aW52YWxpZGF0aW9uIGluc3RydWN0aW9uIHRvCj4gPiBtYWludGFpbiB0aGUKPiA+IHN5c3RlbSBU TEIgaXMgYSBnb29kIGNob2ljZSBhbmQgaXQnbGwgc2ltcGxpZnkgdGhlIHN5c3RlbSBzb2Z0d2Fy ZQo+ID4gZGVzaWduLgo+ID4gVGhlIHByb3Bvc2FsIGhvcGVzIHRvIGFkZCBhIGJyb2FkY2FzdCBt b2RlIHRvIHRoZSBzZmVuY2Uudm1hIGluIHRoZQo+ID4gcmlzY3YtcHJpdmlsZWdlIHNwZWNpZmlj YXRpb24uIFRvIHN1cHBvcnQgdGhlIHNmZW5jZS52bWEgYnJvYWRjYXN0Cj4gPiBtb2RlLAo+ID4g dGhlcmUgYXJlIHR3byBtb2RpZmljYXRpb24gaW50cm9kdWNlZCBiZWxvdzoKPiA+IAo+ID4gIDEp IEFkZCBQR0QuUFBOIChyb290IHBhZ2UgdGFibGUncyBQUE4pIGFzIHRoZSB1bmlxdWUgaWRlbnRp ZmllciBvZgo+ID4gdGhlCj4gPiAgICAgYWRkcmVzcyBzcGFjZSBpbiBhZGRpdGlvbiB0byBhc2lk L3ZtaWQuIENvbXBhcmVkIHRvIHRoZQo+ID4gZHluYW1pY2FsbHkKPiA+ICAgICBjaGFuZ2VkIGFz aWQvdm1pZCwgUEdELlBQTiBpcyBmaXhlZCB0aHJvdWdob3V0IHRoZSBhZGRyZXNzCj4gPiBzcGFj ZSBsaWZlCj4gPiAgICAgY3ljbGUuIFRoaXMgZmVhdHVyZSBlbmFibGVzIHVuaWZvcm0gYWRkcmVz cyBzcGFjZQo+ID4gaWRlbnRpZmljYXRpb24KPiA+ICAgICBiZXR3ZWVuIGRpZmZlcmVudCBUTEIg c3lzdGVtcyAoYWN0dWFsbHksIGl0J3MgZGlmZmljdWx0IHRvCj4gPiB1bmlmeSB0aGUKPiA+ICAg ICBhc2lkL3ZtaWQgYmV0d2VlbiB0aGUgQ1BVIHN5c3RlbSBhbmQgdGhlIElPTU1VIHN5c3RlbSwg YmVjYXVzZQo+ID4gdGhlaXIKPiA+ICAgICBtZWNoYW5pc21zIGFyZSBkaWZmZXJlbnQpCj4gPiAK PiA+ICAyKSBNb2RpZnkgdGhlIGRlZmluaXRpb24gb2YgdGhlIHNmZW5jZS52bWEgaW5zdHJ1Y3Rp b24gZnJvbQo+ID4gc3luY2hyb25vdXMKPiA+ICAgICBtb2RlIHRvIGFzeW5jaHJvbm91cyBtb2Rl LCB3aGljaCBtZWFucyB0aGF0IHRoZSBjb21wbGV0aW9uIG9mCj4gPiB0aGUgVExCCj4gPiAgICAg b3BlcmF0aW9uIGlzIG5vdCBndWFyYW50ZWVkIHdoZW4gdGhlIHNmZW5jZS52bWEgaW5zdHJ1Y3Rp b24KPiA+IHJldGlyZXMuCj4gPiAgICAgSXQgbmVlZHMgdG8gYmUgY29tcGxldGVkIGJ5IGNoZWNr aW5nIHRoZSBmbGFnIGJpdCBvbiB0aGUgaGFydC4KPiA+IFRoZQo+ID4gICAgIHNmZW5jZS52bWEg cmVxdWVzdCBmaW5pc2ggY2FuIG5vdGlmeSB0aGUgc29mdHdhcmUgYnkgZ2VuZXJhdGluZwo+ID4g YW4KPiA+ICAgICBpbnRlcnJ1cHQuIFRoaXMgZnVuY3Rpb24gYWxsZXZpYXRlcyB0aGUgbGFyZ2Ug ZGVsYXkgb2YgVExCCj4gPiBpbnZhbGlkYXRpb24KPiA+ICAgICBpbiB0aGUgUENJIEFUUyBzeXN0 ZW0uCj4gPiAKPiA+IEFkZCBTMS9TMi5QR0QuUFBOIGZvciBBU0lEL1ZNSUQKPiA+ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiA+IAo+ID4gUEdEIGlzIGdsb2JhbCBkaXJlY3Rvcnkg KGRlZmluZWQgaW4gbGludXgpIGFuZCBQUE4gaXMgcGFnZSBwaHlzaWNhbAo+ID4gbnVtYmVyCj4g PiAoZGVmaW5lZCBpbiByaXNjdi1zcGVjKS4gUEdELlBOTiBjb3JyZXNwb25kcyB0byB0aGUgcm9v dCBwYWdlIHRhYmxlCj4gPiBwb2ludGVyCj4gPiBvZiB0aGUgYWRkcmVzcyBzcGFjZSwgaS5lLiBt bS0+cGdkIChsaW51eCBjb25jZXB0KS4KPiA+IAo+ID4gSW4gQ1BVL0lPTU1VIFRMQiwgd2UgdXNl IGFzaWQvdm1pZCB0byBkaXN0aW5ndWlzaCB0aGUgYWRkcmVzcyBzcGFjZQo+ID4gb2YKPiA+IHBy b2Nlc3Mgb3IgdmlydHVhbCBtYWNoaW5lLiBEdWUgdG8gdGhlIGxpbWl0YXRpb24gb2YgaWQgZW5j b2RpbmcsCj4gPiBpdCBjYW4KPiA+IG9ubHkgcmVwcmVzZW50IGEgcGFydCh3aW5kb3cpIG9mIHRo ZSBhZGRyZXNzIHNwYWNlLiBTMS9TMi5QR0QuUFBOCj4gPiBhcmUgdGhlCj4gPiByb290IHBhZ2Ug dGFibGUncyBQUE5zIG9mIHRoZSBhZGRyZXNzIHNwYWNlcyBhbmQgUzEvUzIuUEdELlBQTiBhcmUK PiA+IHRoZQo+ID4gdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFkZHJlc3Mgc3BhY2VzLgo+ID4g Cj4gPiBGb3IgdGhlIENQVSBTTVAgc3lzdGVtLCB5b3UgY2FuIHVzZSBjb250ZXh0IHN3aXRjaCB0 byBwZXJmb3JtIHRoZQo+ID4gbmVjZXNzYXJ5Cj4gPiBzb2Z0d2FyZSBtZWNoYW5pc20gdG8gZW5z dXJlIHRoYXQgdGhlIGFzaWQvdm1pZCBvbiBhbGwgaGFydHMgaXMKPiA+IGNvbnNpc3RlbnQKPiA+ IChwbGVhc2UgcmVmZXIgdG8gdGhlIGFybTY0IGFzaWQgbWVjaGFuaXNtKS4gSW4gdGhpcyB3YXks IHRoZSBUTEIKPiA+IGJyb2FkY2FzdAo+ID4gaW52YWxpZGF0aW9uIGluc3RydWN0aW9uIGNhbiBk ZXRlcm1pbmUgdGhlIGFkZHJlc3Mgc3BhY2UgcHJvY2Vzc2VkCj4gPiBvbiBhbGwKPiA+IGhhcnRz IGJ5IGFzaWQvdm1pZC4KPiA+IAo+ID4gRGlmZmVyZW50IGZyb20gdGhlIENQVSBTTVAgc3lzdGVt LCB0aGVyZSBpcyBubyBjb250ZXh0IHN3aXRjaCBmb3IKPiA+IHRoZQo+ID4gRE1BLUlPTU1VIHN5 c3RlbSwgc28gdGhlIHVuaWZpY2F0aW9uIHdpdGggdGhlIENQVSBhc2lkL3ZtaWQgY2Fubm90Cj4g PiBiZQo+ID4gZ3VhcmFudGVlZC4gU28gd2UgbmVlZCBhIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0 aGUgYWRkcmVzcyBzcGFjZSB0bwo+ID4gZXN0YWJsaXNoIGEgY29tbXVuaWNhdGlvbiBicmlkZ2Ug YmV0d2VlbiB0aGUgVExCcyBvZiBkaWZmZXJlbnQKPiA+IHN5c3RlbXMuCj4gPiAKPiA+IFRoYXQg aXMgUEdELlBQTiAoZm9yIHZpcnR1YWxpemF0aW9uIHNjZW5hcmlvczogUzEvUzIuUEdELlBQTikK PiA+IAo+ID4gY3VycmVudDoKPiA+ICBzZmVuY2Uudm1hICByczEgPSB2YWRkciwgcnMyID0gYXNp ZAo+ID4gIGhmZW5jZS52dm1hIHJzMSA9IHZhZGRyLCByczIgPSBhc2lkCj4gPiAgaGZlbmNlLmd2 bWEgcnMxID0gZ2FkZHIsIHJzMiA9IHZtaWQKPiA+IAo+ID4gcHJvcG9zZWQ6Cj4gPiAgc2ZlbmNl LnZtYSAgcnMxID0gdmFkZHIsIHJzMiA9IG1vZGU6cHBuOmFzaWQKPiA+ICBoZmVuY2UudnZtYSBy czEgPSB2YWRkciwgcnMyID0gbW9kZTpwcG46YXNpZAo+ID4gIGhmZW5jZS5ndm1hIHJzMSA9IGdh ZGRyLCByczIgPSBtb2RlOnBwbjp2bWlkCj4gPiAKPiA+ICBtb2RlICAgICAgLSBicm9hZGNhc3Qg fCBsb2NhbAo+ID4gIHBwbiAgICAgICAtIHRoZSBQUE4gb2YgdGhlIGFkZHJlc3Mgc3BhY2Ugb2Yg dGhlIHJvb3QgcGFnZSB0YWJsZQo+ID4gIHZtaWQvYXNpZCAtIHRoZSB3aW5kb3cgaWRlbnRpZmll ciBvZiB0aGUgYWRkcmVzcyBzcGFjZQo+ID4gCj4gPiBBdCB0aGUgTGludXggUGx1bWJlciBDb25m ZXJlbmNlIDIwMTkgUklTQ1YtTUMsIHJlZjpbMV0sIHdlJ3ZlCj4gPiBzaG93ZWQgdHdvCj4gPiBJ T01NVSBleGFtcGxlcyB0byBleHBsYWluIGhvdyBpdCB3b3JrIHdpdGggaGFyZHdhcmUuCj4gPiAK PiA+IDEpIEluIGEgbGlnaHR3ZWlnaHQgSU9NTVUgc3lzdGVtICh1cCB0byA2NCBhZGRyZXNzIHNw YWNlcyksIHRoZQo+ID4gaGFyZHdhcmUKPiA+ICAgIGNvdWxkIGRpcmVjdGx5IGNvbnZlcnQgUEdE LlBQTiBpbnRvIERJRCAoSU9NTVUgQVNJRCkKPiA+IAo+ID4gMikgRm9yIHRoZSBQQ0kgQVRTIHNj ZW5hcmlvLCBpdHMgSU8gQVNJRC9WTUlEIGVuY29kaW5nIHNwYWNlIGNhbgo+ID4gc3VwcG9ydAo+ ID4gICAgYSB2ZXJ5IGxhcmdlIG51bWJlciBvZiBhZGRyZXNzIHNwYWNlcy4gV2UgdXNlIHR3byBy ZXZlcnNlCj4gPiBtYXBwaW5nCj4gPiAgICB0YWJsZXMgdG8gbGV0IHRoZSBoYXJkd2FyZSB0cmFu c2xhdGUgUzEvUzIuUEdELlBQTiBpbnRvIElPCj4gPiBBU0lEL1ZNSUQuCj4gPiAKPiA+IEFTWU5D IEJST0FEQ0FTVCBTRkVOQ0UuVk1BCj4gPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KPiA+ IAo+ID4gVG8gc3VwcG9ydCB0aGUgaGlnaCBsYXRlbmN5IGJyb2FkY2FzdCBzZmVuY2Uudm1hIG9w ZXJhdGlvbiBpbiB0aGUKPiA+IFBDSSBBVFMKPiA+IHVzYWdlIHNjZW5hcmlvLCB3ZSBtb2RpZnkg dGhlIHNmZW5jZS52bWEgZnJvbSBzeW5jaHJvbm91cyBtb2RlIHRvCj4gPiBhc3luY2hyb25vdXMg bW9kZS4gKEZvciBzaW1wbGVyIGltcGxlbWVudGF0aW9uLCBpZiBoYXJkd2FyZSBvbmx5Cj4gPiBp bXBsZW1lbnQKPiA+IHN5bmNocm9ub3VzIG1vZGUgYW5kIHNvZnR3YXJlIHN0aWxsIHdvcmsgaW4g YXN5bmNocm9ub3VzIG1vZGUpCj4gPiAKPiA+IFRvIGltcGxlbWVudCB0aGUgYXN5bmNocm9ub3Vz IG1vZGUsIDMgZmVhdHVyZXMgYXJlIGFkZGVkOgo+ID4gIDEpIHNzdGF0dXM6VExCSQo+ID4gICAg IEEgInN0YXR1cyBiaXQgLSBUTEJJIiBpcyBhZGRlZCB0byB0aGUgc3N0YXR1cyByZWdpc3Rlci4g VGhlCj4gPiBUTEJJIHN0YXR1cwo+ID4gICAgIGJpdCBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIHN0 aWxsIG91dHN0YW5kaW5nIHNmZW5jZS52bWEKPiA+IHJlcXVlc3RzIG9uIHRoZQo+ID4gICAgIGN1 cnJlbnQgaGFydC4KPiA+ICAgICBWYWx1ZToKPiA+ICAgICAgIDE6IHNmZW5jZS52bWEgcmVxdWVz dHMgYXJlIG5vdCBjb21wbGV0ZWQuCj4gPiAgICAgICAwOiBhbGwgc2ZlY2Uudm1hIHJlcXVlc3Rz IGNvbXBsZXRlZCwgcmVxdWVzdCBxdWV1ZSBpcyBlbXB0eS4KPiA+IAo+ID4gIDIpIHNzdGF0dXM6 VExCSUMKPiA+ICAgICBBICJjb250cm9sIGJpdHMgLSBUTEJJQyIgaXMgYWRkZWQgdG8gc3N0YXR1 cyByZWdpc3Rlci4gVGhlCj4gPiBUTEJJQyBjb250cm9sCj4gPiAgICAgYml0cyBhcmUgY29udHJv bGxlZCBieSBzb2Z0d2FyZS4KPiA+ICAgICAiV3JpdGUgMSIgd2lsbCB0cmlnZ2VyIHRoZSBjdXJy ZW50IGhhcnQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlCj4gPiBhcmUgc3RpbGwKPiA+ICAgICBvdXRz dGFuZGluZyBzZmVuY2Uudm1hIHJlcXVlc3RzLiBJZiB0aGVyZSBhcmUgdW5maW5pc2hlZAo+ID4g cmVxdWVzdHMsIGFuCj4gPiAgICAgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gdGhl IHJlcXVlc3QgaXMgY29tcGxldGVkLAo+ID4gbm90aWZ5aW5nIHRoZQo+ID4gICAgIHNvZnR3YXJl IHRoYXQgYWxsIG9mIHRoZSBjdXJyZW50IHNmZW5jZS52bWEgcmVxdWVzdHMgaGF2ZSBiZWVuCj4g PiBjb21wbGV0ZWQuCj4gPiAgICAgIldyaXRlIDAiIHdpbGwgY2F1c2Ugbm90aGluZy4KPiA+IAo+ ID4gIDMpIHN1cGVydmlzb3IgaW50ZXJydXB0IHJlZ2lzdGVyIChzaXAgJiBzaWUpOlRMQkkgZmlu aXNoIGludGVycnVwdAo+ID4gICAgIEEgcGVyLWhhcnQgaW50ZXJydXB0IGlzIGFkZGVkIHRvIHN1 cGVydmlzb3IgaW50ZXJydXB0Cj4gPiByZWdpc3RlcnMuCj4gPiAgICAgV2hlbiBhbGwgc2ZlbmNl LnZtYSByZXF1ZXN0cyBhcmUgY29tcGxldGVkIGFuZCBzc3RhdHVzOlRMQklDCj4gPiBoYXMgYmVl bgo+ID4gICAgIHRyaWdnZXJlZCwgaGFydCB3aWxsIHJlY2VpdmUgYSBUTEJJIGZpbmlzaCBpbnRl cnJ1cHQuIEp1c3QgbGlrZQo+ID4gdGltZXIsCj4gPiAgICAgc29mdHdhcmUgYW5kIGV4dGVybmFs IGludGVycnVwdCdzIGRlZmluaXRpb24gaW4gc2lwICYgc2llLgo+ID4gCj4gPiBGYWtlIGNvZGU6 Cj4gPiAKPiA+IGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcikgewo+ID4gICAgIGFzaWQgPSBjcHVf YXNpZCh2bWEtPnZtX21tKTsKPiA+ICAgICBwcG4gPSBQRk5fRE9XTih2bWEtPnZtX21tLT5wZ2Qp Owo+ID4gCj4gPiAgICAgc2ZlbmNlLnZtYSAoYWRkciwgMXxQUE5fT0ZGU0VUKHBwbil8YXNpZCk7 IC8vMS4gc3RhcnQgcmVxdWVzdAo+ID4gCj4gPiAgICAgd2hpbGUoc3N0YXR1czpUTEJJKSBpZiAo dGltZV9vdXQoKSA+IDFtcykgYnJlYWs7IC8vMi4gbG9vcAo+ID4gY2hlY2sKPiA+IAo+ID4gICAg IHdoaWxlIChzc3RhdHVzOlRMQkkpIHsKPiA+ICAgICAgICAgLi4uCj4gPiAgICAgICAgIHNldCBz c3RhdHVzOlRMQklDOwo+ID4gICAgICAgICB3YWl0X1RMQklfZmluaXNoX2ludGVycnVwdCgpOyAv LzMuIHdhaXQgaXJxLCBpb19zY2hlZHVsZQo+ID4gICAgIH0KPiA+IH0KPiA+IAo+ID4gSGVyZSB3 ZSBnaXZlIDIgbGV2ZWwgY2hlY2s6Cj4gPiAgMSkgbG9vcCBjaGVjayBzc3RhdHVzOlRMQkksIENQ VSBjb3VsZCByZXNwb25zZSBJbnRlcnJ1cHQuCj4gPiAgMikgc2V0IHNzdGF0dXM6VExCSUMgYW5k IHdhaXQgZm9yIGlycSwgQ1BVIHNjaGVkdWxlIG91dCBmb3Igb3RoZXIKPiA+IHRhc2suCj4gPiAK PiA+IEFDRS1EVk0gRXhhbXBsZQo+ID4gPT09PT09PT09PT09PT09Cj4gPiAKPiA+IEhvbmVzdGx5 LCAiYnJvYWRjYXN0aW5nIGFkZHIsIGFzaWQsIHZtaWQsIFMxL1MyLlBHRC5QUE4gdG8KPiA+IGlu dGVyY29ubmVjdHMiCj4gPiBhbmQgIkFTWU5DIFNGRU5DRS5WTUEiIGNvdWxkIGJlIGltcGxlbWVu dGVkIGJ5IEFDRS1EVk0gcHJvdG9jb2wgcmVmCj4gPiBbMl0uCj4gPiAKPiA+IFRoZXJlIGFyZSAz IHR5cGVzIG9mIHRyYW5zYWN0aW9ucyBpbiBEVk06Cj4gPiAKPiA+ICAtIERWTSBvcGVyYXRpb24K PiA+ICAgIFNlbmQgYWxsIGluZm9ybWF0aW9uIHRvIHRoZSBpbnRlcmNvbm5lY3QsIGluY2x1ZGlu ZyBhZGRyLCBhc2lkLAo+ID4gICAgUzEuUEdELlBQTiwgdm1pZCwgUzIuUEdELlBQTi4KPiA+IAo+ ID4gIC0gRFZNIHN5bmNocm9uaXphdGlvbgo+ID4gICAgQ2hlY2sgdGhhdCBhbGwgRFZNIG9wZXJh dGlvbnMgaGF2ZSBiZWVuIGNvbXBsZXRlZC4gSWYgbm90LCBpdAo+ID4gd2lsbCB1c2UKPiA+ICAg IHN0YXRlIG1hY2hpbmUgdG8gd2FpdCBEVk0gY29tcGxldGUgcmVxdWVzdHMuCj4gPiAKPiA+ICAt IERWTSBjb21wbGV0ZQo+ID4gICAgUmV0dXJuIHRyYW5zYWN0aW9uIGZyb20gY29tcG9uZW50cywg ZWc6IElPTU1VLiBJZiBoYXJ0IGhhcwo+ID4gcmVjZWl2ZWQgYWxsCj4gPiAgICBEVk0gY29tcGxl dGVzIHdoaWNoIGFyZSB0cmlnZ2VyZWQgYnkgc2ZlbmNlLnZtYSBpbnN0cnVjdGlvbnMgYW5kCj4g PiAgICAic3N0YXR1czpUTEJJQyIgaGFzIGJlZW4gc2V0LCBhIFRMQkkgZmluaXNoIGludGVycnVw dCBpcwo+ID4gdHJpZ2dlcmVkLgo+ID4gCj4gPiAoQWN0dWFsbHksIHdlIGRvIG5vdCBuZWVkIHRv IGltcGxlbWVudCB0aGUgYWJvdmUgZnVuY3Rpb25zIHN0cmljdGx5Cj4gPiAgYWNjb3JkaW5nIHRv IHRoZSBBQ0Ugc3BlY2lmaWNhdGlvbiA6UCApCj4gPiAKPiA+ICAxOiBodHRwczovL3d3dy5saW51 eHBsdW1iZXJzY29uZi5vcmcvZXZlbnQvNC9jb250cmlidXRpb25zLzMwNy8KPiA+ICAyOiBBTUJB IEFYSSBhbmQgQUNFIFByb3RvY29sIFNwZWNpZmljYXRpb24gLSBEaXN0cmlidXRlZCBWaXJ0dWFs Cj4gPiBNZW1vcnkKPiA+ICAgICBUcmFuc2FjdGlvbnMiCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6 IEd1byBSZW4gPHJlbl9ndW9AYy1za3kuY29tPgo+ID4gUmV2aWV3ZWQtYnk6IExpIEZlaXRlbmcg PGZlaXRlbmdfbGlAYy1za3kuY29tPgo+ID4gLS0tCj4gPiAgc3JjL2h5cGVydmlzb3IudGV4IHwg IDQzICsrKysrKysrLS0tLS0tLQo+ID4gIHNyYy9zdXBlcnZpc29yLnRleCB8IDE1NQo+ID4gKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KPiA+ICAy IGZpbGVzIGNoYW5nZWQsIDE0MyBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL3NyYy9oeXBlcnZpc29yLnRleCBiL3NyYy9oeXBlcnZpc29yLnRleAo+ ID4gaW5kZXggNDdiOTBiMi4uMzcxODgxOSAxMDA2NDQKPiA+IC0tLSBhL3NyYy9oeXBlcnZpc29y LnRleAo+ID4gKysrIGIvc3JjL2h5cGVydmlzb3IudGV4Cj4gPiBAQCAtMTA5NCwxNSArMTA5NCwx NSBAQCBUaGUgaHlwZXJ2aXNvciBleHRlbnNpb24gYWRkcyB0d28gbmV3Cj4gPiBwcml2aWxlZ2Vk IGZlbmNlIGluc3RydWN0aW9ucy4KPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e29wY29kZX0gXFwK PiA+ICBcaGxpbmUKPiA+ICA3ICYgNSAmIDUgJiAzICYgNSAmIDcgXFwKPiA+IC1IRkVOQ0UuR1ZN QSAmIHZtaWQgJiBnYWRkciAmIFBSSVYgJiAwICYgU1lTVEVNIFxcCj4gPiAtSEZFTkNFLlZWTUEg JiBhc2lkICYgdmFkZHIgJiBQUklWICYgMCAmIFNZU1RFTSBcXAo+ID4gK0hGRU5DRS5HVk1BICYg bW9kZTpwcG46dm1pZCAmIGdhZGRyICYgUFJJViAmIDAgJiBTWVNURU0gXFwKPiA+ICtIRkVOQ0Uu VlZNQSAmIG1vZGU6cHBuOmFzaWQgJiB2YWRkciAmIFBSSVYgJiAwICYgU1lTVEVNIFxcCj4gPiAg XGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gCj4gPiAgVGhlIGh5cGVydmlzb3Ig bWVtb3J5LW1hbmFnZW1lbnQgZmVuY2UgaW5zdHJ1Y3Rpb25zLCBIRkVOQ0UuR1ZNQQo+ID4gYW5k Cj4gPiAgSEZFTkNFLlZWTUEsIGFyZSB2YWxpZCBvbmx5IGluIEhTLW1vZGUgd2hlbiB7XHR0IG1z dGF0dXN9LlRWTT0wLAo+ID4gb3IgaW4gTS1tb2RlCj4gPiAgKGlycmVzcGVjdGl2ZSBvZiB7XHR0 IG1zdGF0dXN9LlRWTSkuCj4gPiAtVGhlc2UgaW5zdHJ1Y3Rpb25zIHBlcmZvcm0gYSBmdW5jdGlv biBzaW1pbGFyIHRvIFNGRU5DRS5WTUEKPiA+ICtUaGVzZSBpbnN0cnVjdGlvbnMgcGVyZm9ybSBh IGZ1bmN0aW9uIHNpbWlsYXIgdG8gU0ZFTkNFLlZNQQo+ID4gKGJyb2FkY2FzdC9sb2NhbCkKPiA+ ICAoU2VjdGlvbn5ccmVme3NlYzpzZmVuY2Uudm1hfSksIGV4Y2VwdCBhcHBseWluZyB0byB0aGUg Z3Vlc3QtCj4gPiBwaHlzaWNhbAo+ID4gIG1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJl cyBjb250cm9sbGVkIGJ5IENTUiB7XHR0IGhnYXRwfQo+ID4gKEhGRU5DRS5HVk1BKQo+ID4gIG9y IHRoZSBWUy1sZXZlbCBtZW1vcnktbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMgY29udHJvbGxl ZCBieQo+ID4gQ1NSIHtcdHQgdnNhdHB9Cj4gPiBAQCAtMTEzNiwxMSArMTEzNiwxMCBAQCBBbiBI RkVOQ0UuVlZNQSBpbnN0cnVjdGlvbiBhcHBsaWVzIG9ubHkgdG8KPiA+IGEgc2luZ2xlIHZpcnR1 YWwgbWFjaGluZSwgaWRlbnRpZmllZAo+ID4gIGJ5IHRoZSBzZXR0aW5nIG9mIHtcdHQgaGdhdHB9 LlZNSUQgd2hlbiBIRkVOQ0UuVlZNQSBleGVjdXRlcy4KPiA+ICBcZW5ke2NvbW1lbnRhcnl9Cj4g PiAKPiA+IC1XaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFhMRU4tMTpBU0lETUFY IG9mIHRoZSB2YWx1ZQo+ID4gaGVsZCBpbiB7XGVtCj4gPiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9y IGZ1dHVyZSB1c2UgYW5kIHNob3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUKPiA+IGFuZCBpZ25v cmVkCj4gPiAtYnkgY3VycmVudCBpbXBsZW1lbnRhdGlvbnMuCj4gPiAtRnVydGhlcm1vcmUsIGlm IEFTSURMRU5+JDwkfkFTSURNQVgsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbAo+ID4gaWdub3Jl IGJpdHMKPiA+IC1BU0lETUFYLTE6QVNJRExFTiBvZiB0aGUgdmFsdWUgaGVsZCBpbiB7XGVtIHJz Mn0uCj4gPiArV2hlbiB7XGVtIHJzMn0kXG5lcSR7XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5m b3JtYXRpb25zOiBtb2RlLAo+ID4gcHBuLCBhc2lkLgo+ID4gKzEpIG1vZGUgY29udHJvbCBIRkVO Q0UuVlZNQSBicm9hZGNhc3Qgb3Igbm90Lgo+ID4gKzIpIHBwbiBpcyB0aGUgcm9vdCBwYWdlIHRh bGJlJ3MgUFBOIG9mIHRoZSBhc2lkIGFkZHJlc3Mgc3BhY2UuCj4gPiArMykgYXNpZCBpcyB0aGUg aWRlbnRpZmllciBvZiBwcm9jZXNzIGluIHZpcnR1YWwgbWFjaGluZS4KPiA+IAo+ID4gIFxiZWdp bntjb21tZW50YXJ5fQo+ID4gIFNpbXBsZXIgaW1wbGVtZW50YXRpb25zIG9mIEhGRU5DRS5WVk1B IGNhbiBpZ25vcmUgdGhlIGd1ZXN0Cj4gPiB2aXJ0dWFsIGFkZHJlc3MgaW4KPiA+IEBAIC0xMTY4 LDExICsxMTY3LDEwIEBAIHBoeXNpY2FsIGFkZHJlc3NlcyBpbiBQTVAgYWRkcmVzcyByZWdpc3Rl cnMKPiA+IChTZWN0aW9uflxyZWZ7c2VjOnBtcH0pIGFuZCBpbiBwYWdlCj4gPiAgdGFibGUgZW50 cmllcyAoU2VjdGlvbnMgXHJlZntzZWM6c3YzMn0sIFxyZWZ7c2VjOnN2Mzl9LAo+ID4gYW5kflxy ZWZ7c2VjOnN2NDh9KS4KPiA+ICBcZW5ke2NvbW1lbnRhcnl9Cj4gPiAKPiA+IC1XaGVuIHtcZW0g cnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFhMRU4tMTpWTUlETUFYIG9mIHRoZSB2YWx1ZQo+ID4g aGVsZCBpbiB7XGVtCj4gPiAtcnMyfSBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgYW5kIHNo b3VsZCBiZSB6ZXJvZWQgYnkgc29mdHdhcmUKPiA+IGFuZCBpZ25vcmVkCj4gPiAtYnkgY3VycmVu dCBpbXBsZW1lbnRhdGlvbnMuCj4gPiAtRnVydGhlcm1vcmUsIGlmIFZNSURMRU5+JDwkflZNSURN QVgsIHRoZSBpbXBsZW1lbnRhdGlvbiBzaGFsbAo+ID4gaWdub3JlIGJpdHMKPiA+IC1WTUlETUFY LTE6Vk1JRExFTiBvZiB0aGUgdmFsdWUgaGVsZCBpbiB7XGVtIHJzMn0uCj4gPiArV2hlbiB7XGVt IHJzMn0kXG5lcSR7XHR0IHgwfSwgYml0cyBjb250YWluIDMgaW5mb3JtYXRpb25zOiBtb2RlLAo+ ID4gdm1pZCwgcHBuLgo+ID4gKzEpIG1vZGUgY29udHJvbCBIRkVOQ0UuR1ZNQSBicm9hZGNhc3Qg b3Igbm90Lgo+ID4gKzIpIHBwbiBpcyB0aGUgcm9vdCBwYWdlIHRhbGJlJ3MgUFBOIG9mIHRoZSB2 bWlkIGFkZHJlc3Mgc3BhY2UuCj4gPiArMykgdm1pZCBpcyB0aGUgaWRlbnRpZmllciBvZiB2aXJ0 dWFsIG1hY2hpbmUuCj4gPiAKPiA+ICBcYmVnaW57Y29tbWVudGFyeX0KPiA+ICBTaW1wbGVyIGlt cGxlbWVudGF0aW9ucyBvZiBIRkVOQ0UuR1ZNQSBjYW4gaWdub3JlIHRoZSBndWVzdAo+ID4gcGh5 c2ljYWwgYWRkcmVzcyBpbgo+ID4gQEAgLTE1NjcsMjEgKzE1NjUsMjIgQEAgcmVnaXN0ZXIuCj4g PiAgXHN1YnNlY3Rpb257TWVtb3J5LU1hbmFnZW1lbnQgRmVuY2VzfQo+ID4gCj4gPiAgVGhlIGJl aGF2aW9yIG9mIHRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIGlzIGFmZmVjdGVkIGJ5IHRoZQo+ ID4gY3VycmVudAo+ID4gLXZpcnR1YWxpemF0aW9uIG1vZGUgVi4gIFdoZW4gVj0wLCB0aGUgdmly dHVhbC1hZGRyZXNzIGFyZ3VtZW50IGlzCj4gPiBhbiBIUy1sZXZlbAo+ID4gLXZpcnR1YWwgYWRk cmVzcywgYW5kIHRoZSBBU0lEIGFyZ3VtZW50IGlzIGFuIEhTLWxldmVsIEFTSUQuCj4gPiArdmly dHVhbGl6YXRpb24gbW9kZSBWLiAgV2hlbiBWPTAsIHRoZSByczEgYXJndW1lbnQgaXMgYW4gSFMt bGV2ZWwKPiA+ICt2aXJ0dWFsIGFkZHJlc3MsIGFuZCB0aGUgcnMyIGFyZ3VtZW50IGlzIGFuIEhT LWxldmVsIEFTSUQgYW5kIHJvb3QKPiA+IHBhZ2UgdGFibGUncyBQUE4uCj4gPiAgVGhlIGluc3Ry dWN0aW9uIG9yZGVycyBzdG9yZXMgb25seSB0byBIUy1sZXZlbCBhZGRyZXNzLXRyYW5zbGF0aW9u IAo+ID4gc3RydWN0dXJlcwo+ID4gIHdpdGggc3Vic2VxdWVudCBIUy1sZXZlbCBhZGRyZXNzIHRy YW5zbGF0aW9ucy4KPiA+IAo+ID4gLVdoZW4gVj0xLCB0aGUgdmlydHVhbC1hZGRyZXNzIGFyZ3Vt ZW50IHRvIFNGRU5DRS5WTUEgaXMgYSBndWVzdAo+ID4gdmlydHVhbAo+ID4gLWFkZHJlc3Mgd2l0 aGluIHRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSBBU0lEIGFyZ3VtZW50Cj4g PiBpcyBhIFZTLWxldmVsCj4gPiAtQVNJRCB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNo aW5lLgo+ID4gK1doZW4gVj0xLCB0aGUgcnMxIGFyZ3VtZW50IHRvIFNGRU5DRS5WTUEgaXMgYSBn dWVzdCB2aXJ0dWFsCj4gPiArYWRkcmVzcyB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNo aW5lLCBhbmQgdGhlIHJzMiBhcmd1bWVudAo+ID4gaXMgYSBWUy1sZXZlbAo+ID4gK0FTSUQgYW5k IHJvb3QgcGFnZSB0YWJsZSdzIFBQTiB3aXRoaW4gdGhlIGN1cnJlbnQgdmlydHVhbCBtYWNoaW5l Lgo+ID4gIFRoZSBjdXJyZW50IHZpcnR1YWwgbWFjaGluZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBW TUlEIGZpZWxkIG9mIENTUgo+ID4ge1x0dCBoZ2F0cH0sCj4gPiAtYW5kIHRoZSBlZmZlY3RpdmUg QVNJRCBjYW4gYmUgY29uc2lkZXJlZCB0byBiZSB0aGUgY29tYmluYXRpb24gb2YKPiA+IHRoaXMg Vk1JRAo+ID4gLXdpdGggdGhlIFZTLWxldmVsIEFTSUQuCj4gPiArYW5kIHRoZSBlZmZlY3RpdmUg QVNJRCBhbmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIGNhbiBiZSBjb25zaWRlcmVkCj4gPiB0byBi ZSB0aGUKPiA+ICtjb21iaW5hdGlvbiBvZiB0aGlzIFZNSUQgYW5kIHJvb3QgcGFnZSB0YWJsZSdz IFBQTiB3aXRoIHRoZSBWUy0KPiA+IGxldmVsIEFTSUQgYW5kCj4gPiArcm9vdCBwYWdlIHRhYmxl J3MgUFBOLgo+ID4gIFRoZSBTRkVOQ0UuVk1BIGluc3RydWN0aW9uIG9yZGVycyBzdG9yZXMgb25s eSB0byB0aGUgVlMtbGV2ZWwKPiA+ICBhZGRyZXNzLXRyYW5zbGF0aW9uIHN0cnVjdHVyZXMgd2l0 aCBzdWJzZXF1ZW50IFZTLWxldmVsIGFkZHJlc3MKPiA+IHRyYW5zbGF0aW9ucwo+ID4gLWZvciB0 aGUgc2FtZSB2aXJ0dWFsIG1hY2hpbmUsIGkuZS4sIG9ubHkgd2hlbiB7XHR0IGhnYXRwfS5WTUlE IGlzCj4gPiB0aGUgc2FtZSBhcwo+ID4gLXdoZW4gdGhlIFNGRU5DRS5WTUEgZXhlY3V0ZWQuCj4g PiArZm9yIHRoZSBzYW1lIHZpcnR1YWwgbWFjaGluZSwgaS5lLiwgb25seSB3aGVuIHtcdHQgaGdh dHB9LlZNSUQgYW5kCj4gPiB7XFx0dCBoZ2F0cH0uUFBOIGlzCj4gPiArdGhlIHNhbWUgYXMgd2hl biB0aGUgU0ZFTkNFLlZNQSBleGVjdXRlZC4KPiA+IAo+ID4gIEh5cGVydmlzb3IgaW5zdHJ1Y3Rp b25zIEhGRU5DRS5HVk1BIGFuZCBIRkVOQ0UuVlZNQSBwcm92aWRlCj4gPiBhZGRpdGlvbmFsCj4g PiAgbWVtb3J5LW1hbmFnZW1lbnQgZmVuY2VzIHRvIGNvbXBsZW1lbnQgU0ZFTkNFLlZNQS4KPiA+ IGRpZmYgLS1naXQgYS9zcmMvc3VwZXJ2aXNvci50ZXggYi9zcmMvc3VwZXJ2aXNvci50ZXgKPiA+ IGluZGV4IGJhM2NlZDUuLjI4NzdiN2EgMTAwNjQ0Cj4gPiAtLS0gYS9zcmMvc3VwZXJ2aXNvci50 ZXgKPiA+ICsrKyBiL3NyYy9zdXBlcnZpc29yLnRleAo+ID4gQEAgLTQ3LDEwICs0NywxMiBAQCBy ZWdpc3RlciBrZWVwcyB0cmFjayBvZiB0aGUgcHJvY2Vzc29yJ3MgY3VycmVudAo+ID4gb3BlcmF0 aW5nIHN0YXRlLgo+ID4gIFxiZWdpbntjZW50ZXJ9Cj4gPiAgXHNldGxlbmd0aHtcdGFiY29sc2Vw fXs0cHR9Cj4gPiAgXHNjYWxlYm94ezAuOTV9ewo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtjV2NjY2Nj V2NjY2NXY2N9Cj4gPiArXGJlZ2lue3RhYnVsYXJ9e2NjY1djY2NjY1djY2NjV2NjfQo+ID4gIFxc Cj4gPiAgXGluc3RiaXR7MzF9ICYKPiA+IC1caW5zdGJpdHJhbmdlezMwfXsyMH0gJgo+ID4gK1xp bnN0Yml0ezMwfSAmCj4gPiArXGluc3RiaXR7Mjl9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezI4fXsy MH0gJgo+ID4gIFxpbnN0Yml0ezE5fSAmCj4gPiAgXGluc3RiaXR7MTh9ICYKPiA+ICBcaW5zdGJp dHsxN30gJgo+ID4gQEAgLTY2LDYgKzY4LDggQEAgcmVnaXN0ZXIga2VlcHMgdHJhY2sgb2YgdGhl IHByb2Nlc3NvcidzIGN1cnJlbnQKPiA+IG9wZXJhdGluZyBzdGF0ZS4KPiA+ICBcaW5zdGJpdHsw fSBcXAo+ID4gIFxobGluZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1NEfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17VExCSX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9e1RMQklD fSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsx fXtjfH17TVhSfSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtTVU19ICYKPiA+IEBAIC04Miw3 ICs4Niw3IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50 Cj4gPiBvcGVyYXRpbmcgc3RhdGUuCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtcd3ByaX0KPiA+ ICBcXAo+ID4gIFxobGluZQo+ID4gLTEgJiAxMSAmIDEgJiAxICYgMSAmIDIgJiAyICYgNCAmIDEg JiAxICYgMSAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICsxICYgMSAmIDEgJiAxMCAmIDEgJiAxICYg MSAmIDIgJiAyICYgNCAmIDEgJiAxICYgMSAmIDEgJiAzICYgMSAmIDEKPiA+IFxcCj4gPiAgXGVu ZHt0YWJ1bGFyfX0KPiA+ICBcZW5ke2NlbnRlcn0KPiA+ICB9Cj4gPiBAQCAtOTUsMTAgKzk5LDEy IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50Cj4gPiBv cGVyYXRpbmcgc3RhdGUuCj4gPiAge1xmb290bm90ZXNpemUKPiA+ICBcYmVnaW57Y2VudGVyfQo+ ID4gIFxzZXRsZW5ndGh7XHRhYmNvbHNlcH17NHB0fQo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtjTUZT Y2NjY30KPiA+ICtcYmVnaW57dGFidWxhcn17Y2NjTUZTY2NjY30KPiA+ICBcXAo+ID4gIFxpbnN0 Yml0e1NYTEVOLTF9ICYKPiA+IC1caW5zdGJpdHJhbmdle1NYTEVOLTJ9ezM0fSAmCj4gPiArXGlu c3RiaXR7U1hMRU4tMn0gJgo+ID4gK1xpbnN0Yml0e1NYTEVOLTN9ICYKPiA+ICtcaW5zdGJpdHJh bmdle1NYTEVOLTR9ezM0fSAmCj4gPiAgXGluc3RiaXRyYW5nZXszM317MzJ9ICYKPiA+ICBcaW5z dGJpdHJhbmdlezMxfXsyMH0gJgo+ID4gIFxpbnN0Yml0ezE5fSAmCj4gPiBAQCAtMTA3LDYgKzEx Myw4IEBAIHJlZ2lzdGVyIGtlZXBzIHRyYWNrIG9mIHRoZSBwcm9jZXNzb3IncyBjdXJyZW50Cj4g PiBvcGVyYXRpbmcgc3RhdGUuCj4gPiAgIFxcCj4gPiAgXGhsaW5lCj4gPiAgXG11bHRpY29sdW1u ezF9e3xjfH17U0R9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtUTEJJfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17VExCSUN9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJp fSAmCj4gPiAgXG11bHRpY29sdW1uezF9e2N8fXtVWExbMTowXX0gJgo+ID4gIFxtdWx0aWNvbHVt bnsxfXtjfH17XHdwcml9ICYKPiA+IEBAIC0xMTUsNyArMTIzLDcgQEAgcmVnaXN0ZXIga2VlcHMg dHJhY2sgb2YgdGhlIHByb2Nlc3NvcidzIGN1cnJlbnQKPiA+IG9wZXJhdGluZyBzdGF0ZS4KPiA+ ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJpfSAmCj4gPiAgIFxcCj4gPiAgXGhsaW5lCj4gPiAt MSAmIFNYTEVOLTM1ICYgMiAmIDEyICYgMSAmIDEgJiAxICYgXFwKPiA+ICsxICYgMSAmIDEgJiBT WExFTi0zNyAmIDIgJiAxMiAmIDEgJiAxICYgMSAmIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4g IFxiZWdpbnt0YWJ1bGFyfXtjV1dGY2NjY1djY30KPiA+ICBcXAo+ID4gQEAgLTE1Miw2ICsxNjAs MTcgQEAgcmVnaXN0ZXIga2VlcHMgdHJhY2sgb2YgdGhlIHByb2Nlc3NvcidzCj4gPiBjdXJyZW50 IG9wZXJhdGluZyBzdGF0ZS4KPiA+ICBcbGFiZWx7c3N0YXR1c3JlZ30KPiA+ICBcZW5ke2ZpZ3Vy ZSp9Cj4gPiAKPiA+ICtUaGUgVExCSSAocmVhZC1vbmx5KSBiaXQgaW5kaWNhdGVzIHRoYXQgYW55 IGFzeW5jIHNmZW5jZS52bWEKPiA+IG9wZXJhdGlvbnMgYXJlCj4gPiArc3RpbGwgcGVuZGVkIG9u IHRoZSBoYXJ0LiBUaGUgdmFsdWU6MCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vCj4gPiBzZmVuY2Uu dm1hCj4gPiArb3BlcmF0aW9ucyBwZW5kaW5nIGFuZCB2YWx1ZToxIG1lYW5zIHRoYXQgdGhlcmUg YXJlIHN0aWxsCj4gPiBzZmVuY2Uudm1hIG9wZXJhdGlvbnMKPiA+ICtwZW5kaW5nIG9uIHRoZSBo YXJ0Lgo+ID4gKwo+ID4gK1doZW4gdGhlIHNzdGF0dXM6VExCSUMgYml0IGlzIHdyaXR0ZW4gMSwg aXQgdHJpZ2dlcnMgdGhlIGhhcmR3YXJlCj4gPiB0byBjaGVjayBpZgo+ID4gK3RoZXJlIGFyZSBh bnkgVExCIGludmFsaWRhdGUgb3BlcmF0aW9ucyBiZWluZyBwZW5kZWQuIFdoZW4gYWxsCj4gPiBv cGVyYXRpb25zIGFyZQo+ID4gK2ZpbmlzaGVkLCBhIFRMQiBJbnZhbGlkYXRlIGZpbmlzaCBpbnRl cnJ1cHQgd2lsbCBiZSB0cmlnZ2VyZWQKPiA+ICsoc2VlIFNlY3Rpb25+XHJlZntzaXByZWd9KS4g V2hlbiB0aGUgc3N0YXR1czpUTEJJQyBiaXQgaXMgd3JpdHRlbgo+ID4gMCwgaXQgd2lsbAo+ID4g K2NhdXNlIG5vdGhpbmcuIFJlYWRpbmcgc3N0YXR1czpUTEJJQyBiaXQgd2lsbCBhbGF3YXlzIHJl dHVybiAwLgo+ID4gKwo+ID4gIFRoZSBTUFAgYml0IGluZGljYXRlcyB0aGUgcHJpdmlsZWdlIGxl dmVsIGF0IHdoaWNoIGEgaGFydCB3YXMKPiA+IGV4ZWN1dGluZyBiZWZvcmUKPiA+ICBlbnRlcmlu ZyBzdXBlcnZpc29yIG1vZGUuICBXaGVuIGEgdHJhcCBpcyB0YWtlbiwgU1BQIGlzIHNldCB0byAw Cj4gPiBpZiB0aGUgdHJhcAo+ID4gIG9yaWdpbmF0ZWQgZnJvbSB1c2VyIG1vZGUsIG9yIDEgb3Ro ZXJ3aXNlLiAgV2hlbiBhbiBTUkVUCj4gPiBpbnN0cnVjdGlvbgo+ID4gQEAgLTMyOSw4ICszNDgs MTAgQEAgU1hMRU4tYml0IHJlYWQvd3JpdGUgcmVnaXN0ZXIgY29udGFpbmluZwo+ID4gaW50ZXJy dXB0IGVuYWJsZSBiaXRzLgo+ID4gIHtcZm9vdG5vdGVzaXplCj4gPiAgXGJlZ2lue2NlbnRlcn0K PiA+ICBcc2V0bGVuZ3Roe1x0YWJjb2xzZXB9ezRwdH0KPiA+IC1cYmVnaW57dGFidWxhcn17S2NG Y0ZjY30KPiA+IC1caW5zdGJpdHJhbmdle1NYTEVOLTF9ezEwfSAmCj4gPiArXGJlZ2lue3RhYnVs YXJ9e0tjRmNGY0ZjY30KPiA+ICtcaW5zdGJpdHJhbmdle1NYTEVOLTF9ezE0fSAmCj4gPiArXGlu c3RiaXR7MTN9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezEyfXsxMH0gJgo+ID4gIFxpbnN0Yml0ezl9 ICYKPiA+ICBcaW5zdGJpdHJhbmdlezh9ezZ9ICYKPiA+ICBcaW5zdGJpdHs1fSAmCj4gPiBAQCAt MzM5LDYgKzM2MCw4IEBAIFNYTEVOLWJpdCByZWFkL3dyaXRlIHJlZ2lzdGVyIGNvbnRhaW5pbmcK PiA+IGludGVycnVwdCBlbmFibGUgYml0cy4KPiA+ICBcaW5zdGJpdHswfSBcXAo+ID4gIFxobGlu ZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4gPiArXG11bHRpY29sdW1uezF9 e2N8fXtTVExCSVB9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtcd3ByaX0gJgo+ID4gIFxt dWx0aWNvbHVtbnsxfXtjfH17U0VJUH0gJgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17XHdwcml9 ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSVB9ICYKPiA+IEBAIC0zNDYsNyArMzY5LDcg QEAgU1hMRU4tYml0IHJlYWQvd3JpdGUgcmVnaXN0ZXIgY29udGFpbmluZwo+ID4gaW50ZXJydXB0 IGVuYWJsZSBiaXRzLgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U1NJUH0gJgo+ID4gIFxtdWx0 aWNvbHVtbnsxfXtjfH17XHdwcml9IFxcCj4gPiAgXGhsaW5lCj4gPiAtU1hMRU4tMTAgJiAxICYg MyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICtTWExFTi0xNCAmIDEgJiAzICYgMSAmIDMgJiAxICYg MyAmIDEgJiAxIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gIH0K PiA+IEBAIC0zNTksOCArMzgyLDEwIEBAIFNYTEVOLTEwICYgMSAmIDMgJiAxICYgMyAmIDEgJiAx IFxcCj4gPiAge1xmb290bm90ZXNpemUKPiA+ICBcYmVnaW57Y2VudGVyfQo+ID4gIFxzZXRsZW5n dGh7XHRhYmNvbHNlcH17NHB0fQo+ID4gLVxiZWdpbnt0YWJ1bGFyfXtLY0ZjRmNjfQo+ID4gLVxp bnN0Yml0cmFuZ2V7U1hMRU4tMX17MTB9ICYKPiA+ICtcYmVnaW57dGFidWxhcn17S2NGY0ZjRmNj fQo+ID4gK1xpbnN0Yml0cmFuZ2V7U1hMRU4tMX17MTR9ICYKPiA+ICtcaW5zdGJpdHsxM30gJgo+ ID4gK1xpbnN0Yml0cmFuZ2V7MTJ9ezEwfSAmCj4gPiAgXGluc3RiaXR7OX0gJgo+ID4gIFxpbnN0 Yml0cmFuZ2V7OH17Nn0gJgo+ID4gIFxpbnN0Yml0ezV9ICYKPiA+IEBAIC0zNjksNiArMzk0LDgg QEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICBcaW5zdGJpdHswfSBc XAo+ID4gIFxobGluZQo+ID4gIFxtdWx0aWNvbHVtbnsxfXt8Y3x9e1x3cHJpfSAmCj4gPiArXG11 bHRpY29sdW1uezF9e2N8fXtTVExCSUV9ICYKPiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXtcd3By aX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsxfXtjfH17U0VJRX0gJgo+ID4gIFxtdWx0aWNvbHVtbnsx fXtjfH17XHdwcml9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1NUSUV9ICYKPiA+IEBAIC0z NzYsNyArNDAzLDcgQEAgU1hMRU4tMTAgJiAxICYgMyAmIDEgJiAzICYgMSAmIDEgXFwKPiA+ICBc bXVsdGljb2x1bW57MX17Y3x9e1NTSUV9ICYKPiA+ICBcbXVsdGljb2x1bW57MX17Y3x9e1x3cHJp fSBcXAo+ID4gIFxobGluZQo+ID4gLVNYTEVOLTEwICYgMSAmIDMgJiAxICYgMyAmIDEgJiAxIFxc Cj4gPiArU1hMRU4tMTQgJiAxICYgMyAmIDEgJiAzICYgMSAmIDMgJiAxICYgMSBcXAo+ID4gIFxl bmR7dGFidWxhcn0KPiA+ICBcZW5ke2NlbnRlcn0KPiA+ICB9Cj4gPiBAQCAtNDEwLDYgKzQzNywx MiBAQCB3aGVuIHRoZSBTRUlFIGJpdCBpbiB0aGUge1x0dCBzaWV9IHJlZ2lzdGVyIGlzCj4gPiBj bGVhci4gIFRoZSBpbXBsZW1lbnRhdGlvbgo+ID4gIHNob3VsZCBwcm92aWRlIGZhY2lsaXRpZXMg dG8gbWFzaywgdW5tYXNrLCBhbmQgcXVlcnkgdGhlIGNhdXNlIG9mCj4gPiBleHRlcm5hbAo+ID4g IGludGVycnVwdHMuCj4gPiAKPiA+ICtBIHN1cGVydmlzb3ItbGV2ZWwgVExCIEludmFsaWRhdGUg ZmluaXNoIGludGVycnVwdCBpcyBwZW5kaW5nIGlmCj4gPiB0aGUgU1RMQklQIGJpdAo+ID4gK2lu IHRoZSB7XHR0IHNpcH0gcmVnaXN0ZXIgaXMgc2V0LiAgU3VwZXJ2aXNvci1sZXZlbCBUTEIgSW52 YWxpZGF0ZQo+ID4gZmluaXNoCj4gPiAraW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgd2hlbiB0aGUg U1RMQklFIGJpdCBpbiB0aGUge1x0dCBzaWV9Cj4gPiByZWdpc3RlciBpcyBjbGVhci4KPiA+ICtX aGVuIGhhcnQgdGxiIGludmFsaWRhdGUgb3BlcmF0aW9ucyBhcmUgZmluaXNoZWQsIGhhcmR3YXJl IHdpbGwKPiA+IGNoYW5nZSBzc3RhdHVzOlRMQkkKPiA+ICtiaXQgZnJvbSAxIHRvIDAgYW5kIHRy aWdnZXIgVExCIEludmFsaWRhdGUgZmluaXNoIGludGVycnVwdC4KPiA+ICsKPiA+ICBcYmVnaW57 Y29tbWVudGFyeX0KPiA+ICBUaGUge1x0dCBzaXB9IGFuZCB7XHR0IHNpZX0gcmVnaXN0ZXJzIGFy ZSBzdWJzZXRzIG9mIHRoZSB7XHR0IG1pcH0KPiA+IGFuZCB7XHR0Cj4gPiAgbWllfSByZWdpc3Rl cnMuICBSZWFkaW5nIGFueSBmaWVsZCwgb3Igd3JpdGluZyBhbnkgd3JpdGFibGUgZmllbGQsCj4g PiBvZiB7XHR0Cj4gPiBAQCAtNTk4LDcgKzYzMSw5IEBAIHNvIGlzIG9ubHkgZ3VhcmFudGVlZCB0 byBob2xkIHN1cHBvcnRlZAo+ID4gZXhjZXB0aW9uIGNvZGVzLgo+ID4gICAgMSAgICAgICAgICYg NSAgICAgICAgICAgICAgICYgU3VwZXJ2aXNvciB0aW1lciBpbnRlcnJ1cHQgXFwKPiA+ICAgIDEg ICAgICAgICAmIDYtLTggICAgICAgICAgICAmIHtcZW0gUmVzZXJ2ZWR9IFxcCj4gPiAgICAxICAg ICAgICAgJiA5ICAgICAgICAgICAgICAgJiBTdXBlcnZpc29yIGV4dGVybmFsIGludGVycnVwdCBc XAo+ID4gLSAgMSAgICAgICAgICYgMTAtLTE1ICAgICAgICAgICYge1xlbSBSZXNlcnZlZH0gXFwK PiA+ICsgIDEgICAgICAgICAmIDEwLS0xMSAgICAgICAgICAmIHtcZW0gUmVzZXJ2ZWR9IFxcCj4g PiArICAxICAgICAgICAgJiAxMiAgICAgICAgICAgICAgJiBTdXBlcnZpc29yIFRMQkkgZmluaXNo IGludGVycnVwdAo+ID4gXFwKPiA+ICsgIDEgICAgICAgICAmIDEzLS0xNSAgICAgICAgICAmIHtc ZW0gUmVzZXJ2ZWR9IFxcCj4gPiAgICAxICAgICAgICAgJiAkXGdlJDE2ICAgICAgICAgJiB7XGVt IEF2YWlsYWJsZSBmb3IgcGxhdGZvcm0gdXNlfQo+ID4gXFwgXGhsaW5lCj4gPiAgICAwICAgICAg ICAgJiAwICAgICAgICAgICAgICAgJiBJbnN0cnVjdGlvbiBhZGRyZXNzIG1pc2FsaWduZWQgXFwK PiA+ICAgIDAgICAgICAgICAmIDEgICAgICAgICAgICAgICAmIEluc3RydWN0aW9uIGFjY2VzcyBm YXVsdCBcXAo+ID4gQEAgLTg4NCw3ICs5MTksNyBAQCBwcm92aWRlZC4KPiA+ICBcbXVsdGljb2x1 bW57MX17Y3x9e29wY29kZX0gXFwKPiA+ICBcaGxpbmUKPiA+ICA3ICYgNSAmIDUgJiAzICYgNSAm IDcgXFwKPiA+IC1TRkVOQ0UuVk1BICYgYXNpZCAmIHZhZGRyICYgUFJJViAmIDAgJiBTWVNURU0g XFwKPiA+ICtTRkVOQ0UuVk1BICYgbW9kZTpwcG46YXNpZCAmIHZhZGRyICYgTE9DQUwgJiAwICYg U1lTVEVNIFxcCj4gPiAgXGVuZHt0YWJ1bGFyfQo+ID4gIFxlbmR7Y2VudGVyfQo+ID4gCj4gPiBA QCAtODk5LDIxICs5MzQsNzAgQEAgZnJvbSB0aGF0IGhhcnQgdG8gdGhlIG1lbW9yeS1tYW5hZ2Vt ZW50IGRhdGEKPiA+IHN0cnVjdHVyZXMuCj4gPiAgRnVydGhlciBkZXRhaWxzIG9uIHRoZSBiZWhh dmlvciBvZiB0aGlzIGluc3RydWN0aW9uIGFyZQo+ID4gIGRlc2NyaWJlZCBpbiBTZWN0aW9uflxy ZWZ7dmlydC1jb250cm9sfSBhbmQgU2VjdGlvbn5ccmVme3BtcC0KPiA+IHZtZW19Lgo+ID4gCj4g PiArU0ZFTkNFLlZNQSBpcyBkZWZpbmVkIGFzIGFuIGFzeW5jaHJvbm91cyBjb21wbGV0aW9uIGlu c3RydWN0aW9uLAo+ID4gd2hpY2ggbWVhbnMKPiA+ICt0aGF0IHRoZSBUTEIgb3BlcmF0aW9uIGlz IG5vdCBndWFyYW50ZWVkIHRvIGNvbXBsZXRlIHdoZW4gdGhlCj4gPiBpbnN0cnVjdGlvbiByZXRp cmVzLgo+ID4gK1NvZnR3YXJlIG5lZWQgY2hlY2sgc3N0YXR1czpUTEJJIHRvIGRldGVybWluZSBh bGwgVExCIG9wZXJhdGlvbnMKPiA+IGNvbXBsZXRlLgo+ID4gK1RoZSBzc3RhdHVzOlRMQkkgZGVz Y3JpYmVkIGluIFNlY3Rpb25+XHJlZntzc3RhdHVzfS4gV2hlbiBoYXJkd2FyZQo+ID4gY2hhbmdl Cj4gPiArc3N0YXR1czpUTEJJIGJpdCBmcm9tIDEgdG8gMCwgdGhlIFRMQiBJbnZhbGlkYXRlIGZp bmlzaCBpbnRlcnJ1cHQKPiA+IHdpbGwgYmUKPiA+ICt0cmlnZ2VyZWQuCj4gPiArCj4gPiAgXGJl Z2lue2NvbW1lbnRhcnl9Cj4gPiAtVGhlIFNGRU5DRS5WTUEgaXMgdXNlZCB0byBmbHVzaCBhbnkg bG9jYWwgaGFyZHdhcmUgY2FjaGVzIHJlbGF0ZWQKPiA+IHRvCj4gPiArVGhlIFNGRU5DRS5WTUEg aXMgdXNlZCB0byBmbHVzaCBhbnkgbG9jYWwvcmVtb3RlIGhhcmR3YXJlIGNhY2hlcwo+ID4gcmVs YXRlZCB0bwo+ID4gIGFkZHJlc3MgdHJhbnNsYXRpb24uICBJdCBpcyBzcGVjaWZpZWQgYXMgYSBm ZW5jZSByYXRoZXIgdGhhbiBhIFRMQgo+ID4gIGZsdXNoIHRvIHByb3ZpZGUgY2xlYW5lciBzZW1h bnRpY3Mgd2l0aCByZXNwZWN0IHRvIHdoaWNoCj4gPiBpbnN0cnVjdGlvbnMKPiA+ICBhcmUgYWZm ZWN0ZWQgYnkgdGhlIGZsdXNoIG9wZXJhdGlvbiBhbmQgdG8gc3VwcG9ydCBhIHdpZGVyIHZhcmll dHkKPiA+IG9mCj4gPiAgZHluYW1pYyBjYWNoaW5nIHN0cnVjdHVyZXMgYW5kIG1lbW9yeS1tYW5h Z2VtZW50IHNjaGVtZXMuIAo+ID4gU0ZFTkNFLlZNQQo+ID4gIGlzIGFsc28gdXNlZCBieSBoaWdo ZXIgcHJpdmlsZWdlIGxldmVscyB0byBzeW5jaHJvbml6ZSBwYWdlIHRhYmxlCj4gPiAtd3JpdGVz IGFuZCB0aGUgYWRkcmVzcyB0cmFuc2xhdGlvbiBoYXJkd2FyZS4KPiA+ICt3cml0ZXMgYW5kIHRo ZSBhZGRyZXNzIHRyYW5zbGF0aW9uIGhhcmR3YXJlLiBUaGVyZSBpcyBhIG1vZGUgYml0Cj4gPiB0 byBkZXRlcm1pbmUKPiA+ICtzZmVuY2Uudm1hIHdvdWxkIGJyb2FkY2FzdCBvbiBpbnRlcmNvbm5l Y3Qgb3Igbm90Lgo+ID4gIFxlbmR7Y29tbWVudGFyeX0KPiA+IAo+ID4gLVNGRU5DRS5WTUEgb3Jk ZXJzIG9ubHkgdGhlIGxvY2FsIGhhcnQncyBpbXBsaWNpdCByZWZlcmVuY2VzIHRvIHRoZQo+ID4g LW1lbW9yeS1tYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4KPiA+ICtcYmVnaW57ZmlndXJlfVto IV0KPiA+ICt7XGZvb3Rub3Rlc2l6ZQo+ID4gK1xiZWdpbntjZW50ZXJ9Cj4gPiArXGJlZ2lue3Rh YnVsYXJ9e2NAe31FQHt9S30KPiA+ICtcaW5zdGJpdHszMX0gJgo+ID4gK1xpbnN0Yml0cmFuZ2V7 MzB9ezl9ICYKPiA+ICtcaW5zdGJpdHJhbmdlezh9ezB9IFxcCj4gPiArXGhsaW5lCj4gPiArXG11 bHRpY29sdW1uezF9e3xjfH17e1x0dCBNT0RFfX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9 e3tcdHQgUFBOIChyb290IHBhZ2UgdGFibGUpfX0gJgo+ID4gK1xtdWx0aWNvbHVtbnsxfXt8Y3x9 e3tcdHQgQVNJRH19IFxcCj4gPiArXGhsaW5lCj4gPiArMSAmIDIyICYgOSBcXAo+ID4gK1xlbmR7 dGFidWxhcn0KPiA+ICtcZW5ke2NlbnRlcn0KPiA+ICt9Cj4gPiArXHZzcGFjZXstMC4xaW59Cj4g PiArXGNhcHRpb257UlYzMiBzZmVuY2Uudm1hIHJzMiBmb3JtYXQufQo+ID4gK1xsYWJlbHtydjMy c2F0cH0KPiA+ICtcZW5ke2ZpZ3VyZX0KPiA+ICsKPiA+ICtcYmVnaW57ZmlndXJlfVtoIV0KPiA+ ICt7XGZvb3Rub3Rlc2l6ZQo+ID4gK1xiZWdpbntjZW50ZXJ9Cj4gPiArXGJlZ2lue3RhYnVsYXJ9 e0B7fVNAe31UQHt9VX0KPiA+ICtcaW5zdGJpdHJhbmdlezYzfXs2MH0gJgo+ID4gK1xpbnN0Yml0 cmFuZ2V7NTl9ezE2fSAmCj4gPiArXGluc3RiaXRyYW5nZXsxNX17MH0gXFwKPiA+ICtcaGxpbmUK PiA+ICtcbXVsdGljb2x1bW57MX17fGN8fXt7XHR0IE1PREV9fSAmCj4gPiArXG11bHRpY29sdW1u ezF9e3xjfH17e1x0dCBQUE4gKHJvb3QgcGFnZSB0YWJsZSl9fSAmCj4gPiArXG11bHRpY29sdW1u ezF9e3xjfH17e1x0dCBBU0lEfX0gXFwKPiA+ICtcaGxpbmUKPiA+ICs0ICYgNDQgJiAxNiBcXAo+ ID4gK1xlbmR7dGFidWxhcn0KPiA+ICtcZW5ke2NlbnRlcn0KPiA+ICt9Cj4gPiArXHZzcGFjZXst MC4xaW59Cj4gPiArXGNhcHRpb257UlY2NCBzZmVuY2Uudm1hIHJzMiBmb3JtYXQsIGZvciBNT0RF IHZhbHVlcywgb25seSBoaWdoZXN0Cj4gPiBiaXQ6NjMgaXMKPiA+ICt2YWxpZCBhbmQgb3RoZXJz IGFyZSByZXNlcnZlZC59Cj4gPiArXGxhYmVse3J2NjRzYXRwfQo+ID4gK1xlbmR7ZmlndXJlfQo+ ID4gCj4gPiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4gPiAtQ29uc2VxdWVudGx5LCBvdGhlciBoYXJ0 cyBtdXN0IGJlIG5vdGlmaWVkIHNlcGFyYXRlbHkgd2hlbiB0aGUKPiA+ICtUaGUgbW9kZSdzIGhp Z2hlc3QgYml0IGNvdWxkIGNvbnRyb2wgc2ZlbmNlLnZtYSBiZWhhdmlvciB3aXRoCj4gPiAxOmJy b2FkY2FzdCBvciAwOmxvY2FsLgo+ID4gK0lmIG9ubHkgaGF2ZSBtb2RlOmxvY2FsLCBvdGhlciBo YXJ0cyBtdXN0IGJlIG5vdGlmaWVkIHNlcGFyYXRlbHkKPiA+IHdoZW4gdGhlCj4gPiAgbWVtb3J5 LW1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmVzIGhhdmUgYmVlbiBtb2RpZmllZC4KPiA+ICBPbmUg YXBwcm9hY2ggaXMgdG8gdXNlIDEpCj4gPiAgYSBsb2NhbCBkYXRhIGZlbmNlIHRvIGVuc3VyZSBs b2NhbCB3cml0ZXMgYXJlIHZpc2libGUgZ2xvYmFsbHksCj4gPiB0aGVuCj4gPiBAQCAtOTI4LDgg KzEwMTIsMTcgQEAgbW9kaWZpZWQgZm9yIGEgc2luZ2xlIGFkZHJlc3MgbWFwcGluZyAoaS5lLiwK PiA+IG9uZSBwYWdlIG9yIHN1cGVycGFnZSksIHtcZW0gcnMxfQo+ID4gIGNhbiBzcGVjaWZ5IGEg dmlydHVhbCBhZGRyZXNzIHdpdGhpbiB0aGF0IG1hcHBpbmcgdG8gZWZmZWN0IGEKPiA+IHRyYW5z bGF0aW9uCj4gPiAgZmVuY2UgZm9yIHRoYXQgbWFwcGluZyBvbmx5LiAgRnVydGhlcm1vcmUsIGZv ciB0aGUgY29tbW9uIGNhc2UKPiA+IHRoYXQgdGhlCj4gPiAgdHJhbnNsYXRpb24gZGF0YSBzdHJ1 Y3R1cmVzIGhhdmUgb25seSBiZWVuIG1vZGlmaWVkIGZvciBhIHNpbmdsZQo+ID4gYWRkcmVzcy1z cGFjZQo+ID4gLWlkZW50aWZpZXIsIHtcZW0gcnMyfSBjYW4gc3BlY2lmeSB0aGUgYWRkcmVzcyBz cGFjZS4gIFRoZSBiZWhhdmlvcgo+ID4gb2YKPiA+IC1TRkVOQ0UuVk1BIGRlcGVuZHMgb24ge1xl bSByczF9IGFuZCB7XGVtIHJzMn0gYXMgZm9sbG93czoKPiA+ICtpZGVudGlmaWVyLCB7XGVtIHJz Mn0gY2FuIHNwZWNpZnkgdGhlIGFkZHJlc3Mgc3BhY2Ugd2l0aCB7XHR0Cj4gPiBzYXRwfSBmb3Jt YXQKPiA+ICt3aGljaCBpbmNsdWRlIGFzaWQgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBpbmZv cm1hdGlvbi4KPiA+ICsKPiA+ICtcYmVnaW57Y29tbWVudGFyeX0KPiA+ICtXZSB1c2UgQVNJRCBh bmQgcm9vdCBwYWdlIHRhYmxlJ3MgUFBOIHRvIGRldGVybWluZSBhZGRyZXNzIHNwYWNlCj4gPiBh bmQgdGhlIGZvcm1hdAo+ID4gK3N0b3JlZCBpbiByczIgaXMgc2ltaWxhciB3aXRoIHtcdHQgc2F0 cH0gZGVzY3JpYmVkIGluCj4gPiBTZWN0aW9uflxyZWZ7c2VjOnNhdHB9Lgo+ID4gK0FTSUQgYXJl IHVzZWQgYnkgbG9jYWwgaGFydHMgYW5kIHJvb3QgcGFnZSB0YWJsZSdzIFBQTiBvZiB0aGUgYXNp ZAo+ID4gYXJlIHVzZWQgYnkKPiA+ICtvdGhlciBkaWZmZXJlbnQgVExCIHN5c3RlbXMsIGVnOiBJ T01NVS4KPiA+ICtcZW5ke2NvbW1lbnRhcnl9Cj4gPiArCj4gPiArVGhlIGJlaGF2aW9yIG9mIFNG RU5DRS5WTUEgZGVwZW5kcyBvbiB7XGVtIHJzMX0gYW5kIHtcZW0gcnMyfSBhcwo+ID4gZm9sbG93 czoKPiA+IAo+ID4gIFxiZWdpbntpdGVtaXplfQo+ID4gIFxpdGVtIElmIHtcZW0gcnMxfT17XHR0 IHgwfSBhbmQge1xlbSByczJ9PXtcdHQgeDB9LCB0aGUgZmVuY2UKPiA+IG9yZGVycyBhbGwKPiA+ IEBAIC05MzksMjMgKzEwMzIsMTggQEAgU0ZFTkNFLlZNQSBkZXBlbmRzIG9uIHtcZW0gcnMxfSBh bmQge1xlbQo+ID4gcnMyfSBhcyBmb2xsb3dzOgo+ID4gICAgICAgIGFsbCByZWFkcyBhbmQgd3Jp dGVzIG1hZGUgdG8gYW55IGxldmVsIG9mIHRoZSBwYWdlIHRhYmxlcywKPiA+IGJ1dCBvbmx5Cj4g PiAgICAgICAgZm9yIHRoZSBhZGRyZXNzIHNwYWNlIGlkZW50aWZpZWQgYnkgaW50ZWdlciByZWdp c3RlciB7XGVtCj4gPiByczJ9Lgo+ID4gICAgICAgIEFjY2Vzc2VzIHRvIHtcZW0gZ2xvYmFsfSBt YXBwaW5ncyAoc2VlCj4gPiBTZWN0aW9uflxyZWZ7c2VjOnRyYW5zbGF0aW9ufSkKPiA+IC0gICAg ICBhcmUgbm90IG9yZGVyZWQuCj4gPiArICAgICAgYXJlIG5vdCBvcmRlcmVkLiBUaGUgbW9kZSBm aWVsZCBpbiByczIgaXMgZGV0ZXJtaW5lCj4gPiBicm9hZGNhc3Qgb3IgbG9jYWwuCj4gPiAgXGl0 ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfT17XHR0IHgwfSwgdGhl IGZlbmNlCj4gPiBvcmRlcnMKPiA+ICAgICAgICBvbmx5IHJlYWRzIGFuZCB3cml0ZXMgbWFkZSB0 byB0aGUgbGVhZiBwYWdlIHRhYmxlIGVudHJ5Cj4gPiBjb3JyZXNwb25kaW5nCj4gPiAgICAgICAg dG8gdGhlIHZpcnR1YWwgYWRkcmVzcyBpbiB7XGVtIHJzMX0sIGZvciBhbGwgYWRkcmVzcyBzcGFj ZXMuCj4gPiAgXGl0ZW0gSWYge1xlbSByczF9JFxuZXEke1x0dCB4MH0gYW5kIHtcZW0gcnMyfSRc bmVxJHtcdHQgeDB9LCB0aGUKPiA+IGZlbmNlCj4gPiAgICAgICAgb3JkZXJzIG9ubHkgcmVhZHMg YW5kIHdyaXRlcyBtYWRlIHRvIHRoZSBsZWFmIHBhZ2UgdGFibGUKPiA+IGVudHJ5Cj4gPiAgICAg ICAgY29ycmVzcG9uZGluZyB0byB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0gcnMxfSwgZm9y IHRoZQo+ID4gYWRkcmVzcwo+ID4gLSAgICAgIHNwYWNlIGlkZW50aWZpZWQgYnkgaW50ZWdlciBy ZWdpc3RlciB7XGVtIHJzMn0uCj4gPiArICAgICAgc3BhY2UgaWRlbnRpZmllZCBieSBpbnRlZ2Vy IHJlZ2lzdGVyIHtcZW0gcnMyfS4gVGhlIG1vZGUKPiA+IGZpZWxkIGluIHJzMgo+ID4gKyAgICAg IGlzIGRldGVybWluZSBicm9hZGNhc3Qgb3IgbG9jYWwuCj4gPiAgICAgICAgQWNjZXNzZXMgdG8g Z2xvYmFsIG1hcHBpbmdzIGFyZSBub3Qgb3JkZXJlZC4KPiA+ICBcZW5ke2l0ZW1pemV9Cj4gPiAK PiA+IC1XaGVuIHtcZW0gcnMyfSRcbmVxJHtcdHQgeDB9LCBiaXRzIFNYTEVOLTE6QVNJRE1BWCBv ZiB0aGUgdmFsdWUKPiA+IGhlbGQgaW4ge1xlbQo+ID4gLXJzMn0gYXJlIHJlc2VydmVkIGZvciBm dXR1cmUgdXNlIGFuZCBzaG91bGQgYmUgemVyb2VkIGJ5IHNvZnR3YXJlCj4gPiBhbmQgaWdub3Jl ZAo+ID4gLWJ5IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zLiAgRnVydGhlcm1vcmUsIGlmIEFTSURM RU5+JDwkfkFTSURNQVgsCj4gPiB0aGUKPiA+IC1pbXBsZW1lbnRhdGlvbiBzaGFsbCBpZ25vcmUg Yml0cyBBU0lETUFYLTE6QVNJRExFTiBvZiB0aGUgdmFsdWUKPiA+IGhlbGQgaW4ge1xlbQo+ID4g LXJzMn0uCj4gPiAtCj4gPiAgXGJlZ2lue2NvbW1lbnRhcnl9Cj4gPiAgU2ltcGxlciBpbXBsZW1l bnRhdGlvbnMgY2FuIGlnbm9yZSB0aGUgdmlydHVhbCBhZGRyZXNzIGluIHtcZW0KPiA+IHJzMX0g YW5kCj4gPiAgdGhlIEFTSUQgdmFsdWUgaW4ge1xlbSByczJ9IGFuZCBhbHdheXMgcGVyZm9ybSBh IGdsb2JhbCBmZW5jZS4KPiA+IEBAIC05OTQsNyArMTA4Miw3IEBAIGNhbiBleGVjdXRlIHRoZSBz YW1lIFNGRU5DRS5WTUEgaW5zdHJ1Y3Rpb24KPiA+IHdoaWxlIGEgZGlmZmVyZW50IEFTSUQgaXMg bG9hZGVkCj4gPiAgaW50byB7XHR0IHNhdHB9LCBwcm92aWRlZCB0aGUgbmV4dCB0aW1lIHtcdHQg c2F0cH0gaXMgbG9hZGVkIHdpdGgKPiA+IHRoZSByZWN5Y2xlZAo+ID4gIEFTSUQsIGl0IGlzIHNp bXVsdGFuZW91c2x5IGxvYWRlZCB3aXRoIHRoZSBuZXcgcGFnZSB0YWJsZS4KPiA+IAo+ID4gLVxp dGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBwcm92aWRlIEFTSURzLCBvciBzb2Z0 d2FyZQo+ID4gY2hvb3NlcyB0bwo+ID4gK1xpdGVtIElmIHRoZSBpbXBsZW1lbnRhdGlvbiBkb2Vz IG5vdCBwcm92aWRlIEFTSURzIGFuZCBQUE5zLCBvcgo+ID4gc29mdHdhcmUgY2hvb3NlcyB0bwo+ ID4gIGFsd2F5cyB1c2UgQVNJRCAwLCB0aGVuIGFmdGVyIGV2ZXJ5IHtcdHQgc2F0cH0gd3JpdGUs IHNvZnR3YXJlCj4gPiBzaG91bGQgZXhlY3V0ZQo+ID4gIFNGRU5DRS5WTUEgd2l0aCB7XGVtIHJz MX09e1x0dCB4MH0uICBJbiB0aGUgY29tbW9uIGNhc2UgdGhhdCBubwo+ID4gZ2xvYmFsCj4gPiAg dHJhbnNsYXRpb25zIGhhdmUgYmVlbiBtb2RpZmllZCwge1xlbSByczJ9IHNob3VsZCBiZSBzZXQg dG8gYQo+ID4gcmVnaXN0ZXIgb3RoZXIgdGhhbgo+ID4gQEAgLTEwMDMsMTMgKzEwOTEsMTQgQEAg bm90IGZsdXNoZWQuCj4gPiAKPiA+ICBcaXRlbSBJZiBzb2Z0d2FyZSBtb2RpZmllcyBhIG5vbi1s ZWFmIFBURSwgaXQgc2hvdWxkIGV4ZWN1dGUKPiA+IFNGRU5DRS5WTUEgd2l0aAo+ID4gIHtcZW0g cnMxfT17XHR0IHgwfS4gIElmIGFueSBQVEUgYWxvbmcgdGhlIHRyYXZlcnNhbCBwYXRoIGhhZCBp dHMgRwo+ID4gYml0IHNldCwKPiA+IC17XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3 aXNlLCB7XGVtIHJzMn0gc2hvdWxkIGJlIHNldCB0bwo+ID4gdGhlIEFTSUQgZm9yCj4gPiAtd2hp Y2ggdGhlIHRyYW5zbGF0aW9uIGlzIGJlaW5nIG1vZGlmaWVkLgo+ID4gK3tcZW0gcnMyfSBtdXN0 IGJlIHtcdHQgeDB9OyBvdGhlcndpc2UsIHtcZW0gcnMyfSBzaG91bGQgYmUgc2V0IHRvCj4gPiB0 aGUgQVNJRCBhbmQKPiA+ICtyb290IHBhZ2UgdGFibGUncyBQUE4gZm9yIHdoaWNoIHRoZSB0cmFu c2xhdGlvbiBpcyBiZWluZyBtb2RpZmllZC4KPiA+IAo+ID4gIFxpdGVtIElmIHNvZnR3YXJlIG1v ZGlmaWVzIGEgbGVhZiBQVEUsIGl0IHNob3VsZCBleGVjdXRlCj4gPiBTRkVOQ0UuVk1BIHdpdGgg e1xlbQo+ID4gIHJzMX0gc2V0IHRvIGEgdmlydHVhbCBhZGRyZXNzIHdpdGhpbiB0aGUgcGFnZS4g IElmIGFueSBQVEUgYWxvbmcKPiA+IHRoZSB0cmF2ZXJzYWwKPiA+ICBwYXRoIGhhZCBpdHMgRyBi aXQgc2V0LCB7XGVtIHJzMn0gbXVzdCBiZSB7XHR0IHgwfTsgb3RoZXJ3aXNlLAo+ID4ge1xlbSBy czJ9Cj4gPiAtc2hvdWxkIGJlIHNldCB0byB0aGUgQVNJRCBmb3Igd2hpY2ggdGhlIHRyYW5zbGF0 aW9uIGlzIGJlaW5nCj4gPiBtb2RpZmllZC4KPiA+ICtzaG91bGQgYmUgc2V0IHRvIHRoZSBBU0lE IGFuZCByb290IHBhZ2UgdGFibGUncyBQUE4gZm9yIHdoaWNoIHRoZQo+ID4gdHJhbnNsYXRpb24K PiA+ICtpcyBiZWluZyBtb2RpZmllZC4KPiA+IAo+ID4gIFxpdGVtIEZvciB0aGUgc3BlY2lhbCBj YXNlcyBvZiBpbmNyZWFzaW5nIHRoZSBwZXJtaXNzaW9ucyBvbiBhCj4gPiBsZWFmIFBURSBhbmQK PiA+ICBjaGFuZ2luZyBhbiBpbnZhbGlkIFBURSB0byBhIHZhbGlkIGxlYWYsIHNvZnR3YXJlIG1h eSBjaG9vc2UgdG8KPiA+IGV4ZWN1dGUKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==