From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 129705 invoked by alias); 25 Jun 2017 11:43:51 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 129661 invoked by uid 89); 25 Jun 2017 11:43:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-9.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_1,GIT_PATCH_2,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=ham version=3.3.2 spammy= X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-yw0-f171.google.com Received: from mail-yw0-f171.google.com (HELO mail-yw0-f171.google.com) (209.85.161.171) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 25 Jun 2017 11:43:42 +0000 Received: by mail-yw0-f171.google.com with SMTP id s127so1114362ywg.1; Sun, 25 Jun 2017 04:43:42 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to; bh=QXvifpCBVk7diTNXfO3mHe+fi2u4gj4Drrf88vVOv/g=; b=oYsSR2mLVhkTVyxXj9xtFG/nIVdAbGVOc5JqTWdEJrwEHmJem21ia17wWyyst5MEj2 0hfD/4hCsmBEl72QW4bjevcaq28grd5kjmxJvWnGGgCBcHXgQnFAD1z2EUdMUipsFtWl MpoolysSK/mf8y4fqKKVk/zJwvdFMlHoMzeQcSfTebdysu8bMVpo5A1fUNexvlaz6GOr MStRnQ/HnhtFdYTPkOPku2MTvAucwMoRP1QQZXxPJqSSnLSvdaU7aj/PpJhtC6HRIXXU QKKV4PSCbkeD5OZvhvQjawD9RtybDX9QeTqwcPaUh4ZaeGeSzRXsWlmoUagn5u/tNAJd 2+gA== X-Gm-Message-State: AKS2vOwb0uzjczHtYeg++7eIKvvcQ1cYALmQz9YjPjlL5/L5/FUTjbLC odz5jklbSORIsHpZY2bpZfcC2NYLPQ== X-Received: by 10.129.55.83 with SMTP id e80mr191219ywa.183.1498391020534; Sun, 25 Jun 2017 04:43:40 -0700 (PDT) MIME-Version: 1.0 Received: by 10.129.87.132 with HTTP; Sun, 25 Jun 2017 04:43:39 -0700 (PDT) In-Reply-To: References: From: Paul Richard Thomas Date: Sun, 25 Jun 2017 11:43:00 -0000 Message-ID: Subject: Re: [Patch, fortran] PR34640 - ICE when assigning item of a derived-component to a pointer To: "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary="001a1143fb9e83b18f0552c758bb" X-SW-Source: 2017-06/txt/msg01866.txt.bz2 --001a1143fb9e83b18f0552c758bb Content-Type: text/plain; charset="UTF-8" Content-length: 5869 Dear All, Dominique pointed out that the changes to libgfortran.h were missing from the patch. This came about because I wrongly named kernels-alias-4.f95 in the diff so it was missing too. Please find attached the complete patch. Thomas, thanks for the early feedback. Paul On 24 June 2017 at 11:48, Paul Richard Thomas wrote: > Dear All, > > Please find attached a draft patch for the above PR, together with PRs > 40737, 55763, 57019 and 57116. These PRs constitute problems > associated with the last F95 feature that gfortran does not completely > implement. > > I want to sound out if this is acceptable as the way to fix these > problems before going to the trouble of doing the final clean up; > especially of trans.c (gfc_build_array_ref) and > trans-array.c(build_array_ref). > > The problem concerns pointers to derived type array components. eg: > pointer_array(:) => derived_array (:)%component > > At present gfortran uses a rather crude fix, where a 'span' variable > with value of sizeof(element of derived_array) is used for pointer > arithmetic to access elements of the array; > &pointer_array(i) = &derived_array(1)%component + span*(i-1) > > The difficulty of using a variable 'span' is that it is not passed to > procedures and it is not available to array pointer components. This > patch fixes this by the introduction of a span field in the array > descriptor. Note that this is only used for intrinsic type, pointer > arrays in this version of the patch. A considerable simplification > would arise from using the span field in class arrays too. This might > well be one result of the clean up mentioned above. > > Tobias Burnus and I have been putting off fixing these PRs for a long > time because of the pending array descriptor reform. However, work on > fortran-dev has once again stopped and neither I nor, I think, anybody > else has the time to restart this work anytime soon. > > pointer[1,2].f90 in the libgomp testsuite fail if this modification to > array referencing is exposed to them. For the time being, > trans-array.c(is_pointer_array) has: > + if (flag_openmp) > + return false; > to switch off the modification. I will come back to this during the > clean up, with the hope of putting it right. > > Bootstraps and regtests on FC23/x86_64 - OK to proceed to completion > and submission? > > Paul > > > 2017-06-24 Paul Thomas > > PR fortran/34640 > PR fortran/40737 > PR fortran/55763 > PR fortran/57019 > PR fortran/57116 > > * trans-array.c: Add SPAN_FIELD and update indices for > subsequent fields. > (gfc_conv_descriptor_span, gfc_conv_descriptor_span_get, > gfc_conv_descriptor_span_set, is_pointer_array, > get_array_span): New functions. > (gfc_conv_scalarized_array_ref): If the expression is a subref > array, make sure that info->descriptor is a descriptor type. > Otherwise, if info->descriptor is a pointer array, set 'decl' > and fix it if it is a component reference. > (gfc_conv_array_ref): Similarly set 'decl'. > (gfc_array_allocate): Set the span field if this is a pointer > array. > (gfc_conv_expr_descriptor): Set the span field for pointer > assignments. > * trans-array.h: Prototypes for gfc_conv_descriptor_span_get > and gfc_conv_descriptor_span_set added. > * trans.c (gfc_build_array_ref): GFC_DECL_SUBREF_ARRAY_P change > to GFC_DECL_PTR_ARRAY_P and defreference if a PARM_DECL. > trans-decl.c (gfc_get_symbol_decl): If a non-class pointer > array, mark the declaration as a GFC_DECL_PTR_ARRAY_P. Remove > the setting of GFC_DECL_SPAN. > (gfc_trans_deferred_vars): Set the span field to zero in the > originating scope. > * trans-expr.c (gfc_trans_pointer_assignment): Remove code for > setting of GFC_DECL_SPAN. Set the 'span' field for non-class > pointers to class function results. Likewise for rank remap. > * trans.h : Rename DECL_LANG_FLAG_6, GFC_DECL_SUBREF_ARRAY_P, > as GFC_DECL_PTR_ARRAY_P. > * trans-intrinsic.c (conv_expr_ref_to_caf_ref): Pick up the > 'token' offset from the field decl in the descriptor. > (conv_isocbinding_subroutine): Set the 'span' field. > * trans-io.c (gfc_trans_transfer): Always scalarize pointer > array io. > * trans-stmt.c (trans_associate_var): Set the 'span' field. > * trans-types.c (gfc_get_array_descriptor_base): Add the 'span' > field to the array descriptor. > (gfc_get_derived_type): Pointer array components are marked as > GFC_DECL_PTR_ARRAY_P. > (gfc_get_array_descr_info): Jump one more in the DECL_CHAIN to > access the offset field. > > > 2017-06-24 Paul Thomas > > PR fortran/34640 > * gfortran.dg/assumed_type_2.f90: Adjust some of the tree dump > checks. > * gfortran.dg/no_arg_check_2.f90: Likewise. > * gfortran.dg/pointer_array_1.f90: New test. > * gfortran.dg/pointer_array_2.f90: New test. > * gfortran.dg/pointer_array_component_1.f90: New test. > * gfortran.dg/pointer_array_component_2.f90: New test. > * gfortran.dg/goacc/kernels-alias-4.f95: Bump up both tree scan > counts by 1. > > PR fortran/40737 > * gfortran.dg/pointer_array_3.f90: New test. > > PR fortran/57116 > * gfortran.dg/pointer_array_4.f90: New test. > > PR fortran/55763 > * gfortran.dg/pointer_array_5.f90: New test. > > PR fortran/57019 > * gfortran.dg/pointer_array_6.f90: New test. > > 2017-06-24 Paul Thomas > > PR fortran/34640 > * libgfortran/libgfortran.h: Add span field to descriptor. > > > -- > "If you can't explain it simply, you don't understand it well enough" > - Albert Einstein -- "If you can't explain it simply, you don't understand it well enough" - Albert Einstein --001a1143fb9e83b18f0552c758bb Content-Type: text/plain; charset="US-ASCII"; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j4cnbmuz1 Content-length: 68650 SW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLWFycmF5LmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuYwkocmV2 aXNpb24gMjQ5MDUwKQotLS0gZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuYwko d29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogZ2ZjX2FycmF5X2RhdGFw dHJfdHlwZSAodHJlZSBkZXNjKQoqKiogMTI1LDEzMiAqKioqCiAgI2RlZmlu ZSBEQVRBX0ZJRUxEIDAKICAjZGVmaW5lIE9GRlNFVF9GSUVMRCAxCiAgI2Rl ZmluZSBEVFlQRV9GSUVMRCAyCiEgI2RlZmluZSBESU1FTlNJT05fRklFTEQg MwohICNkZWZpbmUgQ0FGX1RPS0VOX0ZJRUxEIDQKICAKICAjZGVmaW5lIFNU UklERV9TVUJGSUVMRCAwCiAgI2RlZmluZSBMQk9VTkRfU1VCRklFTEQgMQot LS0gMTI1LDEzMyAtLS0tCiAgI2RlZmluZSBEQVRBX0ZJRUxEIDAKICAjZGVm aW5lIE9GRlNFVF9GSUVMRCAxCiAgI2RlZmluZSBEVFlQRV9GSUVMRCAyCiEg I2RlZmluZSBTUEFOX0ZJRUxEIDMKISAjZGVmaW5lIERJTUVOU0lPTl9GSUVM RCA0CiEgI2RlZmluZSBDQUZfVE9LRU5fRklFTEQgNQogIAogICNkZWZpbmUg U1RSSURFX1NVQkZJRUxEIDAKICAjZGVmaW5lIExCT1VORF9TVUJGSUVMRCAx CioqKioqKioqKioqKioqKiBnZmNfY29udl9kZXNjcmlwdG9yX2R0eXBlICh0 cmVlIGRlc2MpCioqKiAyNDQsMjQ5ICoqKioKLS0tIDI0NSwyODAgLS0tLQog IAkJCSAgZGVzYywgZmllbGQsIE5VTExfVFJFRSk7CiAgfQogIAorIHN0YXRp YyB0cmVlCisgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuICh0cmVlIGRlc2Mp CisgeworICAgdHJlZSB0eXBlOworICAgdHJlZSBmaWVsZDsKKyAKKyAgIHR5 cGUgPSBUUkVFX1RZUEUgKGRlc2MpOworICAgZ2NjX2Fzc2VydCAoR0ZDX0RF U0NSSVBUT1JfVFlQRV9QICh0eXBlKSk7CisgCisgICBmaWVsZCA9IGdmY19h ZHZhbmNlX2NoYWluIChUWVBFX0ZJRUxEUyAodHlwZSksIFNQQU5fRklFTEQp OworICAgZ2NjX2Fzc2VydCAoZmllbGQgIT0gTlVMTF9UUkVFICYmIFRSRUVf VFlQRSAoZmllbGQpID09IGdmY19hcnJheV9pbmRleF90eXBlKTsKKyAKKyAg IHJldHVybiBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT01Q T05FTlRfUkVGLCBUUkVFX1RZUEUgKGZpZWxkKSwKKyAJCQkgIGRlc2MsIGZp ZWxkLCBOVUxMX1RSRUUpOworIH0KKyAKKyB0cmVlCisgZ2ZjX2NvbnZfZGVz Y3JpcHRvcl9zcGFuX2dldCAodHJlZSBkZXNjKQorIHsKKyAgIHJldHVybiBn ZmNfY29udl9kZXNjcmlwdG9yX3NwYW4gKGRlc2MpOworIH0KKyAKKyB2b2lk CisgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX3NldCAoc3RtdGJsb2NrX3Qg KmJsb2NrLCB0cmVlIGRlc2MsCisgCQkJCXRyZWUgdmFsdWUpCisgeworICAg dHJlZSB0ID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuIChkZXNjKTsKKyAg IGdmY19hZGRfbW9kaWZ5IChibG9jaywgdCwgZm9sZF9jb252ZXJ0IChUUkVF X1RZUEUgKHQpLCB2YWx1ZSkpOworIH0KKyAKICAKICB0cmVlCiAgZ2ZjX2Nv bnZfZGVzY3JpcHRvcl9yYW5rICh0cmVlIGRlc2MpCioqKioqKioqKioqKioq KiBnZmNfY29udl9zaGlmdF9kZXNjcmlwdG9yX2xib3VuZCAoc3RtdGJsCioq KiA0NzEsNDc2ICoqKioKLS0tIDUwMiw1MDggLS0tLQogICN1bmRlZiBEQVRB X0ZJRUxECiAgI3VuZGVmIE9GRlNFVF9GSUVMRAogICN1bmRlZiBEVFlQRV9G SUVMRAorICN1bmRlZiBTUEFOX0ZJRUxECiAgI3VuZGVmIERJTUVOU0lPTl9G SUVMRAogICN1bmRlZiBDQUZfVE9LRU5fRklFTEQKICAjdW5kZWYgU1RSSURF X1NVQkZJRUxECioqKioqKioqKioqKioqKiBnZmNfYWRkX3NzX3RvX2xvb3Ag KGdmY19sb29waW5mbyAqIGxvb3AsCioqKiA3MjAsNzI1ICoqKioKLS0tIDc1 Miw4MzEgLS0tLQogIH0KICAKICAKKyAvKiBSZXR1cm5zIHRydWUgaWYgdGhl IGV4cHJlc3Npb24gaXMgYW4gYXJyYXkgcG9pbnRlci4gICovCisgCisgc3Rh dGljIGJvb2wKKyBpc19wb2ludGVyX2FycmF5ICh0cmVlIGV4cHIpCisgewor ICAgaWYgKGZsYWdfb3Blbm1wKQorICAgICByZXR1cm4gZmFsc2U7CisgCisg ICBpZiAoZXhwciA9PSBOVUxMX1RSRUUKKyAgICAgICB8fCAhR0ZDX0RFU0NS SVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGV4cHIpKQorICAgICAgIHx8IEdG Q19DTEFTU19UWVBFX1AgKFRSRUVfVFlQRSAoZXhwcikpKQorICAgICByZXR1 cm4gZmFsc2U7CisgCisgICBpZiAoVFJFRV9DT0RFIChleHByKSA9PSBWQVJf REVDTAorICAgICAgICYmIEdGQ19ERUNMX1BUUl9BUlJBWV9QIChleHByKSkK KyAgICAgcmV0dXJuIHRydWU7CisgCisgICBpZiAoVFJFRV9DT0RFIChleHBy KSA9PSBQQVJNX0RFQ0wKKyAgICAgICAmJiBHRkNfREVDTF9QVFJfQVJSQVlf UCAoZXhwcikpCisgICAgIHJldHVybiB0cnVlOworIAorICAgLyogVGhlIGZp ZWxkIGRlY2xhcmF0aW9uIGlzIG1hcmtlZCBhcyBhbiBwb2ludGVyIGFycmF5 LiAgKi8KKyAgIGlmIChUUkVFX0NPREUgKGV4cHIpID09IENPTVBPTkVOVF9S RUYKKyAgICAgICAmJiBHRkNfREVDTF9QVFJfQVJSQVlfUCAoVFJFRV9PUEVS QU5EIChleHByLCAxKSkKKyAgICAgICAmJiAhR0ZDX0NMQVNTX1RZUEVfUCAo VFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKGV4cHIsIDEpKSkpCisgICAgIHJl dHVybiB0cnVlOworIAorICAgcmV0dXJuIGZhbHNlOworIH0KKyAKKyAKKyAv KiBSZXR1cm4gdGhlIHNwYW4gb2YgYW4gYXJyYXkuICAqLworIAorIHN0YXRp YyB0cmVlCisgZ2V0X2FycmF5X3NwYW4gKHRyZWUgZGVzYywgZ2ZjX2V4cHIg KmV4cHIpCisgeworICAgdHJlZSB0bXA7CisgCisgICBpZiAoaXNfcG9pbnRl cl9hcnJheSAoZGVzYykpCisgICAgIC8qIFRoaXMgd2lsbCBoYXZlIHRoZSBz cGFuIGZpZWxkIHNldC4gICovCisgICAgIHRtcCA9IGdmY19jb252X2Rlc2Ny aXB0b3Jfc3Bhbl9nZXQgKGRlc2MpOworICAgZWxzZSBpZiAoVFJFRV9DT0RF IChkZXNjKSA9PSBDT01QT05FTlRfUkVGCisgCSAgICYmIEdGQ19ERVNDUklQ VE9SX1RZUEVfUCAoVFJFRV9UWVBFIChkZXNjKSkKKyAJICAgJiYgR0ZDX0NM QVNTX1RZUEVfUCAoVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKGRlc2MsIDAp KSkpCisgICAgIHsKKyAgICAgICAvKiBUaGUgZGVzY3JpcHRvciBpcyBhIGNs YXNzIF9kYXRhIGZpZWxkIGFuZCBzbyB1c2UgdGhlIHZ0YWJsZQorIAkgc2l6 ZSBmb3IgdGhlIHJlY2VpdmluZyBzcGFuIGZpZWxkLiAgKi8KKyAgICAgICB0 bXAgPSBnZmNfZ2V0X3ZwdHJfZnJvbV9leHByIChkZXNjKTsKKyAgICAgICB0 bXAgPSBnZmNfdnB0cl9zaXplX2dldCAodG1wKTsKKyAgICAgfQorICAgZWxz ZSBpZiAoZXhwciAmJiBleHByLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJM RQorIAkgICAmJiBleHByLT5zeW10cmVlLT5uLnN5bS0+dHMudHlwZSA9PSBC VF9DTEFTUworIAkgICAmJiBleHByLT5yZWYtPnR5cGUgPT0gUkVGX0NPTVBP TkVOVAorIAkgICAmJiBleHByLT5yZWYtPm5leHQtPnR5cGUgPT0gUkVGX0FS UkFZCisgCSAgICYmIGV4cHItPnJlZi0+bmV4dC0+bmV4dCA9PSBOVUxMCisg CSAgICYmIENMQVNTX0RBVEEgKGV4cHItPnN5bXRyZWUtPm4uc3ltKS0+YXR0 ci5kaW1lbnNpb24pCisgICAgIHsKKyAgICAgICAvKiBEdW1teXMgY29tZSBp biBzb21ldGltZXMgd2l0aCB0aGUgZGVzY3JpcHRvciBkZXRhY2hlZCBmcm9t CisgCSB0aGUgY2xhc3MgZmllbGQgb3IgZGVjbGFyYXRpb24uICAqLworICAg ICAgIHRtcCA9IGdmY19jbGFzc192cHRyX2dldCAoZXhwci0+c3ltdHJlZS0+ bi5zeW0tPmJhY2tlbmRfZGVjbCk7CisgICAgICAgdG1wID0gZ2ZjX3ZwdHJf c2l6ZV9nZXQgKHRtcCk7CisgICAgIH0KKyAgIGVsc2UKKyAgICAgeworICAg ICAgIC8qIElmIG5vbmUgb2YgdGhlIGZhbmN5IHN0dWZmIHdvcmtzLCB0aGUg c3BhbiBpcyB0aGUgZWxlbWVudAorIAkgc2l6ZSBvZiB0aGUgYXJyYXkuICAq LworICAgICAgIHRtcCA9IGdmY19nZXRfZWxlbWVudF90eXBlIChUUkVFX1RZ UEUgKGRlc2MpKTsKKyAgICAgICB0bXAgPSBmb2xkX2NvbnZlcnQgKGdmY19h cnJheV9pbmRleF90eXBlLAorIAkJCSAgc2l6ZV9pbl9ieXRlcyAodG1wKSk7 CisgICAgIH0KKyAgIHJldHVybiB0bXA7CisgfQorIAorIAogIC8qIEdlbmVy YXRlIGFuIGluaXRpYWxpemVyIGZvciBhIHN0YXRpYyBwb2ludGVyIG9yIGFs bG9jYXRhYmxlIGFycmF5LiAgKi8KICAKICB2b2lkCioqKioqKioqKioqKioq KiBnZmNfY29udl9zY2FsYXJpemVkX2FycmF5X3JlZiAoZ2ZjX3NlICoKKioq IDMyMzksMzI0OSAqKioqCiAgICAgIGluZGV4ID0gZm9sZF9idWlsZDJfbG9j IChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBSLCBnZmNfYXJyYXlfaW5kZXhf dHlwZSwKICAJCQkgICAgIGluZGV4LCBpbmZvLT5vZmZzZXQpOwogIAohICAg aWYgKGV4cHIgJiYgKGlzX3N1YnJlZl9hcnJheSAoZXhwcikKICAJICAgICAg IHx8IChleHByLT50cy5kZWZlcnJlZCAmJiAoZXhwci0+ZXhwcl90eXBlID09 IEVYUFJfVkFSSUFCTEUKICAJCQkJCSB8fCBleHByLT5leHByX3R5cGUgPT0g RVhQUl9GVU5DVElPTikpKSkKICAgICAgZGVjbCA9IGV4cHItPnN5bXRyZWUt Pm4uc3ltLT5iYWNrZW5kX2RlY2w7CiAgCiAgICB0bXAgPSBidWlsZF9mb2xk X2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLCBpbmZvLT5kYXRh KTsKICAKICAgIC8qIFVzZSB0aGUgdnB0ciAnc2l6ZScgZmllbGQgdG8gYWNj ZXNzIGEgY2xhc3MgdGhlIGVsZW1lbnQgb2YgYSBjbGFzcwotLS0gMzM0NSwz MzcxIC0tLS0KICAgICAgaW5kZXggPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0 X2xvY2F0aW9uLCBQTFVTX0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBlLAog IAkJCSAgICAgaW5kZXgsIGluZm8tPm9mZnNldCk7CiAgCiEgICBpZiAoZXhw ciAmJiAoKGlzX3N1YnJlZl9hcnJheSAoZXhwcikKISAJCSYmIEdGQ19ERVND UklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFIChpbmZvLT5kZXNjcmlwdG9yKSkp CiAgCSAgICAgICB8fCAoZXhwci0+dHMuZGVmZXJyZWQgJiYgKGV4cHItPmV4 cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCiAgCQkJCQkgfHwgZXhwci0+ZXhw cl90eXBlID09IEVYUFJfRlVOQ1RJT04pKSkpCiAgICAgIGRlY2wgPSBleHBy LT5zeW10cmVlLT5uLnN5bS0+YmFja2VuZF9kZWNsOwogIAorICAgLyogQSBw b2ludGVyIGFycmF5IGNvbXBvbmVudCBjYW4gYmUgZGV0ZWN0ZWQgZnJvbSBp dHMgZmllbGQgZGVjbC4gRml4CisgICAgICB0aGUgZGVzY3JpcHRvciwgbWFy ayB0aGUgcmVzdWx0aW5nIHZhcmlhYmxlIGRlY2wgYW5kIHBhc3MgaXQgdG8K KyAgICAgIGdmY19idWlsZF9hcnJheV9yZWYuICAqLworICAgaWYgKGlzX3Bv aW50ZXJfYXJyYXkgKGluZm8tPmRlc2NyaXB0b3IpKQorICAgICB7CisgICAg ICAgaWYgKFRSRUVfQ09ERSAoaW5mby0+ZGVzY3JpcHRvcikgPT0gQ09NUE9O RU5UX1JFRikKKyAJeworIAkgIGRlY2wgPSBnZmNfZXZhbHVhdGVfbm93IChp bmZvLT5kZXNjcmlwdG9yLCAmc2UtPnByZSk7CisgCSAgR0ZDX0RFQ0xfUFRS X0FSUkFZX1AgKGRlY2wpID0gMTsKKyAJICBUUkVFX1VTRUQgKGRlY2wpID0g MTsKKyAJfQorICAgICAgIGlmIChkZWNsID09IE5VTExfVFJFRSkKKyAJZGVj bCA9IGluZm8tPmRlc2NyaXB0b3I7CisgICAgIH0KKyAKICAgIHRtcCA9IGJ1 aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAoaW5wdXRfbG9jYXRpb24sIGlu Zm8tPmRhdGEpOwogIAogICAgLyogVXNlIHRoZSB2cHRyICdzaXplJyBmaWVs ZCB0byBhY2Nlc3MgYSBjbGFzcyB0aGUgZWxlbWVudCBvZiBhIGNsYXNzCioq KioqKioqKioqKioqKiBnZmNfY29udl9hcnJheV9yZWYgKGdmY19zZSAqIHNl LCBnZmNfYXJyCioqKiAzMzUwLDMzNTUgKioqKgotLS0gMzQ3MiwzNDc4IC0t LS0KICAgIHRyZWUgb2Zmc2V0LCBjc3Rfb2Zmc2V0OwogICAgdHJlZSB0bXA7 CiAgICB0cmVlIHN0cmlkZTsKKyAgIHRyZWUgZGVjbCA9IE5VTExfVFJFRTsK ICAgIGdmY19zZSBpbmRleHNlOwogICAgZ2ZjX3NlIHRtcHNlOwogICAgZ2Zj X3N5bWJvbCAqIHN5bSA9IGV4cHItPnN5bXRyZWUtPm4uc3ltOwoqKioqKioq KioqKioqKiogZ2ZjX2NvbnZfYXJyYXlfcmVmIChnZmNfc2UgKiBzZSwgZ2Zj X2FycgoqKiogMzQ5NCwzNTAxICoqKioKICAgICAgb2Zmc2V0ID0gZm9sZF9i dWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBSLAogIAkJCSAg ICAgIGdmY19hcnJheV9pbmRleF90eXBlLCBvZmZzZXQsIGNzdF9vZmZzZXQp OwogIAohICAgc2UtPmV4cHIgPSBidWlsZF9hcnJheV9yZWYgKHNlLT5leHBy LCBvZmZzZXQsIHN5bS0+dHMudHlwZSA9PSBCVF9DTEFTUyA/CiEgCQkJCU5V TExfVFJFRSA6IHN5bS0+YmFja2VuZF9kZWNsLCBzZS0+Y2xhc3NfdnB0cik7 CiAgfQogIAogIAotLS0gMzYxNywzNjQzIC0tLS0KICAgICAgb2Zmc2V0ID0g Zm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBSLAog IAkJCSAgICAgIGdmY19hcnJheV9pbmRleF90eXBlLCBvZmZzZXQsIGNzdF9v ZmZzZXQpOwogIAohICAgLyogQSBwb2ludGVyIGFycmF5IGNvbXBvbmVudCBj YW4gYmUgZGV0ZWN0ZWQgZnJvbSBpdHMgZmllbGQgZGVjbC4gRml4CiEgICAg ICB0aGUgZGVzY3JpcHRvciwgbWFyayB0aGUgcmVzdWx0aW5nIHZhcmlhYmxl IGRlY2wgYW5kIHBhc3MgaXQgdG8KISAgICAgIGJ1aWxkX2FycmF5X3JlZi4g ICovCiEgICBpZiAoIWV4cHItPnRzLmRlZmVycmVkICYmICFzeW0tPmF0dHIu Y29kaW1lbnNpb24gJiYgaXNfcG9pbnRlcl9hcnJheSAoc2UtPmV4cHIpKQoh ICAgICB7CiEgICAgICAgaWYgKFRSRUVfQ09ERSAoc2UtPmV4cHIpID09IENP TVBPTkVOVF9SRUYpCiEgCXsKISAJICBkZWNsID0gZ2ZjX2V2YWx1YXRlX25v dyAoc2UtPmV4cHIsICZzZS0+cHJlKTsKISAJICBHRkNfREVDTF9QVFJfQVJS QVlfUCAoZGVjbCkgPSAxOwohIAkgIFRSRUVfVVNFRCAoZGVjbCkgPSAxOwoh IAl9CiEgICAgICAgZWxzZQohIAlkZWNsID0gc2UtPmV4cHI7CiEgICAgIH0K ISAgIGVsc2UgaWYgKGV4cHItPnRzLmRlZmVycmVkCiEgCSAgIHx8IChzeW0t PnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSICYmIHN5bS0+YXR0ci5zZWxlY3Rf dHlwZV90ZW1wb3JhcnkpKQohICAgICBkZWNsID0gc3ltLT5iYWNrZW5kX2Rl Y2w7CiEgICBlbHNlIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCiEg ICAgIGRlY2wgPSBOVUxMX1RSRUU7CiEgCiEgICBzZS0+ZXhwciA9IGJ1aWxk X2FycmF5X3JlZiAoc2UtPmV4cHIsIG9mZnNldCwgZGVjbCwgc2UtPmNsYXNz X3ZwdHIpOwogIH0KICAKICAKKioqKioqKioqKioqKioqIGdmY19hcnJheV9h bGxvY2F0ZSAoZ2ZjX3NlICogc2UsIGdmY19leHAKKioqIDU2NDgsNTY1MyAq KioqCi0tLSA1NzkwLDU4MDMgLS0tLQogICAgaWYgKGRpbWVuc2lvbikKICAg ICAgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9vZmZzZXRfc2V0ICgmc2V0X2Rlc2Ny aXB0b3JfYmxvY2ssIHNlLT5leHByLCBvZmZzZXQpOwogIAorICAgLyogUG9p bnRlciBhcnJheXMgbmVlZCB0aGUgc3BhbiBmaWVsZCB0byBiZSBzZXQuICAq LworICAgaWYgKGlzX3BvaW50ZXJfYXJyYXkgKHNlLT5leHByKSkKKyAgICAg eworICAgICAgIHRtcCA9IFRZUEVfU0laRV9VTklUIChnZmNfZ2V0X2VsZW1l bnRfdHlwZSAoVFJFRV9UWVBFIChzZS0+ZXhwcikpKTsKKyAgICAgICB0bXAg PSBmb2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRleF90eXBlLCB0bXApOwor ICAgICAgIGdmY19jb252X2Rlc2NyaXB0b3Jfc3Bhbl9zZXQgKCZzZXRfZGVz Y3JpcHRvcl9ibG9jaywgc2UtPmV4cHIsIHRtcCk7CisgICAgIH0KKyAKICAg IHNldF9kZXNjcmlwdG9yID0gZ2ZjX2ZpbmlzaF9ibG9jayAoJnNldF9kZXNj cmlwdG9yX2Jsb2NrKTsKICAgIGlmIChzdGF0dXMgIT0gTlVMTF9UUkVFKQog ICAgICB7CioqKioqKioqKioqKioqKiBnZmNfY29udl9leHByX2Rlc2NyaXB0 b3IgKGdmY19zZSAqc2UsIGdmCioqKiA2ODUxLDY4NTYgKioqKgotLS0gNzAw MSw3MDEwIC0tLS0KICAJICAgICAgLyogQWRkIGFueSBvZmZzZXRzIGZyb20g c3VicmVmZXJlbmNlcy4gICovCiAgCSAgICAgIGdmY19nZXRfZGF0YXB0cl9v ZmZzZXQgKCZzZS0+cHJlLCBzZS0+ZXhwciwgZGVzYywgTlVMTF9UUkVFLAog IAkJCQkgICAgICBzdWJyZWZfYXJyYXlfdGFyZ2V0LCBleHByKTsKKyAKKyAJ ICAgICAgLyogLi4uLmFuZCBzZXQgdGhlIHNwYW4gZmllbGQuICAqLworIAkg ICAgICB0bXAgPSBnZXRfYXJyYXlfc3BhbiAoZGVzYywgZXhwcik7CisgCSAg ICAgIGdmY19jb252X2Rlc2NyaXB0b3Jfc3Bhbl9zZXQgKCZzZS0+cHJlLCBz ZS0+ZXhwciwgdG1wKTsKICAJICAgIH0KICAJICBlbHNlIGlmIChzZS0+d2Fu dF9wb2ludGVyKQogIAkgICAgewoqKioqKioqKioqKioqKiogZ2ZjX2NvbnZf ZXhwcl9kZXNjcmlwdG9yIChnZmNfc2UgKnNlLCBnZgoqKiogNjg4Niw2ODkz ICoqKioKLS0tIDcwNDAsNzA1OCAtLS0tCiAgCSAgICBzZS0+c3MgPSBzczsK ICAJICBlbHNlCiAgCSAgICBnY2NfYXNzZXJ0IChzZS0+c3MgPT0gc3MpOwor IAorIAkgIGlmICghaXNfcG9pbnRlcl9hcnJheSAoc2UtPmV4cHIpKQorIAkg ICAgeworIAkgICAgICB0bXAgPSBnZmNfZ2V0X2VsZW1lbnRfdHlwZSAoVFJF RV9UWVBFIChzZS0+ZXhwcikpOworIAkgICAgICB0bXAgPSBmb2xkX2NvbnZl cnQgKGdmY19hcnJheV9pbmRleF90eXBlLAorIAkJCQkgIHNpemVfaW5fYnl0 ZXMgKHRtcCkpOworIAkgICAgICBnZmNfY29udl9kZXNjcmlwdG9yX3NwYW5f c2V0ICgmc2UtPnByZSwgc2UtPmV4cHIsIHRtcCk7CisgCSAgICB9CisgCiAg CSAgc2UtPmV4cHIgPSBnZmNfYnVpbGRfYWRkcl9leHByIChOVUxMX1RSRUUs IHNlLT5leHByKTsKICAJICBnZmNfY29udl9leHByIChzZSwgZXhwcik7Cisg CisgCiAgCSAgZ2ZjX2ZyZWVfc3NfY2hhaW4gKHNzKTsKICAJICByZXR1cm47 CiAgCX0KKioqKioqKioqKioqKioqIGdmY19jb252X2V4cHJfZGVzY3JpcHRv ciAoZ2ZjX3NlICpzZSwgZ2YKKioqIDcxMDcsNzExNSAqKioqCiAgICAgICAg ZGVzYyA9IGluZm8tPmRlc2NyaXB0b3I7CiAgICAgICAgaWYgKHNlLT5kaXJl Y3RfYnlyZWYgJiYgIXNlLT5ieXJlZl9ub2Fzc2lnbikKICAJewohIAkgIC8q IEZvciBwb2ludGVyIGFzc2lnbm1lbnRzIHdlIGZpbGwgaW4gdGhlIGRlc3Rp bmF0aW9uLiAgKi8KICAJICBwYXJtID0gc2UtPmV4cHI7CiAgCSAgcGFybXR5 cGUgPSBUUkVFX1RZUEUgKHBhcm0pOwogIAl9CiAgICAgICAgZWxzZQogIAl7 Ci0tLSA3MjcyLDcyODQgLS0tLQogICAgICAgIGRlc2MgPSBpbmZvLT5kZXNj cmlwdG9yOwogICAgICAgIGlmIChzZS0+ZGlyZWN0X2J5cmVmICYmICFzZS0+ YnlyZWZfbm9hc3NpZ24pCiAgCXsKISAJICAvKiBGb3IgcG9pbnRlciBhc3Np Z25tZW50cyB3ZSBmaWxsIGluIHRoZSBkZXN0aW5hdGlvbi4uLi4gICovCiAg CSAgcGFybSA9IHNlLT5leHByOwogIAkgIHBhcm10eXBlID0gVFJFRV9UWVBF IChwYXJtKTsKKyAKKyAJICAvKiAuLi4uYW5kIHNldCB0aGUgc3BhbiBmaWVs ZC4gICovCisgCSAgdG1wID0gZ2V0X2FycmF5X3NwYW4gKGRlc2MsIGV4cHIp OworIAkgIGdmY19jb252X2Rlc2NyaXB0b3Jfc3Bhbl9zZXQgKCZsb29wLnBy ZSwgcGFybSwgdG1wKTsKICAJfQogICAgICAgIGVsc2UKICAJewpJbmRleDog Z2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuaAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CioqKiBnY2MvZm9ydHJhbi90cmFucy1hcnJheS5oCShyZXZpc2lvbiAy NDkwNTApCi0tLSBnY2MvZm9ydHJhbi90cmFucy1hcnJheS5oCSh3b3JraW5n IGNvcHkpCioqKioqKioqKioqKioqKiB2b2lkIGdmY190cmFuc19hcnJheV9j b2JvdW5kcyAodHJlZSwgc3RtCioqKiAxNTUsMTYwICoqKioKLS0tIDE1NSwx NjEgLS0tLQogIHRyZWUgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAo dHJlZSk7CiAgdHJlZSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfYWRkciAo dHJlZSk7CiAgdHJlZSBnZmNfY29udl9kZXNjcmlwdG9yX29mZnNldF9nZXQg KHRyZWUpOworIHRyZWUgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX2dldCAo dHJlZSk7CiAgdHJlZSBnZmNfY29udl9kZXNjcmlwdG9yX2R0eXBlICh0cmVl KTsKICB0cmVlIGdmY19jb252X2Rlc2NyaXB0b3JfcmFuayAodHJlZSk7CiAg dHJlZSBnZmNfZ2V0X2Rlc2NyaXB0b3JfZGltZW5zaW9uICh0cmVlKTsKKioq KioqKioqKioqKioqIHRyZWUgZ2ZjX2NvbnZfZGVzY3JpcHRvcl90b2tlbiAo dHJlZSk7CioqKiAxNjUsMTcwICoqKioKLS0tIDE2NiwxNzIgLS0tLQogIAog IHZvaWQgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX3NldCAoc3RtdGJsb2Nr X3QgKiwgdHJlZSwgdHJlZSk7CiAgdm9pZCBnZmNfY29udl9kZXNjcmlwdG9y X29mZnNldF9zZXQgKHN0bXRibG9ja190ICosIHRyZWUsIHRyZWUpOworIHZv aWQgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX3NldCAoc3RtdGJsb2NrX3Qg KiwgdHJlZSwgdHJlZSk7CiAgdm9pZCBnZmNfY29udl9kZXNjcmlwdG9yX3N0 cmlkZV9zZXQgKHN0bXRibG9ja190ICosIHRyZWUsIHRyZWUsIHRyZWUpOwog IHZvaWQgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9sYm91bmRfc2V0IChzdG10Ymxv Y2tfdCAqLCB0cmVlLCB0cmVlLCB0cmVlKTsKICB2b2lkIGdmY19jb252X2Rl c2NyaXB0b3JfdWJvdW5kX3NldCAoc3RtdGJsb2NrX3QgKiwgdHJlZSwgdHJl ZSwgdHJlZSk7CkluZGV4OiBnY2MvZm9ydHJhbi90cmFucy5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFuL3RyYW5zLmMJKHJldmlz aW9uIDI0OTA1MCkKLS0tIGdjYy9mb3J0cmFuL3RyYW5zLmMJKHdvcmtpbmcg Y29weSkKKioqKioqKioqKioqKioqIGdmY19idWlsZF9hcnJheV9yZWYgKHRy ZWUgYmFzZSwgdHJlZSBvZmYKKioqIDM1OCwzNjUgKioqKgogICAgaWYgKChk ZWNsICYmIChUUkVFX0NPREUgKGRlY2wpID09IEZJRUxEX0RFQ0wKICAJCXx8 IFZBUl9PUl9GVU5DVElPTl9ERUNMX1AgKGRlY2wpCiAgCQl8fCBUUkVFX0NP REUgKGRlY2wpID09IFBBUk1fREVDTCkKISAgICAgICAgJiYgKChHRkNfREVD TF9TVUJSRUZfQVJSQVlfUCAoZGVjbCkKISAJICAgICYmICFpbnRlZ2VyX3pl cm9wIChHRkNfREVDTF9TUEFOIChkZWNsKSkpCiAgCSAgIHx8IEdGQ19ERUNM X0NMQVNTIChkZWNsKQogIAkgICB8fCBzcGFuICE9IE5VTExfVFJFRSkpCiAg ICAgICAgfHwgdnB0ciAhPSBOVUxMX1RSRUUpCi0tLSAzNTgsMzY0IC0tLS0K ICAgIGlmICgoZGVjbCAmJiAoVFJFRV9DT0RFIChkZWNsKSA9PSBGSUVMRF9E RUNMCiAgCQl8fCBWQVJfT1JfRlVOQ1RJT05fREVDTF9QIChkZWNsKQogIAkJ fHwgVFJFRV9DT0RFIChkZWNsKSA9PSBQQVJNX0RFQ0wpCiEgICAgICAgICYm ICgoR0ZDX0RFQ0xfUFRSX0FSUkFZX1AgKGRlY2wpKQogIAkgICB8fCBHRkNf REVDTF9DTEFTUyAoZGVjbCkKICAJICAgfHwgc3BhbiAhPSBOVUxMX1RSRUUp KQogICAgICAgIHx8IHZwdHIgIT0gTlVMTF9UUkVFKQoqKioqKioqKioqKioq KiogZ2ZjX2J1aWxkX2FycmF5X3JlZiAodHJlZSBiYXNlLCB0cmVlIG9mZgoq KiogMzkwLDM5NyAqKioqCiAgCiAgCSAgICAgIHNwYW4gPSBnZmNfY2xhc3Nf dnRhYl9zaXplX2dldCAoZGVjbCk7CiAgCSAgICB9CiEgCSAgZWxzZSBpZiAo R0ZDX0RFQ0xfU1VCUkVGX0FSUkFZX1AgKGRlY2wpKQohIAkgICAgc3BhbiA9 IEdGQ19ERUNMX1NQQU4gKGRlY2wpOwogIAkgIGVsc2UgaWYgKHNwYW4pCiAg CSAgICBzcGFuID0gZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlw ZSwgc3Bhbik7CiAgCSAgZWxzZQotLS0gMzg5LDQwMCAtLS0tCiAgCiAgCSAg ICAgIHNwYW4gPSBnZmNfY2xhc3NfdnRhYl9zaXplX2dldCAoZGVjbCk7CiAg CSAgICB9CiEgCSAgZWxzZSBpZiAoR0ZDX0RFQ0xfUFRSX0FSUkFZX1AgKGRl Y2wpKQohIAkgICAgewohIAkgICAgICBpZiAoVFJFRV9DT0RFIChkZWNsKSA9 PSBQQVJNX0RFQ0wpCiEgCQlkZWNsID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9y ZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwgZGVjbCk7CiEgCSAgICAgIHNwYW4g PSBnZmNfY29udl9kZXNjcmlwdG9yX3NwYW5fZ2V0IChkZWNsKTsKISAJICAg IH0KICAJICBlbHNlIGlmIChzcGFuKQogIAkgICAgc3BhbiA9IGZvbGRfY29u dmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIHNwYW4pOwogIAkgIGVsc2UK SW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLWRlY2wuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CioqKiBnY2MvZm9ydHJhbi90cmFucy1kZWNsLmMJKHJldmlz aW9uIDI0OTA1MCkKLS0tIGdjYy9mb3J0cmFuL3RyYW5zLWRlY2wuYwkod29y a2luZyBjb3B5KQoqKioqKioqKioqKioqKiogZ2ZjX2dldF9zeW1ib2xfZGVj bCAoZ2ZjX3N5bWJvbCAqIHN5bSkKKioqIDE1MTcsMTUyMiAqKioqCi0tLSAx NTE3LDE1MjUgLS0tLQogICAgICAgIC8qIER1bW15IHZhcmlhYmxlcyBzaG91 bGQgYWxyZWFkeSBoYXZlIGJlZW4gY3JlYXRlZC4gICovCiAgICAgICAgZ2Nj X2Fzc2VydCAoc3ltLT5iYWNrZW5kX2RlY2wpOwogIAorICAgICAgIGlmIChz eW0tPmF0dHIucG9pbnRlciAmJiBzeW0tPmF0dHIuZGltZW5zaW9uICYmIHN5 bS0+dHMudHlwZSAhPSBCVF9DTEFTUykKKyAJR0ZDX0RFQ0xfUFRSX0FSUkFZ X1AgKHN5bS0+YmFja2VuZF9kZWNsKSA9IDE7CisgCiAgICAgICAgLyogQ3Jl YXRlIGEgY2hhcmFjdGVyIGxlbmd0aCB2YXJpYWJsZS4gICovCiAgICAgICAg aWYgKHN5bS0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIpCiAgCXsKKioqKioq KioqKioqKioqIGdmY19nZXRfc3ltYm9sX2RlY2wgKGdmY19zeW1ib2wgKiBz eW0pCioqKiAxNzUxLDE3NzcgKioqKgogICAgaWYgKHN5bS0+dHMudHlwZSA9 PSBCVF9DSEFSQUNURVIpCiAgICAgIC8qIENoYXJhY3RlciB2YXJpYWJsZXMg bmVlZCBzcGVjaWFsIGhhbmRsaW5nLiAgKi8KICAgICAgZ2ZjX2FsbG9jYXRl X2xhbmdfZGVjbCAoZGVjbCk7Ci0gICBlbHNlIGlmIChzeW0tPmF0dHIuc3Vi cmVmX2FycmF5X3BvaW50ZXIpCi0gICAgIC8qIFdlIG5lZWQgdGhlIHNwYW4g Zm9yIHRoZXNlIGJlYXN0cy4gICovCi0gICAgIGdmY19hbGxvY2F0ZV9sYW5n X2RlY2wgKGRlY2wpOwogIAohICAgaWYgKHN5bS0+YXR0ci5zdWJyZWZfYXJy YXlfcG9pbnRlcikKISAgICAgewohICAgICAgIHRyZWUgc3BhbjsKISAgICAg ICBHRkNfREVDTF9TVUJSRUZfQVJSQVlfUCAoZGVjbCkgPSAxOwohICAgICAg IHNwYW4gPSBidWlsZF9kZWNsIChpbnB1dF9sb2NhdGlvbiwKISAJCQkgVkFS X0RFQ0wsIGNyZWF0ZV90bXBfdmFyX25hbWUgKCJzcGFuIiksCiEgCQkJIGdm Y19hcnJheV9pbmRleF90eXBlKTsKISAgICAgICBnZmNfZmluaXNoX3Zhcl9k ZWNsIChzcGFuLCBzeW0pOwohICAgICAgIFRSRUVfU1RBVElDIChzcGFuKSA9 IFRSRUVfU1RBVElDIChkZWNsKTsKISAgICAgICBERUNMX0FSVElGSUNJQUwg KHNwYW4pID0gMTsKICAKISAgICAgICBHRkNfREVDTF9TUEFOIChkZWNsKSA9 IHNwYW47CiEgICAgICAgR0ZDX1RZUEVfQVJSQVlfU1BBTiAoVFJFRV9UWVBF IChkZWNsKSkgPSBzcGFuOwohICAgICB9CiAgCiAgICBpZiAoc3ltLT50cy50 eXBlID09IEJUX0NMQVNTKQohIAlHRkNfREVDTF9DTEFTUyhkZWNsKSA9IDE7 CiAgCiAgICBzeW0tPmJhY2tlbmRfZGVjbCA9IGRlY2w7CiAgCi0tLSAxNzU0 LDE3NzAgLS0tLQogICAgaWYgKHN5bS0+dHMudHlwZSA9PSBCVF9DSEFSQUNU RVIpCiAgICAgIC8qIENoYXJhY3RlciB2YXJpYWJsZXMgbmVlZCBzcGVjaWFs IGhhbmRsaW5nLiAgKi8KICAgICAgZ2ZjX2FsbG9jYXRlX2xhbmdfZGVjbCAo ZGVjbCk7CiAgCiEgICBpZiAoc3ltLT5hc3NvYyAmJiBzeW0tPmF0dHIuc3Vi cmVmX2FycmF5X3BvaW50ZXIpCiEgICAgIHN5bS0+YXR0ci5wb2ludGVyID0g MTsKICAKISAgIGlmIChzeW0tPmF0dHIucG9pbnRlciAmJiBzeW0tPmF0dHIu ZGltZW5zaW9uCiEgICAgICAgJiYgIXN5bS0+dHMuZGVmZXJyZWQKISAgICAg ICAmJiAhc3ltLT5hdHRyLnNlbGVjdF90eXBlX3RlbXBvcmFyeSkKISAgICAg R0ZDX0RFQ0xfUFRSX0FSUkFZX1AgKGRlY2wpID0gMTsKICAKICAgIGlmIChz eW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCiEgICAgIEdGQ19ERUNMX0NMQVNT KGRlY2wpID0gMTsKICAKICAgIHN5bS0+YmFja2VuZF9kZWNsID0gZGVjbDsK ICAKKioqKioqKioqKioqKioqIGdmY190cmFuc19kZWZlcnJlZF92YXJzIChn ZmNfc3ltYm9sICogcHIKKioqIDQyNjksNDI4MSAqKioqCiAgICAgICAgaWYg KHN5bS0+YXNzb2MpCiAgCWNvbnRpbnVlOwogIAohICAgICAgIGlmIChzeW0t PmF0dHIuc3VicmVmX2FycmF5X3BvaW50ZXIKISAJICAmJiBHRkNfREVDTF9T UEFOIChzeW0tPmJhY2tlbmRfZGVjbCkKISAJICAmJiAhVFJFRV9TVEFUSUMg KEdGQ19ERUNMX1NQQU4gKHN5bS0+YmFja2VuZF9kZWNsKSkpCiAgCXsKICAJ ICBnZmNfaW5pdF9ibG9jayAoJnRtcGJsb2NrKTsKISAJICBnZmNfYWRkX21v ZGlmeSAoJnRtcGJsb2NrLCBHRkNfREVDTF9TUEFOIChzeW0tPmJhY2tlbmRf ZGVjbCksCiEgCQkJICBidWlsZF9pbnRfY3N0IChnZmNfYXJyYXlfaW5kZXhf dHlwZSwgMCkpOwogIAkgIGdmY19hZGRfaW5pdF9jbGVhbnVwIChibG9jaywg Z2ZjX2ZpbmlzaF9ibG9jayAoJnRtcGJsb2NrKSwKICAJCQkJTlVMTF9UUkVF KTsKICAJfQotLS0gNDI2Miw0Mjc2IC0tLS0KICAgICAgICBpZiAoc3ltLT5h c3NvYykKICAJY29udGludWU7CiAgCiEgICAgICAgaWYgKHN5bS0+YXR0ci5w b2ludGVyICYmIHN5bS0+YXR0ci5kaW1lbnNpb24KISAJICAmJiAhc3ltLT5h dHRyLnVzZV9hc3NvYwohIAkgICYmICFzeW0tPmF0dHIuaG9zdF9hc3NvYwoh IAkgICYmICFzeW0tPmF0dHIuZHVtbXkKISAJICAmJiBHRkNfREVTQ1JJUFRP Ul9UWVBFX1AgKFRSRUVfVFlQRSAoc3ltLT5iYWNrZW5kX2RlY2wpKSkKICAJ ewogIAkgIGdmY19pbml0X2Jsb2NrICgmdG1wYmxvY2spOwohIAkgIGdmY19j b252X2Rlc2NyaXB0b3Jfc3Bhbl9zZXQgKCZ0bXBibG9jaywgc3ltLT5iYWNr ZW5kX2RlY2wsCiEgCQkJCWJ1aWxkX2ludF9jc3QgKGdmY19hcnJheV9pbmRl eF90eXBlLCAwKSk7CiAgCSAgZ2ZjX2FkZF9pbml0X2NsZWFudXAgKGJsb2Nr LCBnZmNfZmluaXNoX2Jsb2NrICgmdG1wYmxvY2spLAogIAkJCQlOVUxMX1RS RUUpOwogIAl9CkluZGV4OiBnY2MvZm9ydHJhbi90cmFucy1leHByLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vdHJhbnMtZXhw ci5jCShyZXZpc2lvbiAyNDkwNTApCi0tLSBnY2MvZm9ydHJhbi90cmFucy1l eHByLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGdmY190cmFu c19wb2ludGVyX2Fzc2lnbm1lbnQgKGdmY19leHByICoKKioqIDgyMjIsODIy OCAqKioqCiAgICBzdG10YmxvY2tfdCBibG9jazsKICAgIHRyZWUgZGVzYzsK ICAgIHRyZWUgdG1wOwotICAgdHJlZSBkZWNsOwogICAgYm9vbCBzY2FsYXIs IG5vbl9wcm9jX3BvaW50ZXJfYXNzaWduOwogICAgZ2ZjX3NzICpzczsKICAK LS0tIDgyMjIsODIyNyAtLS0tCioqKioqKioqKioqKioqKiBnZmNfdHJhbnNf cG9pbnRlcl9hc3NpZ25tZW50IChnZmNfZXhwciAqCioqKiA4NDExLDg0MzQg KioqKgogIAkgIGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAoJmxzZSwgZXhw cjIpOwogIAkgIHN0cmxlbl9yaHMgPSBsc2Uuc3RyaW5nX2xlbmd0aDsKICAK ISAJICAvKiBJZiB0aGlzIGlzIGEgc3VicmVmZXJlbmNlIGFycmF5IHBvaW50 ZXIgYXNzaWdubWVudCwgdXNlIHRoZSByaHMKISAJICAgICBkZXNjcmlwdG9y IGVsZW1lbnQgc2l6ZSBmb3IgdGhlIGxocyBzcGFuLiAgKi8KISAJICBpZiAo ZXhwcjEtPnN5bXRyZWUtPm4uc3ltLT5hdHRyLnN1YnJlZl9hcnJheV9wb2lu dGVyKQohIAkgICAgewohIAkgICAgICBkZWNsID0gZXhwcjEtPnN5bXRyZWUt Pm4uc3ltLT5iYWNrZW5kX2RlY2w7CiEgCSAgICAgIGdmY19pbml0X3NlICgm cnNlLCBOVUxMKTsKISAJICAgICAgcnNlLmRlc2NyaXB0b3Jfb25seSA9IDE7 CiEgCSAgICAgIGdmY19jb252X2V4cHIgKCZyc2UsIGV4cHIyKTsKISAJICAg ICAgaWYgKGV4cHIxLT50cy50eXBlID09IEJUX0NMQVNTKQohIAkJdHJhbnNf Y2xhc3NfdnB0cl9sZW5fYXNzaWdubWVudCAoJmJsb2NrLCBleHByMSwgZXhw cjIsICZyc2UsCiEgCQkJCQkJIE5VTEwsIE5VTEwpOwohIAkgICAgICB0bXAg PSBnZmNfZ2V0X2VsZW1lbnRfdHlwZSAoVFJFRV9UWVBFIChyc2UuZXhwcikp OwohIAkgICAgICB0bXAgPSBmb2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRl eF90eXBlLCBzaXplX2luX2J5dGVzICh0bXApKTsKISAJICAgICAgaWYgKCFJ TlRFR0VSX0NTVF9QICh0bXApKQohIAkJZ2ZjX2FkZF9ibG9ja190b19ibG9j ayAoJmxzZS5wb3N0LCAmcnNlLnByZSk7CiEgCSAgICAgIGdmY19hZGRfbW9k aWZ5ICgmbHNlLnBvc3QsIEdGQ19ERUNMX1NQQU4oZGVjbCksIHRtcCk7CiEg CSAgICB9CiEgCSAgZWxzZSBpZiAoZXhwcjEtPnRzLnR5cGUgPT0gQlRfQ0xB U1MpCiAgCSAgICB7CiAgCSAgICAgIHJzZS5leHByID0gTlVMTF9UUkVFOwog IAkgICAgICByc2Uuc3RyaW5nX2xlbmd0aCA9IE5VTExfVFJFRTsKLS0tIDg0 MTAsODQxNiAtLS0tCiAgCSAgZ2ZjX2NvbnZfZXhwcl9kZXNjcmlwdG9yICgm bHNlLCBleHByMik7CiAgCSAgc3RybGVuX3JocyA9IGxzZS5zdHJpbmdfbGVu Z3RoOwogIAohIAkgIGlmIChleHByMS0+dHMudHlwZSA9PSBCVF9DTEFTUykK ICAJICAgIHsKICAJICAgICAgcnNlLmV4cHIgPSBOVUxMX1RSRUU7CiAgCSAg ICAgIHJzZS5zdHJpbmdfbGVuZ3RoID0gTlVMTF9UUkVFOwoqKioqKioqKioq KioqKiogZ2ZjX3RyYW5zX3BvaW50ZXJfYXNzaWdubWVudCAoZ2ZjX2V4cHIg KgoqKiogODQ0NSw4NDUxICoqKioKICAJICAgIHsKICAJICAgICAgcnNlLmV4 cHIgPSBnZmNfY2xhc3NfZGF0YV9nZXQgKHJzZS5leHByKTsKICAJICAgICAg Z2ZjX2FkZF9tb2RpZnkgKCZsc2UucHJlLCBkZXNjLCByc2UuZXhwcik7CiEg CSAgICB9CiAgCSAgZWxzZQogIAkgICAgewogIAkgICAgICBleHByMV92cHRy ID0gdHJhbnNfY2xhc3NfdnB0cl9sZW5fYXNzaWdubWVudCAoJmJsb2NrLCBl eHByMSwKLS0tIDg0MjcsODQzOCAtLS0tCiAgCSAgICB7CiAgCSAgICAgIHJz ZS5leHByID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChyc2UuZXhwcik7CiAgCSAg ICAgIGdmY19hZGRfbW9kaWZ5ICgmbHNlLnByZSwgZGVzYywgcnNlLmV4cHIp OwohIAkgICAgICAvKiBTZXQgdGhlIGxocyBzcGFuLiAgKi8KISAJICAgICAg dG1wID0gVFJFRV9UWVBFIChyc2UuZXhwcik7CiEgCSAgICAgIHRtcCA9IFRZ UEVfU0laRV9VTklUIChnZmNfZ2V0X2VsZW1lbnRfdHlwZSAodG1wKSk7CiEg CSAgICAgIHRtcCA9IGZvbGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5 cGUsIHRtcCk7CiEgCSAgICAgIGdmY19jb252X2Rlc2NyaXB0b3Jfc3Bhbl9z ZXQgKCZsc2UucHJlLCBkZXNjLCB0bXApOwohICAJICAgIH0KICAJICBlbHNl CiAgCSAgICB7CiAgCSAgICAgIGV4cHIxX3ZwdHIgPSB0cmFuc19jbGFzc192 cHRyX2xlbl9hc3NpZ25tZW50ICgmYmxvY2ssIGV4cHIxLAoqKioqKioqKioq KioqKiogZ2ZjX3RyYW5zX3BvaW50ZXJfYXNzaWdubWVudCAoZ2ZjX2V4cHIg KgoqKiogODQ5MSw4NDk3ICoqKioKICAJCSBjb252ZXJ0ZWQgaW4gcnNlIGFu ZCBub3cgaGF2ZSB0byBidWlsZCB0aGUgY29ycmVjdCBMSFMKICAJCSBkZXNj cmlwdG9yIGZvciBpdC4gICovCiAgCiEgCSAgICAgIHRyZWUgZHR5cGUsIGRh dGE7CiAgCSAgICAgIHRyZWUgb2Zmcywgc3RyaWRlOwogIAkgICAgICB0cmVl IGxib3VuZCwgdWJvdW5kOwogIAotLS0gODQ3OCw4NDg0IC0tLS0KICAJCSBj b252ZXJ0ZWQgaW4gcnNlIGFuZCBub3cgaGF2ZSB0byBidWlsZCB0aGUgY29y cmVjdCBMSFMKICAJCSBkZXNjcmlwdG9yIGZvciBpdC4gICovCiAgCiEgCSAg ICAgIHRyZWUgZHR5cGUsIGRhdGEsIHNwYW47CiAgCSAgICAgIHRyZWUgb2Zm cywgc3RyaWRlOwogIAkgICAgICB0cmVlIGxib3VuZCwgdWJvdW5kOwogIAoq KioqKioqKioqKioqKiogZ2ZjX3RyYW5zX3BvaW50ZXJfYXNzaWdubWVudCAo Z2ZjX2V4cHIgKgoqKiogODUwNCw4NTA5ICoqKioKLS0tIDg0OTEsODUwOCAt LS0tCiAgCSAgICAgIGRhdGEgPSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFf Z2V0IChyc2UuZXhwcik7CiAgCSAgICAgIGdmY19jb252X2Rlc2NyaXB0b3Jf ZGF0YV9zZXQgKCZibG9jaywgZGVzYywgZGF0YSk7CiAgCisgCSAgICAgIC8q IENvcHkgdGhlIHNwYW4uICAqLworIAkgICAgICBpZiAoVFJFRV9DT0RFIChy c2UuZXhwcikgPT0gVkFSX0RFQ0wKKyAJCSAgJiYgR0ZDX0RFQ0xfUFRSX0FS UkFZX1AgKHJzZS5leHByKSkKKyAJCXNwYW4gPSBnZmNfY29udl9kZXNjcmlw dG9yX3NwYW5fZ2V0IChyc2UuZXhwcik7CisgCSAgICAgIGVsc2UKKyAJCXsK KyAJCSAgdG1wID0gVFJFRV9UWVBFIChyc2UuZXhwcik7CisgCQkgIHRtcCA9 IFRZUEVfU0laRV9VTklUIChnZmNfZ2V0X2VsZW1lbnRfdHlwZSAodG1wKSk7 CisgCQkgIHNwYW4gPSBmb2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRleF90 eXBlLCB0bXApOworIAkJfQorIAkgICAgICBnZmNfY29udl9kZXNjcmlwdG9y X3NwYW5fc2V0ICgmYmxvY2ssIGRlc2MsIHNwYW4pOworIAogIAkgICAgICAv KiBDb3B5IG9mZnNldCBidXQgYWRqdXN0IGl0IHN1Y2ggdGhhdCBpdCB3b3Vs ZCBjb3JyZXNwb25kCiAgCQkgdG8gYSBsYm91bmQgb2YgemVyby4gICovCiAg CSAgICAgIG9mZnMgPSBnZmNfY29udl9kZXNjcmlwdG9yX29mZnNldF9nZXQg KHJzZS5leHByKTsKSW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLmgKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vdHJhbnMuaAkocmV2 aXNpb24gMjQ5MDUwKQotLS0gZ2NjL2ZvcnRyYW4vdHJhbnMuaAkod29ya2lu ZyBjb3B5KQoqKioqKioqKioqKioqKiogc3RydWN0IEdUWSgoKSkgbGFuZ19k ZWNsIHsKKioqIDk4Miw5ODggKioqKgogICNkZWZpbmUgR0ZDX0RFQ0xfQ09N TU9OX09SX0VRVUlWKG5vZGUpIERFQ0xfTEFOR19GTEFHXzMobm9kZSkKICAj ZGVmaW5lIEdGQ19ERUNMX0NSQVlfUE9JTlRFRShub2RlKSBERUNMX0xBTkdf RkxBR180KG5vZGUpCiAgI2RlZmluZSBHRkNfREVDTF9SRVNVTFQobm9kZSkg REVDTF9MQU5HX0ZMQUdfNShub2RlKQohICNkZWZpbmUgR0ZDX0RFQ0xfU1VC UkVGX0FSUkFZX1Aobm9kZSkgREVDTF9MQU5HX0ZMQUdfNihub2RlKQogICNk ZWZpbmUgR0ZDX0RFQ0xfQVNTT0NJQVRFX1ZBUl9QKG5vZGUpIERFQ0xfTEFO R19GTEFHXzcobm9kZSkKICAjZGVmaW5lIEdGQ19ERUNMX0NMQVNTKG5vZGUp IERFQ0xfTEFOR19GTEFHXzgobm9kZSkKICAKLS0tIDk4Miw5ODggLS0tLQog ICNkZWZpbmUgR0ZDX0RFQ0xfQ09NTU9OX09SX0VRVUlWKG5vZGUpIERFQ0xf TEFOR19GTEFHXzMobm9kZSkKICAjZGVmaW5lIEdGQ19ERUNMX0NSQVlfUE9J TlRFRShub2RlKSBERUNMX0xBTkdfRkxBR180KG5vZGUpCiAgI2RlZmluZSBH RkNfREVDTF9SRVNVTFQobm9kZSkgREVDTF9MQU5HX0ZMQUdfNShub2RlKQoh ICNkZWZpbmUgR0ZDX0RFQ0xfUFRSX0FSUkFZX1Aobm9kZSkgREVDTF9MQU5H X0ZMQUdfNihub2RlKQogICNkZWZpbmUgR0ZDX0RFQ0xfQVNTT0NJQVRFX1ZB Ul9QKG5vZGUpIERFQ0xfTEFOR19GTEFHXzcobm9kZSkKICAjZGVmaW5lIEdG Q19ERUNMX0NMQVNTKG5vZGUpIERFQ0xfTEFOR19GTEFHXzgobm9kZSkKICAK SW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLWludHJpbnNpYy5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFuL3RyYW5zLWludHJpbnNp Yy5jCShyZXZpc2lvbiAyNDkwNTApCi0tLSBnY2MvZm9ydHJhbi90cmFucy1p bnRyaW5zaWMuYwkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogY29u dl9leHByX3JlZl90b19jYWZfcmVmIChzdG10YmxvY2tfdCAqYgoqKiogMTIy NSwxMjM0ICoqKioKICAJICAgICAgJiYgcmVmLT51LmMuY29tcG9uZW50LT5h dHRyLmRpbWVuc2lvbikKICAJICAgIHsKICAJICAgICAgdHJlZSBhcnJfZGVz Y190b2tlbl9vZmZzZXQ7CiEgCSAgICAgIC8qIEdldCB0aGUgdG9rZW4gZnJv bSB0aGUgZGVzY3JpcHRvci4gICovCiEgCSAgICAgIGFycl9kZXNjX3Rva2Vu X29mZnNldCA9IGdmY19hZHZhbmNlX2NoYWluICgKISAJCSAgICBUWVBFX0ZJ RUxEUyAoVFJFRV9UWVBFIChyZWYtPnUuYy5jb21wb25lbnQtPmJhY2tlbmRf ZGVjbCkpLAohIAkJICAgIDQgLyogQ0FGX1RPS0VOX0ZJRUxEICAqLyk7CiAg CSAgICAgIGFycl9kZXNjX3Rva2VuX29mZnNldAogIAkJICA9IGNvbXB1dGVf Y29tcG9uZW50X29mZnNldCAoYXJyX2Rlc2NfdG9rZW5fb2Zmc2V0LAogIAkJ CQkJICAgICAgVFJFRV9UWVBFICh0bXApKTsKLS0tIDEyMjUsMTIzMyAtLS0t CiAgCSAgICAgICYmIHJlZi0+dS5jLmNvbXBvbmVudC0+YXR0ci5kaW1lbnNp b24pCiAgCSAgICB7CiAgCSAgICAgIHRyZWUgYXJyX2Rlc2NfdG9rZW5fb2Zm c2V0OwohIAkgICAgICAvKiBHZXQgdGhlIHRva2VuIGZpZWxkIGZyb20gdGhl IGRlc2NyaXB0b3IuICAqLwohIAkgICAgICBhcnJfZGVzY190b2tlbl9vZmZz ZXQgPSBUUkVFX09QRVJBTkQgKAohIAkJICAgIGdmY19jb252X2Rlc2NyaXB0 b3JfdG9rZW4gKHJlZi0+dS5jLmNvbXBvbmVudC0+YmFja2VuZF9kZWNsKSwg MSk7CiAgCSAgICAgIGFycl9kZXNjX3Rva2VuX29mZnNldAogIAkJICA9IGNv bXB1dGVfY29tcG9uZW50X29mZnNldCAoYXJyX2Rlc2NfdG9rZW5fb2Zmc2V0 LAogIAkJCQkJICAgICAgVFJFRV9UWVBFICh0bXApKTsKKioqKioqKioqKioq KioqIGNvbnZfaXNvY2JpbmRpbmdfc3Vicm91dGluZSAoZ2ZjX2NvZGUgKmMK KioqIDgxMjksODEzNCAqKioqCi0tLSA4MTI4LDgxMzggLS0tLQogICAgZ2Zj X2FkZF9ibG9ja190b19ibG9jayAoJmJsb2NrLCAmZnB0cnNlLnByZSk7CiAg ICBkZXNjID0gZnB0cnNlLmV4cHI7CiAgCisgICAvKiBTZXQgdGhlIHNwYW4g ZmllbGQuICAqLworICAgdG1wID0gVFlQRV9TSVpFX1VOSVQgKGdmY19nZXRf ZWxlbWVudF90eXBlIChUUkVFX1RZUEUgKGRlc2MpKSk7CisgICB0bXAgPSBm b2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRleF90eXBlLCB0bXApOworICAg Z2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX3NldCAoJmJsb2NrLCBkZXNjLCB0 bXApOworIAogICAgLyogU2V0IGRhdGEgdmFsdWUsIGR0eXBlLCBhbmQgb2Zm c2V0LiAgKi8KICAgIHRtcCA9IEdGQ19UWVBFX0FSUkFZX0RBVEFQVFJfVFlQ RSAoVFJFRV9UWVBFIChkZXNjKSk7CiAgICBnZmNfY29udl9kZXNjcmlwdG9y X2RhdGFfc2V0ICgmYmxvY2ssIGRlc2MsIGZvbGRfY29udmVydCAodG1wLCBj cHRyc2UuZXhwcikpOwpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMtaW8uYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvZm9ydHJhbi90cmFucy1p by5jCShyZXZpc2lvbiAyNDkwNTApCi0tLSBnY2MvZm9ydHJhbi90cmFucy1p by5jCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKiBnZmNfdHJhbnNf dHJhbnNmZXIgKGdmY19jb2RlICogY29kZSkKKioqIDI1NjMsMjU2OCAqKioq Ci0tLSAyNTYzLDI1NzQgLS0tLQogIAkgIGdjY19hc3NlcnQgKHJlZiAmJiBy ZWYtPnR5cGUgPT0gUkVGX0FSUkFZKTsKICAJfQogIAorICAgICAgIGlmIChl eHByLT50cy50eXBlICE9IEJUX0NMQVNTCisgCSAmJiBleHByLT5leHByX3R5 cGUgPT0gRVhQUl9WQVJJQUJMRQorIAkgJiYgZ2ZjX2V4cHJfYXR0ciAoZXhw cikucG9pbnRlcikKKyAJZ290byBzY2FsYXJpemU7CisgCisgCiAgICAgICAg aWYgKCEoZ2ZjX2J0X3N0cnVjdCAoZXhwci0+dHMudHlwZSkKICAJICAgICAg fHwgZXhwci0+dHMudHlwZSA9PSBCVF9DTEFTUykKICAJICAgICYmIHJlZiAm JiByZWYtPm5leHQgPT0gTlVMTAoqKioqKioqKioqKioqKiogZ2ZjX3RyYW5z X3RyYW5zZmVyIChnZmNfY29kZSAqIGNvZGUpCioqKiAyNTk3LDI2MDIgKioq KgotLS0gMjYwMywyNjA5IC0tLS0KICAJICBnb3RvIGZpbmlzaF9ibG9ja19s YWJlbDsKICAJfQogIAorIHNjYWxhcml6ZToKICAgICAgICAvKiBJbml0aWFs aXplIHRoZSBzY2FsYXJpemVyLiAgKi8KICAgICAgICBzcyA9IGdmY193YWxr X2V4cHIgKGV4cHIpOwogICAgICAgIGdmY19pbml0X2xvb3BpbmZvICgmbG9v cCk7CioqKioqKioqKioqKioqKiBnZmNfdHJhbnNfdHJhbnNmZXIgKGdmY19j b2RlICogY29kZSkKKioqIDI2MTIsMjYxOCAqKioqCi0tLSAyNjE5LDI2Mjcg LS0tLQogIAogICAgICAgIGdmY19jb3B5X2xvb3BpbmZvX3RvX3NlICgmc2Us ICZsb29wKTsKICAgICAgICBzZS5zcyA9IHNzOworIAogICAgICAgIGdmY19j b252X2V4cHJfcmVmZXJlbmNlICgmc2UsIGV4cHIpOworIAogICAgICAgIGlm IChleHByLT50cy50eXBlID09IEJUX0NMQVNTKQogIAl2cHRyID0gZ2ZjX2dl dF92cHRyX2Zyb21fZXhwciAoc3MtPmluZm8tPmRhdGEuYXJyYXkuZGVzY3Jp cHRvcik7CiAgICAgICAgZWxzZQpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMt c3RtdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFu L3RyYW5zLXN0bXQuYwkocmV2aXNpb24gMjQ5MDUwKQotLS0gZ2NjL2ZvcnRy YW4vdHJhbnMtc3RtdC5jCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioq KiB0cmFuc19hc3NvY2lhdGVfdmFyIChnZmNfc3ltYm9sICpzeW0sIGdmCioq KiAxNjAyLDE2MDggKioqKgogIAkgICAgICA6IGUtPnN5bXRyZWUtPm4uc3lt LT5iYWNrZW5kX2RlY2w7CiAgCSAgdG1wID0gZ2ZjX2dldF9lbGVtZW50X3R5 cGUgKFRSRUVfVFlQRSAodG1wKSk7CiAgCSAgdG1wID0gZm9sZF9jb252ZXJ0 IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgc2l6ZV9pbl9ieXRlcyAodG1wKSk7 CiEgCSAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS5wcmUsIEdGQ19ERUNMX1NQQU4o ZGVzYyksIHRtcCk7CiAgCX0KICAKICAgICAgICAvKiBEb25lLCByZWdpc3Rl ciBzdHVmZiBhcyBpbml0IC8gY2xlYW51cCBjb2RlLiAgKi8KLS0tIDE2MDIs MTYwOCAtLS0tCiAgCSAgICAgIDogZS0+c3ltdHJlZS0+bi5zeW0tPmJhY2tl bmRfZGVjbDsKICAJICB0bXAgPSBnZmNfZ2V0X2VsZW1lbnRfdHlwZSAoVFJF RV9UWVBFICh0bXApKTsKICAJICB0bXAgPSBmb2xkX2NvbnZlcnQgKGdmY19h cnJheV9pbmRleF90eXBlLCBzaXplX2luX2J5dGVzICh0bXApKTsKISAJICBn ZmNfY29udl9kZXNjcmlwdG9yX3NwYW5fc2V0ICgmc2UucHJlLCBkZXNjLCB0 bXApOwogIAl9CiAgCiAgICAgICAgLyogRG9uZSwgcmVnaXN0ZXIgc3R1ZmYg YXMgaW5pdCAvIGNsZWFudXAgY29kZS4gICovCkluZGV4OiBnY2MvZm9ydHJh bi90cmFucy10eXBlcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdj Yy9mb3J0cmFuL3RyYW5zLXR5cGVzLmMJKHJldmlzaW9uIDI0OTA1MCkKLS0t IGdjYy9mb3J0cmFuL3RyYW5zLXR5cGVzLmMJKHdvcmtpbmcgY29weSkKKioq KioqKioqKioqKioqIGdmY19nZXRfYXJyYXlfZGVzY3JpcHRvcl9iYXNlIChp bnQgZGltZW4KKioqIDE3ODIsMTc4NyAqKioqCi0tLSAxNzgyLDE3OTMgLS0t LQogIAkJCQkgICAgZ2ZjX2FycmF5X2luZGV4X3R5cGUsICZjaGFpbik7CiAg ICBUUkVFX05PX1dBUk5JTkcgKGRlY2wpID0gMTsKICAKKyAgIC8qIEFkZCB0 aGUgc3BhbiBjb21wb25lbnQuICAqLworICAgZGVjbCA9IGdmY19hZGRfZmll bGRfdG9fc3RydWN0XzEgKGZhdF90eXBlLAorIAkJCQkgICAgZ2V0X2lkZW50 aWZpZXIgKCJzcGFuIiksCisgCQkJCSAgICBnZmNfYXJyYXlfaW5kZXhfdHlw ZSwgJmNoYWluKTsKKyAgIFRSRUVfTk9fV0FSTklORyAoZGVjbCkgPSAxOwor IAogICAgLyogQnVpbGQgdGhlIGFycmF5IHR5cGUgZm9yIHRoZSBzdHJpZGUg YW5kIGJvdW5kIGNvbXBvbmVudHMuICAqLwogICAgaWYgKGRpbWVuICsgY29k aW1lbiA+IDApCiAgICAgIHsKKioqKioqKioqKioqKioqIGdmY19nZXRfZGVy aXZlZF90eXBlIChnZmNfc3ltYm9sICogZGVyaXYKKioqIDI3MDgsMjcxMyAq KioqCi0tLSAyNzE0LDI3MjQgLS0tLQogICAgICAgIGlmICghYy0+YmFja2Vu ZF9kZWNsKQogIAljLT5iYWNrZW5kX2RlY2wgPSBmaWVsZDsKICAKKyAgICAg ICBpZiAoYy0+YXR0ci5wb2ludGVyICYmIGMtPmF0dHIuZGltZW5zaW9uCisg CSAgJiYgIShjLT50cy50eXBlID09IEJUX0RFUklWRUQKKyAJICAgICAgICYm IHN0cmNtcCAoYy0+bmFtZSwgIl9kYXRhIikgPT0gMCkpCisgCUdGQ19ERUNM X1BUUl9BUlJBWV9QIChjLT5iYWNrZW5kX2RlY2wpID0gMTsKKyAKICAgICAg ICAvKiBEbyBub3QgYWRkIGEgY2FmX3Rva2VuIGZpZWxkIGZvciBjbGFzc2Vz JyBkYXRhIGNvbXBvbmVudHMuICAqLwogICAgICAgIGlmIChjb2RpbWVuICYm ICFjLT5hdHRyLmRpbWVuc2lvbiAmJiAhYy0+YXR0ci5jb2RpbWVuc2lvbgog IAkgICYmIChjLT5hdHRyLmFsbG9jYXRhYmxlIHx8IGMtPmF0dHIucG9pbnRl cikKKioqKioqKioqKioqKioqIGdmY19nZXRfYXJyYXlfZGVzY3JfaW5mbyAo Y29uc3RfdHJlZSB0eXAKKioqIDMyMDMsMzIxOCAqKioqCiAgICBpZiAoaW5k aXJlY3QpCiAgICAgIGJhc2VfZGVjbCA9IGJ1aWxkMSAoSU5ESVJFQ1RfUkVG LCBwdHlwZSwgYmFzZV9kZWNsKTsKICAKISAgIGlmIChHRkNfVFlQRV9BUlJB WV9TUEFOICh0eXBlKSkKISAgICAgZWxlbV9zaXplID0gR0ZDX1RZUEVfQVJS QVlfU1BBTiAodHlwZSk7CiEgICBlbHNlCiEgICAgIGVsZW1fc2l6ZSA9IGZv bGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIFRZUEVfU0laRV9V TklUIChldHlwZSkpOwogICAgZmllbGQgPSBUWVBFX0ZJRUxEUyAoVFlQRV9N QUlOX1ZBUklBTlQgKHR5cGUpKTsKICAgIGRhdGFfb2ZmID0gYnl0ZV9wb3Np dGlvbiAoZmllbGQpOwogICAgZmllbGQgPSBERUNMX0NIQUlOIChmaWVsZCk7 CiAgICBmaWVsZCA9IERFQ0xfQ0hBSU4gKGZpZWxkKTsKICAgIGR0eXBlX29m ZiA9IGJ5dGVfcG9zaXRpb24gKGZpZWxkKTsKICAgIGZpZWxkID0gREVDTF9D SEFJTiAoZmllbGQpOwogICAgZGltX29mZiA9IGJ5dGVfcG9zaXRpb24gKGZp ZWxkKTsKICAgIGRpbV9zaXplID0gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQ RSAoVFJFRV9UWVBFIChmaWVsZCkpKTsKICAgIGZpZWxkID0gVFlQRV9GSUVM RFMgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChmaWVsZCkpKTsKLS0tIDMyMTQs MzIyNyAtLS0tCiAgICBpZiAoaW5kaXJlY3QpCiAgICAgIGJhc2VfZGVjbCA9 IGJ1aWxkMSAoSU5ESVJFQ1RfUkVGLCBwdHlwZSwgYmFzZV9kZWNsKTsKICAK ISAgIGVsZW1fc2l6ZSA9IGZvbGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4 X3R5cGUsIFRZUEVfU0laRV9VTklUIChldHlwZSkpOwogICAgZmllbGQgPSBU WVBFX0ZJRUxEUyAoVFlQRV9NQUlOX1ZBUklBTlQgKHR5cGUpKTsKICAgIGRh dGFfb2ZmID0gYnl0ZV9wb3NpdGlvbiAoZmllbGQpOwogICAgZmllbGQgPSBE RUNMX0NIQUlOIChmaWVsZCk7CiAgICBmaWVsZCA9IERFQ0xfQ0hBSU4gKGZp ZWxkKTsKICAgIGR0eXBlX29mZiA9IGJ5dGVfcG9zaXRpb24gKGZpZWxkKTsK ICAgIGZpZWxkID0gREVDTF9DSEFJTiAoZmllbGQpOworICAgZmllbGQgPSBE RUNMX0NIQUlOIChmaWVsZCk7CiAgICBkaW1fb2ZmID0gYnl0ZV9wb3NpdGlv biAoZmllbGQpOwogICAgZGltX3NpemUgPSBUWVBFX1NJWkVfVU5JVCAoVFJF RV9UWVBFIChUUkVFX1RZUEUgKGZpZWxkKSkpOwogICAgZmllbGQgPSBUWVBF X0ZJRUxEUyAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKGZpZWxkKSkpOwpJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3N1bWVkX3R5cGVfMi5m OTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9hc3N1bWVkX3R5cGVfMi5mOTAJKHJldmlzaW9uIDI0OTA1 MCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvYXNzdW1lZF90eXBl XzIuZjkwCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKiBlbmQKKioq IDE1MSwxNTkgKioqKgogICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJzdWJfc2NhbGFyIC4mc2NhbGFyX3QxLCIgMSAib3JpZ2luYWwi IH0gfQogIAogICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJzdWJfc2NhbGFyIC4mXFwoLlxcKHJlYWwua2luZD00Li4wOi4gLiByZXN0 cmljdFxcKSBhcnJheV9yZWFsX2FsbG9jLmRhdGEiIDEgIm9yaWdpbmFsIiB9 IH0KISAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3Vi X3NjYWxhciAuJlxcKC5cXChjaGFyYWN0ZXIua2luZD0xLi4wOi4uMToxLiAu XFwpIGFycmF5X2NoYXJfcHRyLmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0KICAh IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxh ciAuJlxcKC5cXChzdHJ1Y3QgdDIuMDouIC4gcmVzdHJpY3RcXCkgYXJyYXlf dDJfYWxsb2MuZGF0YSIgMSAib3JpZ2luYWwiIH0gfQohICEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFyIC4mXFwoLlxc KHN0cnVjdCB0My4wOi4gLlxcKSBhcnJheV90M19wdHIuZGF0YSIgMSAib3Jp Z2luYWwiIH0gfQogICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJzdWJfc2NhbGFyIC5cXChzdHJ1Y3QgdDEgLlxcKSBhcnJheV9jbGFz c190MV9hbGxvYy5fZGF0YS5kYXRhIiAxICJvcmlnaW5hbCIgfSB9CiAgISB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInN1Yl9zY2FsYXIg LlxcKHN0cnVjdCB0MSAuXFwpIFxcKGFycmF5X2NsYXNzX3QxX3B0ci5fZGF0 YS5kYXQiIDEgIm9yaWdpbmFsIiB9IH0KICAKLS0tIDE1MSwxNTkgLS0tLQog ICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2Nh bGFyIC4mc2NhbGFyX3QxLCIgMSAib3JpZ2luYWwiIH0gfQogIAogICEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFyIC4m XFwoLlxcKHJlYWwua2luZD00Li4wOi4gLiByZXN0cmljdFxcKSBhcnJheV9y ZWFsX2FsbG9jLmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0KISAhIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuXFwoY2hh cmFjdGVyLmtpbmQ9MS4uMToxLiAuXFwpIC5hcnJheV9jaGFyX3B0ci5kYXRh IiAxICJvcmlnaW5hbCIgfSB9CiAgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgInN1Yl9zY2FsYXIgLiZcXCguXFwoc3RydWN0IHQyLjA6 LiAuIHJlc3RyaWN0XFwpIGFycmF5X3QyX2FsbG9jLmRhdGEiIDEgIm9yaWdp bmFsIiB9IH0KISAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAic3ViX3NjYWxhciAuXFwoc3RydWN0IHQzIC5cXCkgLmFycmF5X3QzX3B0 ci5kYXRhIiAxICJvcmlnaW5hbCIgfSB9CiAgISB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgInN1Yl9zY2FsYXIgLlxcKHN0cnVjdCB0MSAu XFwpIGFycmF5X2NsYXNzX3QxX2FsbG9jLl9kYXRhLmRhdGEiIDEgIm9yaWdp bmFsIiB9IH0KICAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAic3ViX3NjYWxhciAuXFwoc3RydWN0IHQxIC5cXCkgXFwoYXJyYXlfY2xh c3NfdDFfcHRyLl9kYXRhLmRhdCIgMSAib3JpZ2luYWwiIH0gfQogIApJbmRl eDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9rZXJuZWxzLWFs aWFzLTQuZjk1Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2Mva2VybmVscy1hbGlhcy00LmY5NQko cmV2aXNpb24gMjQ5MDUwKQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9nb2FjYy9rZXJuZWxzLWFsaWFzLTQuZjk1CSh3b3JraW5nIGNvcHkpCioq KioqKioqKioqKioqKiBwcm9ncmFtIG1haW4KKioqIDE2LDIwICoqKioKICBl bmQgcHJvZ3JhbSBtYWluCiAgCiAgISBPbmx5IHRoZSBvbXBfZGF0YV9pIHJl bGF0ZWQgbG9hZHMgc2hvdWxkIGJlIGFubm90YXRlZCB3aXRoIGNsaXF1ZXMu CiEgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImNsaXF1 ZSAxIGJhc2UgMSIgMyAiZWFsaWFzIiB9IH0KISAhIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKWNsaXF1ZSAxIGJhc2UgMCIgNCAi ZWFsaWFzIiB9IH0KLS0tIDE2LDIwIC0tLS0KICBlbmQgcHJvZ3JhbSBtYWlu CiAgCiAgISBPbmx5IHRoZSBvbXBfZGF0YV9pIHJlbGF0ZWQgbG9hZHMgc2hv dWxkIGJlIGFubm90YXRlZCB3aXRoIGNsaXF1ZXMuCiEgISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgImNsaXF1ZSAxIGJhc2UgMSIgNCAi ZWFsaWFzIiB9IH0KISAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAiKD9uKWNsaXF1ZSAxIGJhc2UgMCIgNSAiZWFsaWFzIiB9IH0KSW5k ZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvbm9fYXJnX2NoZWNrXzIu ZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvbm9fYXJnX2NoZWNrXzIuZjkwCShyZXZpc2lvbiAyNDkw NTApCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL25vX2FyZ19jaGVj a18yLmY5MAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogZW5kCioq KiAxMzMsMTQxICoqKioKICAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAic3ViX3NjYWxhciAuJnNjYWxhcl90MSwiIDEgIm9yaWdpbmFs IiB9IH0KICAKICAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAic3ViX3NjYWxhciAuJlxcKC5cXChyZWFsLmtpbmQ9NC4uMDouIC4gcmVz dHJpY3RcXCkgYXJyYXlfcmVhbF9hbGxvYy5kYXRhIiAxICJvcmlnaW5hbCIg fSB9CiEgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInN1 Yl9zY2FsYXIgLiZcXCguXFwoY2hhcmFjdGVyLmtpbmQ9MS4uMDouLjE6MS4g LlxcKSBhcnJheV9jaGFyX3B0ci5kYXRhIiAxICJvcmlnaW5hbCIgfSB9CiAg ISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInN1Yl9zY2Fs YXIgLiZcXCguXFwoc3RydWN0IHQyLjA6LiAuIHJlc3RyaWN0XFwpIGFycmF5 X3QyX2FsbG9jLmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0KISAhIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuJlxcKC5c XChzdHJ1Y3QgdDMuMDouIC5cXCkgYXJyYXlfdDNfcHRyLmRhdGEiIDEgIm9y aWdpbmFsIiB9IH0KICAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAic3ViX3NjYWxhciAuXFwoc3RydWN0IHQxIC5cXCkgYXJyYXlfY2xh c3NfdDFfYWxsb2MuX2RhdGEuZGF0YSIgMSAib3JpZ2luYWwiIH0gfQogICEg eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFy IC5cXChzdHJ1Y3QgdDEgLlxcKSBcXChhcnJheV9jbGFzc190MV9wdHIuX2Rh dGEuZGF0IiAxICJvcmlnaW5hbCIgfSB9CiAgCi0tLSAxMzMsMTQxIC0tLS0K ICAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3Nj YWxhciAuJnNjYWxhcl90MSwiIDEgIm9yaWdpbmFsIiB9IH0KICAKICAhIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAu JlxcKC5cXChyZWFsLmtpbmQ9NC4uMDouIC4gcmVzdHJpY3RcXCkgYXJyYXlf cmVhbF9hbGxvYy5kYXRhIiAxICJvcmlnaW5hbCIgfSB9CiEgISB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInN1Yl9zY2FsYXIgLlxcKGNo YXJhY3Rlci5raW5kPTEuLjE6MS4gLlxcKSAuYXJyYXlfY2hhcl9wdHIuZGF0 YSIgMSAib3JpZ2luYWwiIH0gfQogICEgeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFyIC4mXFwoLlxcKHN0cnVjdCB0Mi4w Oi4gLiByZXN0cmljdFxcKSBhcnJheV90Ml9hbGxvYy5kYXRhIiAxICJvcmln aW5hbCIgfSB9CiEgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgInN1Yl9zY2FsYXIgLlxcKHN0cnVjdCB0MyAuXFwpIC5hcnJheV90M19w dHIuZGF0YSIgMSAib3JpZ2luYWwiIH0gfQogICEgeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFyIC5cXChzdHJ1Y3QgdDEg LlxcKSBhcnJheV9jbGFzc190MV9hbGxvYy5fZGF0YS5kYXRhIiAxICJvcmln aW5hbCIgfSB9CiAgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgInN1Yl9zY2FsYXIgLlxcKHN0cnVjdCB0MSAuXFwpIFxcKGFycmF5X2Ns YXNzX3QxX3B0ci5fZGF0YS5kYXQiIDEgIm9yaWdpbmFsIiB9IH0KICAKSW5k ZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV8x LmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlfMS5mOTAJKG5vbmV4aXN0ZW50 KQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2FycmF5 XzEuZjkwCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAq KioqCi0tLSAxLDYwIC0tLS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBD aGVjayB0aGUgZml4IGZvciBQUjM0NjQwIGNvbW1lbnRzIDEgYW5kIDMuCisg IQorICEgVGhpcyBpbnZvbHZlcyBwYXNzaW5nIGFuZCByZXR1cm5pbmcgcG9p bnRlciBhcnJheSBjb21wb25lbnRzIHRoYXQKKyAhIHBvaW50IHRvIGNvbXBv bmVudHMgb2YgYXJyYXlzIG9mIGRlcml2ZWQgdHlwZXMuCisgIQorIE1PRFVM RSB0ZXN0CisgICBJTVBMSUNJVCBOT05FCisgICBUWVBFIDo6IG15X3R5cGUK KyAgICAgSU5URUdFUiA6OiB2YWx1ZQorICAgICBpbnRlZ2VyIDo6IHRhZwor ICAgRU5EIFRZUEUKKyBDT05UQUlOUworICAgU1VCUk9VVElORSBnZXRfdmFs dWVzKHZhbHVlcywgc3dpdGNoKQorICAgICBJTlRFR0VSLCBQT0lOVEVSIDo6 IHZhbHVlcyg6KQorICAgICBpbnRlZ2VyIDo6IHN3aXRjaAorICAgICBUWVBF KG15X3R5cGUpLCBQT0lOVEVSIDo6IGQoOikKKyAgICAgYWxsb2NhdGUgKGQs IHNvdXJjZSA9IFtteV90eXBlKDEsMTAxKSwgbXlfdHlwZSgyLDEwMildKQor ICAgICBpZiAoc3dpdGNoIC5lcS4gMSkgdGhlbgorICAgICAgIHZhbHVlcyA9 PiBkKDopJXZhbHVlCisgICAgICAgaWYgKGFueSAodmFsdWVzIC5uZS4gWzEs Ml0pKSBwcmludCAqLCB2YWx1ZXMoMikKKyAgICAgZWxzZQorICAgICAgIHZh bHVlcyA9PiBkKDopJXRhZworICAgICAgIGlmIChhbnkgKHZhbHVlcyAubmUu IFsxMDEsMTAyXSkpIGNhbGwgYWJvcnQKKyAgICAgZW5kIGlmCisgICBFTkQg U1VCUk9VVElORQorIAorICAgZnVuY3Rpb24gcmV0dXJuX3ZhbHVlcyhzd2l0 Y2gpIHJlc3VsdCAodmFsdWVzKQorICAgICBJTlRFR0VSLCBQT0lOVEVSIDo6 IHZhbHVlcyg6KQorICAgICBpbnRlZ2VyIDo6IHN3aXRjaAorICAgICBUWVBF KG15X3R5cGUpLCBQT0lOVEVSIDo6IGQoOikKKyAgICAgYWxsb2NhdGUgKGQs IHNvdXJjZSA9IFtteV90eXBlKDEsMTAxKSwgbXlfdHlwZSgyLDEwMildKQor ICAgICBpZiAoc3dpdGNoIC5lcS4gMSkgdGhlbgorICAgICAgIHZhbHVlcyA9 PiBkKDopJXZhbHVlCisgICAgICAgaWYgKGFueSAodmFsdWVzIC5uZS4gWzEs Ml0pKSBjYWxsIGFib3J0CisgICAgIGVsc2UKKyAgICAgICB2YWx1ZXMgPT4g ZCg6KSV0YWcKKyAgICAgICBpZiAoYW55ICh2YWx1ZXMoWzIsMV0pIC5uZS4g WzEwMiwxMDFdKSkgY2FsbCBhYm9ydAorICAgICBlbmQgaWYKKyAgIEVORCBm dW5jdGlvbgorIEVORCBNT0RVTEUKKyAKKyAgIHVzZSB0ZXN0CisgICBpbnRl Z2VyLCBwb2ludGVyIDo6IHgoOikKKyAgIHR5cGUgOjogeW91cl90eXBlCisg ICAgIGludGVnZXIsIHBvaW50ZXIgOjogeCg6KQorICAgZW5kIHR5cGUKKyAg IHR5cGUoeW91cl90eXBlKSA6OiB5CisgCisgICBjYWxsIGdldF92YWx1ZXMg KHgsIDEpCisgICBpZiAoYW55ICh4IC5uZS4gWzEsMl0pKSBjYWxsIGFib3J0 CisgICBjYWxsIGdldF92YWx1ZXMgKHkleCwgMikKKyAgIGlmIChhbnkgKHkl eCAubmUuIFsxMDEsMTAyXSkpIGNhbGwgYWJvcnQKKyAKKyAgIHggPT4gcmV0 dXJuX3ZhbHVlcyAoMikKKyAgIGlmIChhbnkgKHggLm5lLiBbMTAxLDEwMl0p KSBjYWxsIGFib3J0CisgICB5JXggPT4gcmV0dXJuX3ZhbHVlcyAoMSkKKyAg IGlmIChhbnkgKHkleCAubmUuIFsxLDJdKSkgY2FsbCBhYm9ydAorIGVuZApJ bmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2FycmF5 XzIuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV8yLmY5MAkobm9uZXhpc3Rl bnQpCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJy YXlfMi5mOTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioqKiAw ICoqKioKLS0tIDEsMTQzIC0tLS0KKyAhIHsgZGctZG8gY29tcGlsZSB9Cisg IQorICEgVGVzdCB0aGUgZml4IGZvciBQUjQwNzM3IGFzIHBhcnQgb2YgdGhl IG92ZXJhbGwgZml4IGZvciBQUjM0NjQwLgorICEKKyAhIENvbnRyaWJ1dGVk IGJ5IERhdmlkIEhvdWdoICA8ZGg0NThAb2FrYXBwbGUubmV0PgorICEKKyBt b2R1bGUgdGVzdG1vZAorIAorIGludGVnZXIsIHBhcmFtZXRlciA6OiBzdGFu ZGFyZF9pbnRlZ2VyID0gMQorIGludGVnZXIsIHBhcmFtZXRlciA6OiBpbnQg PSBLSU5EKCBzdGFuZGFyZF9pbnRlZ2VyKQorIAorIGludGVnZXIsIHBhcmFt ZXRlciA6OiBpOCAgPSBzZWxlY3RlZF9pbnRfa2luZCgxMikKKyBpbnRlZ2Vy LCBwYXJhbWV0ZXIgOjogaTQgID0gc2VsZWN0ZWRfaW50X2tpbmQoOCkKKyBp bnRlZ2VyLCBwYXJhbWV0ZXIgOjogaTIgID0gc2VsZWN0ZWRfaW50X2tpbmQo NCkKKyAKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogc3RhbmRhcmRfcmVhbCA9 IDEuCisgaW50ZWdlciwgcGFyYW1ldGVyIDo6IHN0ZF9yZWFsID0gS0lORCgg c3RhbmRhcmRfcmVhbCkKKyAKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogcjgg ID0gc2VsZWN0ZWRfcmVhbF9raW5kKDEyKQorIGludGVnZXIsIHBhcmFtZXRl ciA6OiByNCAgPSBzZWxlY3RlZF9yZWFsX2tpbmQoNikKKyBpbnRlZ2VyLCBw YXJhbWV0ZXIgOjogZG91YmxlICA9IHNlbGVjdGVkX3JlYWxfa2luZCgyMCkK KyAKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogbmFtZV9zdHJpbmdfbGVuZ3Ro ID0gNDAKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogZmlsZV9uYW1lX2xlbmd0 aCA9IDYwCisgaW50ZWdlciwgcGFyYW1ldGVyIDo6IHRleHRfc3RyaW5nX2xl bmd0aCA9IDgwCisgaW50ZWdlciwgcGFyYW1ldGVyIDo6IG1heF9rd2RfbGd0 aCA9IGZpbGVfbmFtZV9sZW5ndGgKKyAKKyBpbnRlZ2VyKGludCkgOjogYnl0 ZXNfcGVyX2ludCAgPSA0CisgaW50ZWdlcihpbnQpIDo6IGJ5dGVzX3Blcl9y ZWFsID0gOAorIGludGVnZXIoaW50KSA6OiB3b3JrY29tbSwgc3BpbmNvbW0K KyAKKyAgICBpbnRlZ2VyKGludCksIHBhcmFtZXRlciA6OiBuYl9kaXJlY3Rp b25zID0gMywgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk aXJlY3Rpb25feCA9IDEsICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaXJlY3Rpb25feSA9IDIsICAgICYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaXJlY3Rpb25feiA9IDMsICAgICYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9naG9zdF9jZWxscyA9IDUg ICAgICEgbWlnaHQgYmUgZGlmZmVyZW50IGZvciB0aGUgbGFncmFuZ2Ugc3Rl cD8KKyAKKyAgICBpbnRlZ2VyKGludCksIHBhcmFtZXRlciA6OiBlbmRzID0g NCwgICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG93ZXJfZ2hvc3QgPSAxLCAgICAgJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvd2VyX2ludGVyaW9yID0gMiwgICYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9pbnRlcmlvciA9IDMsICAm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfZ2hvc3Qg PSA0CisgCisgICAgISBOZWlnaGJvcnMKKyAgICBpbnRlZ2VyKGludCksIHBh cmFtZXRlciA6OiBzaWRlID0gMiwgICAgICAgJgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxvd2VyX2VuZCA9IDEsICAmCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdXBwZXJfZW5kID0gMgorIAorIAorICAg IGludGVnZXIoaW50KSwgcGFyYW1ldGVyIDo6IG5iX3ZhcmlhYmxlcyA9IDUs ICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb192YXIg PSAxLCAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZXRzX3ZhciA9IDIsICAgICAgICAgJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVfdmFyID0gMywgICAgICAgICAgICYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1cDFfdmFyID0gNCwgICAgICAgICAm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAyX3ZhciA9IDUs ICAgICAgICAgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVp c192YXIgPSA2LCAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlY3NfdmFyID0gNywgICAgICAgICAmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcF92YXIgPSA4LCAgICAgICAgICAgJgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfdmFyID0gOSwgICAgICAg ICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl92YXJf c29ydGllID0gOQorIAorICAgIHR5cGUgOjogVkFSSUFCTEVTX0xJR05FCisg ICAgICAgc2VxdWVuY2UKKyAgICAgICByZWFsLCBwb2ludGVyLCBkaW1lbnNp b24oIDosIDopIDo6IGwKKyAgICBlbmQgdHlwZSBWQVJJQUJMRVNfTElHTkUK KyAKKyAgICB0eXBlIFZBUklBQkxFU19NQUlMTEUKKyAgICAgICBzZXF1ZW5j ZQorICAgICAgIHJlYWwocjgpLCBkaW1lbnNpb24oIG5iX3ZhcmlhYmxlcykg OjogY2VsbF92YXIKKyAgICBlbmQgdHlwZSBWQVJJQUJMRVNfTUFJTExFCisg CisgICAgaW50ZWdlcihpbnQpLCBkaW1lbnNpb24oIG5iX2RpcmVjdGlvbnMp IDo6ICYKKyAgICAgICAgICBmaXJzdF9yZWFsX2NlbGwsICAgICYgICEgd2l0 aG91dCBnaG9zdCBjZWxscworICAgICAgICAgIGxhc3RfcmVhbF9jZWxsLCAg ICAgJiAgIQorICAgICAgICAgIG5iX3JlYWxfY2VsbHMsICAgICAgJiAgIQor ICAgICAgICAgIGZpcnN0X3dvcmtfY2VsbCwgICAgJiAgISBpbmNsdWRpbmcg Z2hvc3QgY2VsbHMKKyAgICAgICAgICBsYXN0X3dvcmtfY2VsbCwgICAgICYg ICEKKyAgICAgICAgICBuYl93b3JrX2NlbGxzLCAgICAgICYgICEKKyAgICAg ICAgICBnbG9iYWxfbmJfY2VsbHMgICAgICAgICEgbnVtYmVyIG9mIHJlYWwg Y2VsbHMsIGZvciB0aGUgZW50aXJlIGdyaWQKKyAKKyAgICBpbnRlZ2VyKGlu dCkgOjogZGltX3Byb2JsZW1lICAhIGRpbWVuc2lvbiBkdSBwcm9ibGVtZSAo MSwgMiBvdSAzKQorIAorICAgIGludGVnZXIoaW50KSA6OiBsYXJnZXN0X2xv Y2FsX3NpemUgICAhIHRoZSBsYXJnZXN0IG9mIHRoZSAzIGRpbWVuc2lvbnMg b2YgdGhlIGxvY2FsIGdyaWQKKyAKKyAgICAhIEh5ZHJvIHZhcmlhYmxlcyBv ZiB0aGUgYWN0dWFsIGRvbWFpbgorICAgICEgVGhlcmUgYXJlIDMgY29waWVz IG9mIHRoZXNlLCBmb3IgdXNlIGFjY29yZGluZyB0byBjdXJyZW50IHdvcmsg ZGlyZWN0aW9uCisgICAgdHlwZSAoVkFSSUFCTEVTX01BSUxMRSksIGFsbG9j YXRhYmxlLCB0YXJnZXQsIGRpbWVuc2lvbiggOiwgOiwgOikgOjogICYKKyAg ICAgICAgICAgICBIeWRyb192YXJzX1hZWiwgICYKKyAgICAgICAgICAgICBI eWRyb192YXJzX1laWCwgICYKKyAgICAgICAgICAgICBIeWRyb192YXJzX1pY WQorIAorICAgICEgUG9pbnRlcnMgdG8gY3VycmVudCBhbmQgbmV4dCBIeWRy byB2YXIgYXJyYXlzCisgICAgdHlwZSAoVkFSSUFCTEVTX01BSUxMRSksIHBv aW50ZXIsIGRpbWVuc2lvbiggOiwgOiwgOikgOjogSHlkcm9fdmFycywgICAg ICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgSHlkcm9fdmFyc19uZXh0CisgCisgICAg ISBXaGljaCBvZiB0aGVzZSAzIGNvcGllcyBvZiB0aGUgM0QgYXJyYXlzIGhh cyBiZWVuIHVwZGF0ZWQgbGFzdAorICAgIGludGVnZXIoaW50KSA6OiBsYXN0 X3VwZGF0ZWRfM0RfYXJyYXkgPSAwCisgCisgICAgcmVhbChyOCksIHBvaW50 ZXIsIGRpbWVuc2lvbiggOikgOjogICAgICAgICYKKyAgICAgICAgICAhIFZh cmlhYmxlcyAicGVybWFuZW50ZXMiIChlbnRyYW50IGRhbnMgbGEgcHJvamVj dGlvbikKKyAgICAgICAgICBSbywgICAgICAmICEgZGVuc2l0ZQorICAgICAg ICAgIEV0cywgICAgICYgISBlbmVyZ2llIHRvdGFsZSBzcGVjaWZpcXVlCisg ICAgICAgICAgVW0sICAgICAgJiAhIHZpdGVzc2UgYXV4IG1haWxsZXMsIGRh bnMgbGEgZGlyZWN0aW9uIGRlIHRyYXZhaWwKKyAgICAgICAgICBYbiwgICAg ICAmICEgYWJzY2lzc2UgZW4gZmluIGRlIHBhcyBkZSB0ZW1wcworICAgICAg ICAgICEgVmFyaWFibGVzIGVuIGxlY3R1cmUgc2V1bGVtZW50CisgICAgICAg ICAgVW1fcDEsICAgJiAhIHZpdGVzc2UgYXV4IG1haWxsZXMsIGRhbnMgbGVz IGRpcmVjdGlvbnMKKyAgICAgICAgICBVbV9wMiwgICAmICEgICAgICAgICAg ICAgICAgICAgICAgb3J0aG9nb25hbGVzCisgICAgICAgICAgWGEsICAgICAg JiAhIGFic2Npc3NlcyBkZXMgbm9ldWRzIGVuIGRlYnV0IGRlIHBhcyBkZSB0 ZW1wcworICAgICAgICAgIER4YSwgICAgICYgISBsb25ndWV1ciBkZXMgbWFp bGxlcyBlbiBkZWJ1dCBkZSBwYXMgZGUgdGVtcHMKKyAgICAgICAgICBVX2R4 YSAgICAgICEgaW52ZXJzZXMgZGVzIGxvbmd1ZXVycyBkZXMgbWFpbGxlcwor IAorIGVuZCBtb2R1bGUgdGVzdG1vZAorIAorIAorIHN1YnJvdXRpbmUgVEZf QURfU1BMSVRUSU5HX0RSSVZFUl9QTEFORQorIAorIHVzZSB0ZXN0bW9kCisg CisgaW1wbGljaXQgbm9uZQorIHNhdmUKKyAKKyAgICByZWFsKHI4KSwgYWxs b2NhdGFibGUsIGRpbWVuc2lvbiggOikgOjogICYKKyAgICAgICAgICAhIFZh cmlhYmxlcyBtYWlsbGUgcmVjYWxjdWxlZXMgYSBjaGFxdWUgcGFzIGRlIHRl bXBzCisgICAgICAgICAgRWlzLCAgICAgJiAhIGVuZXJnaWUgaW50ZXJuZSBz cGVjaWZpcXVlIChzZXVsZW1lbnQgcG91ciBjYWxjdWxlciBsYSBwcmVzc2lv bikKKyAgICAgICAgICBWaXRfc29uLCAmICEgY29tbWUgc29uIG5vbSBsJ2lu ZGlxdWUKKyAgICAgICAgICBDX2ZfbCwgICAmICEgbm9tYnJlIGRlIENvdXJh bnQKKyAgICAgICAgICBQbSwgICAgICAmICEgcHJlc3Npb24gYXV4IG1haWxs ZXMKKyAgICAgICAgICAhIFZhcmlhYmxlcyBhdXggbm9ldWRzCisgICAgICAg ICAgVW4sICAgICAgJiAhIHZpdGVzc2UgZGVzIG5vZXVkcworICAgICAgICAg IFBuICAgICAgICAgISBwcmVzc2lvbiBhdXggbm9ldWRzCisgCisgCisgaW50 ZWdlcihpbnQpIDo6IGksIGosIGsKKyBpbnRlZ2VyKGludCkgOjogZmlyc3Rf Y2VsbCwgbGFzdF9jZWxsCisgCisgICAgICAgICAgUm8gPT4gSHlkcm9fdmFy cyggZmlyc3RfY2VsbDpsYXN0X2NlbGwsIGosIGspJWNlbGxfdmFyKCByb192 YXIpCisgICAgICAgICAgRXRzID0+IEh5ZHJvX3ZhcnMoIGZpcnN0X2NlbGw6 bGFzdF9jZWxsLCBqLCBrKSVjZWxsX3ZhciggZXRzX3ZhcikKKyAgICAgICAg ICBVbSA9PiBIeWRyb192YXJzKCBmaXJzdF9jZWxsOmxhc3RfY2VsbCwgaiwg ayklY2VsbF92YXIoIHVfdmFyKQorICAgICAgICAgIFVtX3AxID0+IEh5ZHJv X3ZhcnMoIGZpcnN0X2NlbGw6bGFzdF9jZWxsLCBqLCBrKSVjZWxsX3Zhcigg dXAxX3ZhcikKKyAgICAgICAgICBVbV9wMiA9PiBIeWRyb192YXJzKCBmaXJz dF9jZWxsOmxhc3RfY2VsbCwgaiwgayklY2VsbF92YXIoIHVwMl92YXIpCisg CisgZW5kIHN1YnJvdXRpbmUgVEZfQURfU1BMSVRUSU5HX0RSSVZFUl9QTEFO RQorIApJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVy X2FycmF5XzMuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV8zLmY5MAkobm9u ZXhpc3RlbnQpCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50 ZXJfYXJyYXlfMy5mOTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioq CioqKiAwICoqKioKLS0tIDEsNTEgLS0tLQorICEgeyBkZy1kbyBydW4gfQor ICEKKyAhIFRlc3QgdGhlIGZpeCBmb3IgUFI0MDczNyBjb21tZW50IDE3IGFz IHBhcnQgb2YgdGhlIG92ZXJhbGwgZml4IGZvciBQUjM0NjQwLgorICEKKyAh IENvbnRyaWJ1dGVkIGJ5IEpvc2ggSHlrZXMgIDxqb3NodWFoeWtlc0B5YWhv by5jb20+CisgIQorICAgIG1vZHVsZSB0ZXN0X21vZAorICEKKyAgICB0eXBl IHQxCisgICAgICAgY2hhcmFjdGVyKDgpICA6OiBzdHJpbmcKKyAgICBlbmQg dHlwZSB0MQorICEKKyAgICB0eXBlIHQyCisgICAgICBpbnRlZ2VyIDo6IHRh YgorICAgICAgdHlwZSh0MSksIHBvaW50ZXIgOjogZnAoOikKKyAgICBlbmQg dHlwZSB0MgorICEKKyAgICB0eXBlIHQzCisgICAgICAgaW50ZWdlciA6OiB0 YWIKKyAgICAgICB0eXBlKHQyKSwgcG9pbnRlciA6OiBhcworICAgIGVuZCB0 eXBlIHQzCisgIQorICAgIHR5cGUodDMpLCBwb2ludGVyIDo6IGFzX3R5cCg6 KSA9PiBudWxsKCkKKyAhCisgICAgY2hhcmFjdGVyKDgpLCAgcG9pbnRlciwg cHVibGljIDo6IHAoOikKKyAhCisgICAgY29udGFpbnMKKyAhCisgICAgc3Vi cm91dGluZSBhc19zZXRfYWxpYXMgKGkpCisgIQorICAgIGltcGxpY2l0IG5v bmUKKyAhCisgICAgaW50ZWdlciwgaW50ZW50KGluKSAgICA6OiBpCisgIQor ICAgICAgYWxsb2NhdGUgKGFzX3R5cCgyKSkKKyAgICAgIGFsbG9jYXRlIChh c190eXAoMSklYXMpCisgICAgICBhbGxvY2F0ZSAoYXNfdHlwKDEpJWFzJWZw KDIpLCBzb3VyY2UgPSBbdDEoImFiY2RlZmdoIiksdDEoImlqa2xtbm9wIild KQorICAgICAgcCA9PiBhc190eXAoaSklYXMlZnAoOiklc3RyaW5nCisgIQor ICAgIGVuZCBzdWJyb3V0aW5lIGFzX3NldF9hbGlhcworICEKKyAgICBlbmQg bW9kdWxlIHRlc3RfbW9kCisgCisgICAgcHJvZ3JhbSB0ZXN0X3Byb2cKKyAg ICB1c2UgdGVzdF9tb2QKKyAgICBjYWxsIGFzX3NldF9hbGlhcygxKQorICAg IGlmIChhbnkgKHAgLm5lLiBbImFiY2RlZmdoIiwiaWprbG1ub3AiXSkpIGNh bGwgYWJvcnQKKyAgICBkZWFsbG9jYXRlIChhc190eXAoMSklYXMlZnApCisg ICAgZGVhbGxvY2F0ZSAoYXNfdHlwKDEpJWFzKQorICAgIGRlYWxsb2NhdGUg KGFzX3R5cCkKKyAgICBlbmQgcHJvZ3JhbSB0ZXN0X3Byb2cKSW5kZXg6IGdj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV80LmY5MAo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL3BvaW50ZXJfYXJyYXlfNC5mOTAJKG5vbmV4aXN0ZW50KQotLS0g Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2FycmF5XzQuZjkw CSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0t LSAxLDc1IC0tLS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBUZXN0IHRo ZSBmaXggZm9yIFBSNTcxMTYgYXMgcGFydCBvZiB0aGUgb3ZlcmFsbCBmaXgg Zm9yIFBSMzQ2NDAuCisgIQorICEgQ29udHJpYnV0ZWQgYnkgUmVpbmhvbGQg QmFkZXIgIDxCYWRlckBscnouZGU+CisgIQorIG1vZHVsZSBtb2RfcnR0aV9w dHIKKyAgIGltcGxpY2l0IG5vbmUKKyAgIHR5cGUgOjogZm9vCisgICAgICBy ZWFsIDo6IHYKKyAgICAgIGludGVnZXIgOjogaQorICAgZW5kIHR5cGUgZm9v CisgY29udGFpbnMKKyAgIHN1YnJvdXRpbmUgZXh0cmFjdCh0aGlzLCB2LCBp YykKKyAgICAgY2xhc3MoKiksIHRhcmdldCA6OiB0aGlzKDopCisgICAgIHJl YWwsIHBvaW50ZXIgOjogdig6KQorICAgICBpbnRlZ2VyIDo6IGljCisgICAg IHNlbGVjdCB0eXBlICh0aGlzKQorICAgICB0eXBlIGlzIChyZWFsKQorICAg ICAgICB2ID0+IHRoaXMoaWM6KQorICAgICBjbGFzcyBpcyAoZm9vKQorICAg ICAgICB2ID0+IHRoaXMoaWM6KSV2CisgICAgIGVuZCBzZWxlY3QKKyAgIGVu ZCBzdWJyb3V0aW5lIGV4dHJhY3QKKyBlbmQgbW9kdWxlCisgCisgcHJvZ3Jh bSBwcm9nX3J0dGlfcHRyCisgICB1c2UgbW9kX3J0dGlfcHRyCisgICBjbGFz cygqKSwgYWxsb2NhdGFibGUsIHRhcmdldCA6OiBvKDopCisgICByZWFsLCBw b2ludGVyIDo6IHYoOikKKyAKKyAgIGFsbG9jYXRlKG8oMyksIHNvdXJjZT1b MS4wLCAyLjAsIDMuMF0pCisgICBjYWxsIGV4dHJhY3QobywgdiwgMikKKyAg IGlmIChzaXplKHYpID09IDIgLmFuZC4gYWxsICh2ID09IFsyLjAsIDMuMF0p KSB0aGVuCisgICAgICBkZWFsbG9jYXRlKG8pCisgICBlbHNlCisgICAgICBj YWxsIGFib3J0CisgICBlbmQgaWYKKyAKKyAgIGFsbG9jYXRlKG8oMyksIHNv dXJjZT1bZm9vKDEuMCwgMSksIGZvbyg0LjAsIDQpLCBmb28oNS4wLCA1KV0p CisgICBjYWxsIGV4dHJhY3QobywgdiwgMikKKyAgIGlmIChzaXplKHYpID09 IDIgLmFuZC4gYWxsICh2ID09IFs0LjAsIDUuMF0pKSB0aGVuCisgICAgICBk ZWFsbG9jYXRlKG8pCisgICBlbHNlCisgICAgICBjYWxsIGFib3J0CisgICBl bmQgaWYKKyAKKyAhIFRoZSByZXN0IHRlc3RzIHRoZSBjYXNlIGluIGNvbW1l bnQgMiA8amFudXNAZ2NjLmdudS5vcmc+CisgCisgICBjYWxsIGV4dHJhY3Qx ICh2LCAxKQorICAgaWYgKGFueSAodiAvPSBbMS4wLCAyLjBdKSkgY2FsbCBh Ym9ydAorICAgY2FsbCBleHRyYWN0MSAodiwgMikgICEgQ2FsbCB0byBkZWFs bG9jYXRlIHBvaW50ZXIuCisgCisgY29udGFpbnMKKyAgIHN1YnJvdXRpbmUg ZXh0cmFjdDEodiwgZmxhZykKKyAgICAgdHlwZSA6OiBmb28KKyAgICAgICAg cmVhbCA6OiB2CisgICAgICAgIGNoYXJhY3Rlcig0KSA6OiBzdHIKKyAgICAg ZW5kIHR5cGUKKyAgICAgY2xhc3MoZm9vKSwgcG9pbnRlciwgc2F2ZSA6OiB0 aGlzKDopCisgICAgIHJlYWwsIHBvaW50ZXIgOjogdig6KQorICAgICBpbnRl Z2VyIDo6IGZsYWcKKyAKKyAgICAgaWYgKGZsYWcgPT0gMSkgdGhlbgorICAg ICAgIGFsbG9jYXRlICh0aGlzKDIpLCBzb3VyY2UgPSBbZm9vICgxLjAsICJv bmUgIiksIGZvbyAoMi4wLCAidHdvICIpXSkKKyAgICAgICBzZWxlY3QgdHlw ZSAodGhpcykKKyAgICAgICAgIGNsYXNzIGlzIChmb28pCisgICAgICAgICAg IHYgPT4gdGhpcygxOjIpJXYKKyAgICAgICBlbmQgc2VsZWN0CisgICAgIGVs c2UKKyAgICAgICBkZWFsbG9jYXRlICh0aGlzKQorICAgICBlbmQgaWYKKyAg IGVuZCBzdWJyb3V0aW5lCisgCisgZW5kIHByb2dyYW0gcHJvZ19ydHRpX3B0 cgpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2Fy cmF5XzUuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV81LmY5MAkobm9uZXhp c3RlbnQpCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJf YXJyYXlfNS5mOTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioq KiAwICoqKioKLS0tIDEsNjUgLS0tLQorICEgeyBkZy1kbyBydW4gfQorICEK KyAhIFRlc3QgdGhlIGZpeCBmb3IgUFI1NTc2MyBjb21tZW50IDkgYXMgcGFy dCBvZiB0aGUgb3ZlcmFsbCBmaXggZm9yIFBSMzQ2NDAuCisgIQorICEgQ29u dHJpYnV0ZWQgYnkgVG9iaWFzIEJ1cm51cyAgPGJ1cm51c0BnY2MuZ251Lm9y Zz4KKyAhCisgICBwcm9ncmFtIGNoYW5nZV9maWVsZF90eXBlCisgICAgIHVz ZSwgaW50cmluc2ljIDo6IGlzb19jX2JpbmRpbmcKKyAgICAgaW1wbGljaXQg bm9uZQorICAgICBSRUFMKGtpbmQ9Y19mbG9hdCksIFBPSU5URVIgOjogdmVj dG9yX2NvbXAoOikKKyAgICAgVFlQRSwgQklORChDKSA6OiBzY2FsYXJfdmVj dG9yCisgICAgICAgIFJFQUwoa2luZD1jX2Zsb2F0KSA6OiBzY2FsYXIKKyAg ICAgICAgUkVBTChraW5kPWNfZmxvYXQpIDo6IHZlYygzKQorICAgICBFTkQg VFlQRQorICAgICBUWVBFLCBCSU5EKEMpIDo6IHNjYWxhcl92ZWN0b3JfbWF0 cml4CisgICAgICAgIFJFQUwoa2luZD1jX2Zsb2F0KSA6OiBzY2FsYXIKKyAg ICAgICAgUkVBTChraW5kPWNfZmxvYXQpIDo6IHZlYygzKQorICAgICAgICBS RUFMKGtpbmQ9Y19mbG9hdCkgOjogbWF0KDMsMykKKyAgICAgRU5EIFRZUEUK KyAgICAgQ0xBU1MoKiksIEFMTE9DQVRBQkxFLCBUQVJHRVQgOjogb25lX2Rf ZmllbGQoOikKKyAgICAgcmVhbCwgcG9pbnRlciA6OiB2MSg6KQorIAorICAg ICBhbGxvY2F0ZShvbmVfZF9maWVsZCgzKSwgJgorICAgICAgICAgICAgICBz b3VyY2UgPSAoLyBzY2FsYXJfdmVjdG9yKCAxLjAsICgvIC0xLjAsIDAuMCwg MS4wIC8pICksICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFy X3ZlY3RvciggMS4xLCAoLyAtMS4yLCAwLjIsIDAuOSAvKSApLCAmCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHNjYWxhcl92ZWN0b3IoIDEuMiwgKC8g LTEuNCwgMC40LCAwLjggLykgKSAgLykgKQorIAorICAgICBjYWxsIGV4dHJh Y3RfdmVjKG9uZV9kX2ZpZWxkLCAxLCAyKQorICAgICBpZiAoYW55IChhYnMg KHZlY3Rvcl9jb21wIC0gWzAuMCwwLjIsMC40XSkgLmd0LiAxZS00KSkgY2Fs bCBhYm9ydAorICAgICBkZWFsbG9jYXRlKG9uZV9kX2ZpZWxkKSAgICEgdjEg YmVjb21lcyB1bmRlZmluZWQKKyAKKyAgICAgYWxsb2NhdGUob25lX2RfZmll bGQoMSksICYKKyAgICAgICAgICBzb3VyY2UgPSAoLyBzY2FsYXJfdmVjdG9y X21hdHJpeCggMS4wLCAoLyAtMS4wLCAwLjAsIDEuMCAvKSwgJgorICAgICAg ICAgIHJlc2hhcGUoICgvIDEuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAs IDAuMCwgMC4wLCAxLjAgLyksICYKKyAgICAgICAgICAgICAgICAgICgvMywg My8pICkgKSAvKSApCisgCisgICAgIGNhbGwgZXh0cmFjdF92ZWMob25lX2Rf ZmllbGQsIDIsIDEpCisgICAgIGlmIChhYnMgKHZlY3Rvcl9jb21wKDEpICsg MS4wKSA+IDFlLTQpIGNhbGwgYWJvcnQKKyAgICAgY2FsbCBleHRyYWN0X3Zl YyhvbmVfZF9maWVsZCwgMiwgMykKKyAgICAgaWYgKGFicyAodmVjdG9yX2Nv bXAoMSkgLSAxLjApID4gMWUtNCkgY2FsbCBhYm9ydAorICAgICBkZWFsbG9j YXRlKG9uZV9kX2ZpZWxkKSAgICEgdjEgYmVjb21lcyB1bmRlZmluZWQKKyAg IGNvbnRhaW5zCisgICAgIHN1YnJvdXRpbmUgZXh0cmFjdF92ZWMoZmllbGQs IHRhZywgaWMpCisgICAgICAgICB1c2UsIGludHJpbnNpYyA6OiBpc29fY19i aW5kaW5nCisgICAgICAgICBDTEFTUygqKSwgVEFSR0VUIDo6IGZpZWxkKDop CisgICAgICAgICBJTlRFR0VSKGtpbmQ9Y19pbnQpLCB2YWx1ZSA6OiB0YWcs IGljCisgCisgICAgICAgICB0eXBlKHNjYWxhcl92ZWN0b3IpLCBwb2ludGVy IDo6IHN2KDopCisgICAgICAgICB0eXBlKHNjYWxhcl92ZWN0b3JfbWF0cml4 KSwgcG9pbnRlciA6OiBzdm0oOikKKyAKKyAgICAgICAgIHNlbGVjdCB0eXBl IChmaWVsZCkKKyAgICAgICAgIHR5cGUgaXMgKHJlYWwoY19mbG9hdCkpCisg ICAgICAgICAgIHZlY3Rvcl9jb21wID0+IGZpZWxkCisgICAgICAgICBjbGFz cyBkZWZhdWx0CisgICAgICAgICAgIHNlbGVjdCBjYXNlICh0YWcpCisgICAg ICAgICAgIGNhc2UgKDEpCisgICAgICAgICAgICAgIHN2ID0+IGZpZWxkCisg ICAgICAgICAgICAgIHZlY3Rvcl9jb21wID0+IHN2KDopJXZlYyhpYykKKyAg ICAgICAgICAgY2FzZSAoMikKKyAgICAgICAgICAgICAgc3ZtID0+IGZpZWxk CisgICAgICAgICAgICAgIHZlY3Rvcl9jb21wID0+IHN2bSg6KSV2ZWMoaWMp CisgICAgICAgICAgIGVuZCBzZWxlY3QKKyAgICAgICAgIGVuZCBzZWxlY3QK KyAgICAgZW5kIHN1YnJvdXRpbmUKKyAgIGVuZCBwcm9ncmFtCkluZGV4OiBn Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlfNi5mOTAK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9wb2ludGVyX2FycmF5XzYuZjkwCShub25leGlzdGVudCkKLS0t IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV82LmY5 MAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKioKKioqIDAgKioqKgot LS0gMSwyOCAtLS0tCisgISB7IGRnLWRvIHJ1biB9CisgIQorICEgVGVzdCB0 aGUgZml4IGZvciBQUjU3MDE5IGNvbW1lbnQgNCBhcyBwYXJ0IG9mIHRoZSBv dmVyYWxsIGZpeCBmb3IgUFIzNDY0MC4KKyAhCisgISBDb250cmlidXRlZCBi eSAgPHRoYW1ic3VwQGdtYWlsLmNvbT4KKyAhCisgICB0eXBlIGNQYXJ0aWNs ZQorICAgICByZWFsKDQpIDo6IHYoMykKKyAgIGVuZHR5cGUgY1BhcnRpY2xl CisgCisgICB0eXBlIHBDSXRlbQorICAgICB0eXBlKGNQYXJ0aWNsZSkgOjog RWxlCisgICBlbmQgdHlwZSBwQ0l0ZW0KKyAKKyAgIHR5cGUocENJdGVtKSwg dGFyZ2V0LCBkaW1lbnNpb24oMToxLDE6MSkgOjogcENlbGxBcnJheQorICAg dHlwZShjUGFydGljbGUpLCBwb2ludGVyLCBkaW1lbnNpb24oOiw6KSA6OiBw QXJyYXkKKyAgIHJlYWwoNCksIHBvaW50ZXIsIGRpbWVuc2lvbig6KSA6OiB2 X3BvaW50ZXIKKyAgIHJlYWwoNCksIGRpbWVuc2lvbigzKSA6OiB2X3JlYWwg PSA5OS4KKyAKKyAgIHBBcnJheSA9PiBwQ2VsbEFycmF5JUVsZQorICAgdl9w b2ludGVyID0+IHBBcnJheSgxLDEpJXY7CisgICB2X3BvaW50ZXIgPSB2X3Jl YWwgIU9LICUlJSUlJSUlJSUlJQorICAgaWYgKGFueSAoaW50IChwQXJyYXko MSwxKSV2KSAubmUuIDk5KSkgY2FsbCBhYm9ydAorIAorICAgdl9yZWFsID0g ODgKKyAgIHBBcnJheSgxLDEpJXYgPSB2X3JlYWwgIVNFR0ZBVUxUICUlJSUl JSUlJSUlJSUlJSUlJSUlJSUlJQorICAgaWYgKGFueSAoaW50ICh2X3BvaW50 ZXIpIC5uZS4gODgpKSBjYWxsIGFib3J0CisgZW5kCkluZGV4OiBnY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlfY29tcG9uZW50XzEu ZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV9jb21wb25lbnRfMS5mOTAJKG5v bmV4aXN0ZW50KQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2lu dGVyX2FycmF5X2NvbXBvbmVudF8xLmY5MAkod29ya2luZyBjb3B5KQoqKioq KioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSw0NyAtLS0tCisgISB7IGRn LWRvIHJ1biB9CisgIQorICEgQ2hlY2sgdGhlIGZpeCBmb3IgUFIzNDY0MCBj b21tZW50IDI4LgorICEKKyAhIFRoaXMgaW52b2x2ZXMgcG9pbnRlciBhcnJh eSBjb21wb25lbnRzIHRoYXQgcG9pbnQgdG8gY29tcG9uZW50cyBvZiBhcnJh eXMKKyAhIG9mIGRlcml2ZWQgdHlwZXMuCisgIQorICAgdHlwZSB2YXJfdGFi bGVzCisgICAgICByZWFsLCBwb2ludGVyIDo6IHJ2YXIoOikKKyAgIGVuZCB0 eXBlCisgCisgICB0eXBlIHJlYWxfdmFycworICAgICAgcmVhbCByCisgICAg ICByZWFsIDo6IGluZGV4CisgICBlbmQgdHlwZQorIAorICAgdHlwZSh2YXJf dGFibGVzKSA6OiAgdnRhYl9yCisgICB0eXBlKHJlYWxfdmFycyksICB0YXJn ZXQgOjogeCgyKQorICAgcmVhbCwgcG9pbnRlciA6OiB6KDopCisgICByZWFs IDo6IHkoMikKKyAKKyAgIHggPSBbcmVhbF92YXJzICgxMS4wLCAxLjApLCBy ZWFsX3ZhcnMgKDQyLjAsIDIuMCldCisgICB2dGFiX3IlcnZhciA9PiB4JXIK KyAgIGlmIChhbnkgKGFicyAodnRhYl9yJXJ2YXIgLSBbMTEuMCwgNDIuMF0p ID4gMS4wZS01KSkgY2FsbCBhYm9ydCAgISBDaGVjayBza2lwcGluZyAnaW5k ZXg7IGlzIE9LLgorIAorICAgeSA9IHZ0YWJfciVydmFyCisgICBpZiAoYW55 IChhYnMgKHkgLSBbMTEuMCwgNDIuMF0pID4gMS4wZS01KSkgY2FsbCBhYm9y dCAgISBDaGVjayB0aGF0IHRoZSBjb21wb25lbnQgaXMgdXNhYmxlIGluIGFz c2lnbm1lbnQuCisgCisgICBjYWxsIGZvb2JhciAodnRhYl9yLCBbMTEuMCwg NDIuMF0pCisgCisgICB2dGFiX3IgPSBiYXJmb28gKCkKKyAKKyAgIGNhbGwg Zm9vYmFyICh2dGFiX3IsIFsxMTEuMCwgMTQyLjBdKQorIAorIGNvbnRhaW5z CisgICBzdWJyb3V0aW5lIGZvb2JhciAodnRhYiwgYXJyYXkpCisgICAgIHR5 cGUodmFyX3RhYmxlcykgOjogIHZ0YWIKKyAgICAgcmVhbCA6OiBhcnJheSAo OikKKyAgICAgaWYgKGFueSAoYWJzICh2dGFiJXJ2YXIgLSBhcnJheSkgPiAx LjBlLTUpKSBjYWxsIGFib3J0ICAhIENoZWNrIHBhc3NpbmcgYXMgYSBkdW1t eS4KKyAgICAgaWYgKGFicyAodnRhYiVydmFyKDIpIC0gYXJyYXkoMikpID4g MS4wZS01KSBjYWxsIGFib3J0ICAhIENoZWNrIGNvbXBvbmVudCByZWZlcmVu Y2UuCisgICBlbmQgc3Vicm91dGluZQorIAorICAgZnVuY3Rpb24gYmFyZm9v ICgpIHJlc3VsdChyZXMpCisgICAgIHR5cGUodmFyX3RhYmxlcykgOjogIHJl cworICAgICBhbGxvY2F0ZSAocmVzJXJ2YXIoMiksIHNvdXJjZSA9IFsxMTEu MCwgMTQyLjBdKSAgISBDaGVjayBhbGxvY2F0aW9uCisgICBlbmQgZnVuY3Rp b24KKyBlbmQKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcG9p bnRlcl9hcnJheV9jb21wb25lbnRfMi5mOTAKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoqKiogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2Fy cmF5X2NvbXBvbmVudF8yLmY5MAkobm9uZXhpc3RlbnQpCi0tLSBnY2MvdGVz dHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlfY29tcG9uZW50XzIu ZjkwCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioq Ci0tLSAxLDQzIC0tLS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBUZXN0 IHRoZSBmaXggZm9yIFBSMzQ2NDAuIEluIHRoZSBmaXJzdCB2ZXJzaW9uIG9m IHRoZSBmaXgsIHRoZSBmaXJzdAorICEgdGVzdGNhc2UgaW4gUFI1MTIxOCBm YWlsZWQgd2l0aCBhIHNlZ2ZhdWx0LiBUaGlzIHRlc3QgZXh0cmFjdHMgdGhl CisgISBmYWlsaW5nIHBhcnQgYW5kIGNoZWNrcyB0aGF0IGFsbCBpcyB3ZWxs LgorICEKKyAgIHR5cGUgdF9pbmZvX2Jsb2NrCisgICAgIGludGVnZXIgICAg ICAgICAgICAgICAgICAgICAgOjogbiAgICAgPSAgMCAgICAgICEgbnVtYmVy IG9mIGVsZW1lbnRzCisgICBlbmQgdHlwZSB0X2luZm9fYmxvY2sKKyAgICEK KyAgIHR5cGUgdF9kZWNfaW5mbworICAgICBpbnRlZ2VyICAgICAgICAgICAg ICAgICAgICAgIDo6IG4gICAgID0gIDAgICAgICAhIG51bWJlciBvZiBlbGVt ZW50cworICAgICBpbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgIDo6IG5f YiAgID0gIDAgICAgICAhIG51bWJlciBvZiBibG9ja3MKKyAgICAgdHlwZSAo dF9pbmZvX2Jsb2NrKSAscG9pbnRlciA6OiBiICg6KSA9PiBOVUxMKCkgISBp bmZvIGJsb2NrcworICAgZW5kIHR5cGUgdF9kZWNfaW5mbworICAgIQorICAg dHlwZSB0X3ZlY3Rvcl9zZWdtCisgICAgIGludGVnZXIgICAgICAgICAgIDo6 IG4gICAgPSAgMCAgICAgICEgbnVtYmVyIG9mIGVsZW1lbnRzCisgICAgIHJl YWwgLHBvaW50ZXIgOjogeCg6KSA9PiBOVUxMKCkgISBjb2VmZmljaWVudHMK KyAgIGVuZCB0eXBlIHRfdmVjdG9yX3NlZ20KKyAgICEKKyAgIHR5cGUgdF92 ZWN0b3IKKyAgICAgdHlwZSAodF9kZWNfaW5mbykgICAgLHBvaW50ZXIgOjog aW5mbyAgICA9PiBOVUxMKCkgICEgZGVjb21wb3NpdGlvbiBpbmZvCisgICAg IGludGVnZXIgICAgICAgICAgICAgICAgICAgICAgIDo6IG4gICAgICAgPSAg MCAgICAgICAhIG51bWJlciBvZiBlbGVtZW50cworICAgICBpbnRlZ2VyICAg ICAgICAgICAgICAgICAgICAgICA6OiBuX3MgICAgID0gIDAgICAgICAgISBu dW1iZXIgb2Ygc2VnbWVudHMKKyAgICAgaW50ZWdlciAgICAgICAgICAgICAg ICAgICAgICAgOjogYWxsb2NfbCA9ICAwICAgICAgICEgYWxsb2NhdGlvbiBs ZXZlbAorICAgICB0eXBlICh0X3ZlY3Rvcl9zZWdtKSAscG9pbnRlciA6OiBz ICg6KSAgID0+IE5VTEwoKSAgISB2ZWN0b3IgYmxvY2tzCisgICBlbmQgdHlw ZSB0X3ZlY3RvcgorIAorIAorICAgdHlwZSh0X3ZlY3RvcikgOjogegorICAg dHlwZSh0X3ZlY3Rvcl9zZWdtKSwgcG9pbnRlciA6OiBzcworIAorICAgYWxs b2NhdGUgKHolcygyKSkKKyAgIGRvIGkgPSAxLCAyCisgICAgIHNzID0+IHol cyhpKQorICAgICBhbGxvY2F0ZSAoc3MleCgyKSwgc291cmNlID0gWzEuMCwg Mi4wXSpyZWFsKGkpKQorICAgZW5kIGRvCisgCisgISBUaGVzZSBsaW5lcyB3 b3VsZCBzZWdmYXVsdC4KKyAgIGlmIChpbnQgKHN1bSAoeiVzKDEpJXgpKSAu bmUuIDMpIGNhbGwgYWJvcnQKKyAgIGlmIChpbnQgKHN1bSAoeiVzKDEpJXgg KiB6JXMoMikleCkpIC5uZS4gMTApIGNhbGwgYWJvcnQKKyBlbmQKSW5kZXg6 IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2Mva2VybmVscy1hbGlh cy00LmY5NQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2dvYWNjL2tlcm5lbHMtYWxpYXMtNC5mOTUJKHJl dmlzaW9uIDI0OTA1MCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv Z29hY2Mva2VybmVscy1hbGlhcy00LmY5NQkod29ya2luZyBjb3B5KQoqKioq KioqKioqKioqKiogcHJvZ3JhbSBtYWluCioqKiAxNiwyMCAqKioqCiAgZW5k IHByb2dyYW0gbWFpbgogIAogICEgT25seSB0aGUgb21wX2RhdGFfaSByZWxh dGVkIGxvYWRzIHNob3VsZCBiZSBhbm5vdGF0ZWQgd2l0aCBjbGlxdWVzLgoh ICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJjbGlxdWUg MSBiYXNlIDEiIDMgImVhbGlhcyIgfSB9CiEgISB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgIig/biljbGlxdWUgMSBiYXNlIDAiIDQgImVh bGlhcyIgfSB9Ci0tLSAxNiwyMCAtLS0tCiAgZW5kIHByb2dyYW0gbWFpbgog IAogICEgT25seSB0aGUgb21wX2RhdGFfaSByZWxhdGVkIGxvYWRzIHNob3Vs ZCBiZSBhbm5vdGF0ZWQgd2l0aCBjbGlxdWVzLgohICEgeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJjbGlxdWUgMSBiYXNlIDEiIDQgImVh bGlhcyIgfSB9CiEgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIig/biljbGlxdWUgMSBiYXNlIDAiIDUgImVhbGlhcyIgfSB9CkluZGV4 OiBsaWJnZm9ydHJhbi9saWJnZm9ydHJhbi5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KKioqIGxpYmdmb3J0cmFuL2xpYmdmb3J0cmFuLmgJKHJldmlzaW9u IDI0OTA1MCkKLS0tIGxpYmdmb3J0cmFuL2xpYmdmb3J0cmFuLmgJKHdvcmtp bmcgY29weSkKKioqKioqKioqKioqKioqIHN0cnVjdCB7XAoqKiogMzM5LDM0 NCAqKioqCi0tLSAzMzksMzQ1IC0tLS0KICAgIHR5cGUgKmJhc2VfYWRkcjtc CiAgICBzaXplX3Qgb2Zmc2V0O1wKICAgIGluZGV4X3R5cGUgZHR5cGU7XAor ICAgaW5kZXhfdHlwZSBzcGFuO1wKICAgIGRlc2NyaXB0b3JfZGltZW5zaW9u IGRpbVtyXTtcCiAgfQogIAo= --001a1143fb9e83b18f0552c758bb--