rjsf-team / react-jsonschema-form

A React component for building Web forms from JSON Schema.
https://rjsf-team.github.io/react-jsonschema-form/
Apache License 2.0
14.14k stars 2.18k forks source link

5.3.0: Array items perform much worse #3517

Open MatinF opened 1 year ago

MatinF commented 1 year ago

Prerequisites

What theme are you using?

core

Version

5.0.0-beta.18 vs. 5.0.0-beta.19

Current Behavior

We wanted to test out the latest update to rjsf (upgrading from 5.0.0 beta11 to 5.3.0) in order to benefit from the new ability to 'copy' array items, which was added as a feature in the latest release.

Unfortunately, the performance of the updated version is much worse when it comes to adding/removing array items - to an extent where it now takes ~1-2 seconds to add a new entry, up from <0.1 seconds in the previous release. After isolating the release introducing this, it seems to start after 5.0.0-beta.18.

I am unable to replicate this in the live playground, though I am unsure why.

Expected Behavior

I would expect the performance to be similar to previous versions.

Steps To Reproduce

1) Use a standard rjsf setup with 5.0.0-beta.18 vs. 5.0.0-beta.19

2) Use below custom array template:

3) To replicate this, test with the below formdata (config) and schema/uischema. The slow performance can be seen by going to CAN CH1 and adding entries in the Transmit list section. json-schema.zip

nickgros commented 1 year ago

@MatinF I tried to re-create this in CodeSandbox and didn't notice issues with array performance https://codesandbox.io/s/rjsf-3517-repro-679s2u

Can you create your own example or modify the above so we can get to the bottom of this (or clarify further how to see the issue if it is present in that example)?

MatinF commented 1 year ago

I've been trying to replicate your dependency setup in my own application, but struggling to achieve this due to some legacy dependencies. I recognize that there is not a performance issue in your sandbox, so I am not sure why there is on my side.

The app I'm testing this with is below: https://github.com/CSS-Electronics/config-editor-base

You can install it by running npm install in the root and in the example/ folder, followed by running npm start in both folders. If you then load attached configuration file you'll be able to load up the editor: config-01.07.zip

I'm guessing the issue is related to some of the outdated dependencies I have, such as React 16.0.0 and other things. I tried various steps such as updating from validator v6 to v8 as in your sandbox, but the slow performance persists.

As you can see if you decide to install the app, the performance is snappy with the default version of rjsf in the repository - but if you update to 5.3.0 it becomes much slower.

heath-freenome commented 1 year ago

@MatinF Wow that a lot of code you've written. I don't really have time to analyze and inspect it all to find the issue for you. I'm wondering if you are experiencing an interaction in your own code with react rerendering? Have you been able to debug into the RJSF code to see if it is there? Also, I just fixed an issue in 5.5.1 that prevented infinite recursions when using a schema with recursive refs. Can you check to see if that helped.

Cauen commented 1 year ago

@heath-freenome @nickgros Only by updating core to v5+, starts a performance problem on your example...

MatinF commented 1 year ago

I tested this with my own repository, config-editor-base, installing v5.5.2 of all the rjsf modules - but the performance issue remains unaffected. I think the issue is linked to some change made after 5.0.0-beta.18.

heath-freenome commented 1 year ago

I tested this with my own repository, config-editor-base, installing v5.5.2 of all the rjsf modules - but the performance issue remains unaffected. I think the issue is linked to some change made after 5.0.0-beta.18.

From what you shared the problem started in 5.0.0-beta.19 right?

Cauen commented 1 year ago

@heath-freenome 5.0.0-beta.1 in my tests. You can check by only changing version in codesandbox

heath-freenome commented 1 year ago

@Cauen First off, I haven't had a chance to dig deep into your example yet. Basically you are saying that v5 has performance issues that v4 doesn't have. A lot changed between 4 and 5. Are you willing to slowly reduce the size/complexity of the schema in example until the performance issue seems to go away and then put back the bit that causes it? Or, better yet, are you able to debug the current codebase enough to find out where the issue is happening? I basically only get a few hours on the weekend to tackle stuff and this seems like a large thing to tackle. Thanks

MatinF commented 1 year ago

@heath-freenome Fully understand that this is a rather cumbersome thing to test. I did specifically go through each revision on my end and can confirm for certain that it starts after 5.0.0-beta.18 - i.e. with 5.0.0-beta.19 being the first time I experience the problem. It is very clear cut. Every subsequent release has the same issue. I did not experience it in versions prior to 5.0.0-beta.19, though.

heath-freenome commented 1 year ago

@MatinF Are you using liveOmit and omitExtraData? We just added support for the OpenAPI discriminator for oneOf and anyOf. This could speed up your example a bunch. We are only supporting the propertyName of discriminator, and not the mappings. Using your schema, here's an updated fragment:

dependencies: {
        id_format: {
          discriminator: {
            propertyName: "id_format"
          },
          oneOf: [
            {
              properties: {
                id_format: {
                  enum: [0]
                },
                id: {
                  pattern: "^([0-7][a-fA-F0-9]{2}|[a-fA-F0-9]{1,2})$",
                  maxLength: 3
                },
                id_mask: {
                  pattern: "^([0-7][a-fA-F0-9]{2}|[a-fA-F0-9]{1,2})$",
                  maxLength: 3
                }
              }
            },
            {
              properties: {
                id_format: {
                  enum: [1]
                },
                id: {
                  pattern: "^([0-1][a-fA-F0-9]{7}|[a-fA-F0-9]{1,7})$",
                  maxLength: 8
                },
                id_mask: {
                  pattern: "^([0-1][a-fA-F0-9]{7}|[a-fA-F0-9]{1,7})$",
                  maxLength: 8
                }
              }
            }
          ]
        }
      },
      additionalProperties: false,
      required: ["chn", "id_format", "id", "id_mask"]
    },
MatinF commented 1 year ago

Hi again,

Yes, we use both of those, see below:

<FormWithNav
               validator={validator}
                omitExtraData={true}
                liveOmit={true}
                liveValidate={true}
                noHtml5Validate={true}
                schema={schemaContent ? schemaContent : {}}
                uiSchema={uiContent ? uiContent : {}}
                formData={configContent ? configContent : {}}
                onSubmit={this.onSubmit}
                onChange={this.handleChange}
                onError={this.handleError}
                onNavChange={this.onNavChange.bind(this)}
                templates={{ArrayFieldTemplate}}
                activeNav={activatedTab}
              >

I'm not sure how I would go about testing the impact of the OpenAPI discriminator you mention?

As mentioned before, we have never had any performance issues at all until the specific update 5.0.0-beta.19, i.e. I don't think this is related to an under-performing implementation in the Rule Schema, but rather I think this is due to some change implemented within that update that somehow affects our Rule Schema particularly hard.

heath-freenome commented 1 year ago

@MatinF So the release you have pointed to fixed a bug with toPathSchema() so that it handled oneOf/anyOf schemas (before that it didn't). toPathSchema() is used to computed what fields need to be checked in the liveOmit/omitExtraData. So it make sense that you experienced a slow-down when this fix was added. There definitely were issues with recursive references significantly slowing down the toPathSchema() function but those were fixed. The reason I suggested using the Open API descriptor is that it would speed up the detection of the schema that matches formData when there is a oneOf that contains objects that rely on the selection being based on that value of a single field of that object.

If you were to check out the speed of your code before and after adding them, I would hope you will see a speed up of the UI

MatinF commented 1 year ago

Ok just to check: If I am to test the effect of this, would I be able to do so by simply disabling the liveOmit / omitExtraData and seeing if that suffices to fix the performance issues?

If that helps, how would I enable the use of the Open API descriptor? I'm not familiar with this, so I am unsure if this is a built in feature of rjsf, or a separate project?

heath-freenome commented 1 year ago

Ok just to check: If I am to test the effect of this, would I be able to do so by simply disabling the liveOmit / omitExtraData and seeing if that suffices to fix the performance issues?

If that helps, how would I enable the use of the Open API descriptor? I'm not familiar with this, so I am unsure if this is a built in feature of rjsf, or a separate project?

Yes, turning off both of those flags should gain you performance.

You need only add the open API descriptor to your schema and RJSF will detect and use it to speed up the selection of the oneOf based upon the single field. I can get on a discord call with you sometime to walk you through it if that helps.

MatinF commented 1 year ago

Hi again,

Just as a bit of an update on this topic: We have been further investigating potential ways to resolve the issue with array items for our Rule Schema. However, in the more recent versions of the playground, it appears that the overall performance with our Rule Schema has completely tanked. As such, I think something more fundamental is going on in terms of how our type of Rule Schema is handled in the more recent releases.

You can verify this via the playground link below.

As you should be able to verify, simply entering a value in the first field (or any field) comes with a massive "lag" of multiple seconds. This is not at all the case in the version we're currently running our own app with (i.e. the versions up until and excluding 5.0.0-beta.19).

I'm not sure it's the same thing causing this recently observed playground lag and the more array-related issue pointed out in this issue. However, I'm guessing there may be some related underlying factor - e.g. because our Schema may be considered "large" (87 kb) or heavily nested. Any inputs on this would be of great interest as we would like to be able to update to the latest versions, but the performance blocks this - now also evident from the playground itself

https://rjsf-team.github.io/react-jsonschema-form/#eyJmb3JtRGF0YSI6eyJnZW5lcmFsIjp7ImRldmljZSI6eyJtZXRhIjoic3NzIn0sInNlY3VyaXR5Ijp7fSwiZGVidWciOnsic3lzbG9nIjowfX0sImxvZyI6eyJmaWxlIjp7InNwbGl0X3NpemUiOjUwLCJzcGxpdF90aW1lX3BlcmlvZCI6MCwic3BsaXRfdGltZV9vZmZzZXQiOjAsImN5Y2xpYyI6MX0sImNvbXByZXNzaW9uIjp7ImxldmVsIjowfSwiZW5jcnlwdGlvbiI6eyJzdGF0ZSI6MH0sImVycm9yX2ZyYW1lcyI6eyJzdGF0ZSI6MH19LCJydGMiOnsic3luYyI6MiwidGltZXpvbmUiOjAsImFkanVzdG1lbnQiOjAsInRvbGVyYW5jZSI6MzAsIm50cF9zZXJ2ZXIiOiIqLnBvb2wubnRwLm9yZyJ9LCJzZWNvbmRhcnlwb3J0Ijp7InBvd2VyX3NjaGVkdWxlIjpbXX0sImNhbl9pbnRlcm5hbCI6eyJnZW5lcmFsIjp7InJ4X3N0YXRlIjoxLCJ0eF9zdGF0ZSI6MX0sImZpbHRlciI6eyJpZCI6W3sic3RhdGUiOjEsInR5cGUiOjAsImlkX2Zvcm1hdCI6MCwibWV0aG9kIjowLCJmMSI6IjAiLCJmMiI6IjdGRiJ9XX0sImNvbnRyb2wiOnsiY29udHJvbF9yeF9zdGF0ZSI6MCwiY29udHJvbF90eF9zdGF0ZSI6MCwic3RhcnQiOnsibWVzc2FnZSI6eyJjaG4iOjAsImlkX2Zvcm1hdCI6MCwiaWQiOiIwIiwiaWRfbWFzayI6IjdGRiJ9LCJzaWduYWwiOnsidHlwZSI6MCwiYnl0ZW9yZGVyIjoxLCJiaXRwb3MiOjAsImxlbmd0aCI6MCwiZmFjdG9yIjowLCJvZmZzZXQiOjB9LCJ0cmlnZ2VyX2hpZ2giOjAsInRyaWdnZXJfbG93IjowfSwic3RvcCI6eyJtZXNzYWdlIjp7ImNobiI6MCwiaWRfZm9ybWF0IjowLCJpZCI6IjAiLCJpZF9tYXNrIjoiN0ZGIn0sInNpZ25hbCI6eyJ0eXBlIjowLCJieXRlb3JkZXIiOjEsImJpdHBvcyI6MCwibGVuZ3RoIjowLCJmYWN0b3IiOjAsIm9mZnNldCI6MH0sInRyaWdnZXJfaGlnaCI6MCwidHJpZ2dlcl9sb3ciOjB9fX0sImNhbl8xIjp7ImdlbmVyYWwiOnsicnhfc3RhdGUiOjEsInR4X3N0YXRlIjoxfSwicGh5Ijp7Im1vZGUiOjEsInJldHJhbnNtaXNzaW9uIjoxLCJmZF9zcGVjIjowLCJiaXRfcmF0ZV9jZmdfbW9kZSI6MH0sImZpbHRlciI6eyJyZW1vdGVfZnJhbWVzIjowLCJpZCI6W3sic3RhdGUiOjEsInR5cGUiOjAsImlkX2Zvcm1hdCI6MCwibWV0aG9kIjowLCJmMSI6IjAiLCJmMiI6IjdGRiJ9XX0sInRyYW5zbWl0IjpbXSwiaGVhcnRiZWF0Ijp7InN0YXRlIjowLCJpZF9mb3JtYXQiOjEsImlkIjoiMDA0MzUzNTMifSwiY29udHJvbCI6eyJjb250cm9sX3J4X3N0YXRlIjowLCJjb250cm9sX3R4X3N0YXRlIjowLCJzdGFydCI6eyJtZXNzYWdlIjp7ImNobiI6MCwiaWRfZm9ybWF0IjowLCJpZCI6IjAiLCJpZF9tYXNrIjoiN0ZGIn0sInNpZ25hbCI6eyJ0eXBlIjowLCJieXRlb3JkZXIiOjEsImJpdHBvcyI6MCwibGVuZ3RoIjowLCJmYWN0b3IiOjAsIm9mZnNldCI6MH0sInRyaWdnZXJfaGlnaCI6MCwidHJpZ2dlcl9sb3ciOjB9LCJzdG9wIjp7Im1lc3NhZ2UiOnsiY2huIjowLCJpZF9mb3JtYXQiOjAsImlkIjoiMCIsImlkX21hc2siOiI3RkYifSwic2lnbmFsIjp7InR5cGUiOjAsImJ5dGVvcmRlciI6MSwiYml0cG9zIjowLCJsZW5ndGgiOjAsImZhY3RvciI6MCwib2Zmc2V0IjowfSwidHJpZ2dlcl9oaWdoIjowLCJ0cmlnZ2VyX2xvdyI6MH19fSwiY2FuXzIiOnsiZ2VuZXJhbCI6eyJyeF9zdGF0ZSI6MSwidHhfc3RhdGUiOjF9LCJwaHkiOnsibW9kZSI6MSwicmV0cmFuc21pc3Npb24iOjEsImZkX3NwZWMiOjAsImJpdF9yYXRlX2NmZ19tb2RlIjowfSwiZmlsdGVyIjp7InJlbW90ZV9mcmFtZXMiOjAsImlkIjpbeyJzdGF0ZSI6MSwidHlwZSI6MCwiaWRfZm9ybWF0IjowLCJtZXRob2QiOjAsImYxIjoiMCIsImYyIjoiN0ZGIn1dfSwidHJhbnNtaXQiOltdLCJoZWFydGJlYXQiOnsic3RhdGUiOjAsImlkX2Zvcm1hdCI6MSwiaWQiOiIwMDQzNTM1MyJ9LCJjb250cm9sIjp7ImNvbnRyb2xfcnhfc3RhdGUiOjAsImNvbnRyb2xfdHhfc3RhdGUiOjAsInN0YXJ0Ijp7Im1lc3NhZ2UiOnsiY2huIjowLCJpZF9mb3JtYXQiOjAsImlkIjoiMCIsImlkX21hc2siOiI3RkYifSwic2lnbmFsIjp7InR5cGUiOjAsImJ5dGVvcmRlciI6MSwiYml0cG9zIjowLCJsZW5ndGgiOjAsImZhY3RvciI6MCwib2Zmc2V0IjowfSwidHJpZ2dlcl9oaWdoIjowLCJ0cmlnZ2VyX2xvdyI6MH0sInN0b3AiOnsibWVzc2FnZSI6eyJjaG4iOjAsImlkX2Zvcm1hdCI6MCwiaWQiOiIwIiwiaWRfbWFzayI6IjdGRiJ9LCJzaWduYWwiOnsidHlwZSI6MCwiYnl0ZW9yZGVyIjoxLCJiaXRwb3MiOjAsImxlbmd0aCI6MCwiZmFjdG9yIjowLCJvZmZzZXQiOjB9LCJ0cmlnZ2VyX2hpZ2giOjAsInRyaWdnZXJfbG93IjowfX19LCJsaW5fMSI6eyJwaHkiOnsibW9kZSI6MCwiYml0X3JhdGUiOjE5MjAwfSwiZnJhbWVzIjpbXSwidHJhbnNtaXQiOltdfSwibGluXzIiOnsicGh5Ijp7Im1vZGUiOjAsImJpdF9yYXRlIjoxOTIwMH0sImZyYW1lcyI6W10sInRyYW5zbWl0IjpbXX0sImNvbm5lY3QiOnsid2lmaSI6eyJtb2RlIjowLCJrZXlmb3JtYXQiOjAsImFjY2Vzc3BvaW50IjpbXX0sInMzIjp7InN5bmMiOnsib3RhIjo2MDAsImhlYXJ0YmVhdCI6MzAwLCJsb2dmaWxlcyI6MX0sInNlcnZlciI6eyJyZXF1ZXN0X3N0eWxlIjowLCJrZXlmb3JtYXQiOjAsInNpZ25lZF9wYXlsb2FkIjowfX19LCJ0ZXN0X29iamVjdCI6eyJteV9zdHJpbmdfZmllbGQiOiIifX0sInNjaGVtYSI6eyJ0eXBlIjoib2JqZWN0IiwiZGVmaW5pdGlvbnMiOnsiY2FuX21lc3NhZ2UiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiY2huIjp7InRpdGxlIjoiQ2hhbm5lbCIsImRlc2NyaXB0aW9uIjoiQ0FOLWJ1cyBjaGFubmVsIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkNBTiBpbnRlcm5hbCIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiQ0FOIDEiLCJlbnVtIjpbMV19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkNBTiAyIiwiZW51bSI6WzJdfV19LCJpZF9mb3JtYXQiOnsidGl0bGUiOiJJRCBmb3JtYXQiLCJkZXNjcmlwdGlvbiI6IklEIGZvcm1hdCBvZiBtZXNzYWdlLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJTdGFuZGFyZCAoMTEtYml0KSIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRXh0ZW5kZWQgKDI5LWJpdCkiLCJlbnVtIjpbMV19XX0sImlkIjp7InRpdGxlIjoiSUQgKGhleCkiLCJkZXNjcmlwdGlvbiI6IklEIG9mIG1lc3NhZ2UgaW4gaGV4LiBFeGFtcGxlOiAxRkYuIiwidHlwZSI6InN0cmluZyIsImRlZmF1bHQiOiIwIn0sImlkX21hc2siOnsidGl0bGUiOiJJRCBtYXNrIChoZXgpIiwiZGVzY3JpcHRpb24iOiJJRCBtYXNrIGluIGhleC4gRXhhbXBsZTogN0ZGLiIsInR5cGUiOiJzdHJpbmciLCJkZWZhdWx0IjoiN0ZGIn19LCJkZXBlbmRlbmNpZXMiOnsiaWRfZm9ybWF0Ijp7Im9uZU9mIjpbeyJwcm9wZXJ0aWVzIjp7ImlkX2Zvcm1hdCI6eyJlbnVtIjpbMF19LCJpZCI6eyJwYXR0ZXJuIjoiXihbMC03XVthLWZBLUYwLTldezJ9fFthLWZBLUYwLTldezEsMn0pJCIsIm1heExlbmd0aCI6M30sImlkX21hc2siOnsicGF0dGVybiI6Il4oWzAtN11bYS1mQS1GMC05XXsyfXxbYS1mQS1GMC05XXsxLDJ9KSQiLCJtYXhMZW5ndGgiOjN9fX0seyJwcm9wZXJ0aWVzIjp7ImlkX2Zvcm1hdCI6eyJlbnVtIjpbMV19LCJpZCI6eyJwYXR0ZXJuIjoiXihbMC0xXVthLWZBLUYwLTldezd9fFthLWZBLUYwLTldezEsN30pJCIsIm1heExlbmd0aCI6OH0sImlkX21hc2siOnsicGF0dGVybiI6Il4oWzAtMV1bYS1mQS1GMC05XXs3fXxbYS1mQS1GMC05XXsxLDd9KSQiLCJtYXhMZW5ndGgiOjh9fX1dfX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicmVxdWlyZWQiOlsiY2huIiwiaWRfZm9ybWF0IiwiaWQiLCJpZF9tYXNrIl19LCJjYW5fc2lnbmFsIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7InR5cGUiOnsidGl0bGUiOiJTaWduYWwgdHlwZSIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJVbnNpZ25lZCIsImVudW0iOlswXX1dfSwiYnl0ZW9yZGVyIjp7InRpdGxlIjoiU2lnbmFsIGJ5dGVvcmRlciIsImRlc2NyaXB0aW9uIjoiQ2FuIGJlIE1vdG9yb2xhIChiaWcgZW5kaWFuKSBvciBJbnRlbCAobGl0dGxlIGVuZGlhbikiLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjEsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiTW90b3JvbGEiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkludGVsIiwiZW51bSI6WzFdfV19LCJiaXRwb3MiOnsidGl0bGUiOiJTaWduYWwgYml0IHBvc2l0aW9uIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJtaW5pbXVtIjowLCJtYXhpbXVtIjo1MTJ9LCJsZW5ndGgiOnsidGl0bGUiOiJTaWduYWwgYml0IGxlbmd0aCIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwibWluaW11bSI6MCwibWF4aW11bSI6NjR9LCJmYWN0b3IiOnsidGl0bGUiOiJTaWduYWwgc2NhbGluZyIsInR5cGUiOiJudW1iZXIiLCJkZWZhdWx0IjowfSwib2Zmc2V0Ijp7InRpdGxlIjoiU2lnbmFsIG9mZnNldCIsInR5cGUiOiJudW1iZXIiLCJkZWZhdWx0IjowfX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicmVxdWlyZWQiOlsidHlwZSIsImJ5dGVvcmRlciIsImJpdHBvcyIsImxlbmd0aCIsImZhY3RvciIsIm9mZnNldCJdfSwiY2FuX2NvbnRyb2xfc3RhcnRzdG9wIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im1lc3NhZ2UiOnsidGl0bGUiOiJNZXNzYWdlIiwiJHJlZiI6IiMvZGVmaW5pdGlvbnMvY2FuX21lc3NhZ2UifSwic2lnbmFsIjp7InRpdGxlIjoiU2lnbmFsIiwiJHJlZiI6IiMvZGVmaW5pdGlvbnMvY2FuX3NpZ25hbCJ9LCJ0cmlnZ2VyX2hpZ2giOnsidGl0bGUiOiJUcmlnZ2VyIGhpZ2ggKGRlYykiLCJ0eXBlIjoibnVtYmVyIiwiZGVmYXVsdCI6MH0sInRyaWdnZXJfbG93Ijp7InRpdGxlIjoiVHJpZ2dlciBsb3cgKGRlYykiLCJ0eXBlIjoibnVtYmVyIiwiZGVmYXVsdCI6MH19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInJlcXVpcmVkIjpbIm1lc3NhZ2UiLCJzaWduYWwiLCJ0cmlnZ2VyX2hpZ2giLCJ0cmlnZ2VyX2xvdyJdfSwiY2FuX2ZpbHRlcl9pZCI6eyJ0aXRsZSI6IklEIGZpbHRlcnMiLCJ0eXBlIjoiYXJyYXkiLCJtaW5JdGVtcyI6MSwiaXRlbXMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsibmFtZSI6eyJ0aXRsZSI6Ik5hbWUiLCJkZXNjcmlwdGlvbiI6Ik9wdGlvbmFsIGZpbHRlciBuYW1lLiIsInR5cGUiOiJzdHJpbmciLCJwYXR0ZXJuIjoiXlsgLX5dKiQiLCJtYXhMZW5ndGgiOjE2fSwic3RhdGUiOnsidGl0bGUiOiJTdGF0ZSIsImRlc2NyaXB0aW9uIjoiRGlzYWJsZWQgZmlsdGVycyBhcmUgaWdub3JlZC4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjEsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRGlzYWJsZSIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRW5hYmxlIiwiZW51bSI6WzFdfV19LCJ0eXBlIjp7InRpdGxlIjoiVHlwZSIsImRlc2NyaXB0aW9uIjoiQWN0aW9uIG9uIG1hdGNoLCBhY2NlcHQgb3IgcmVqZWN0IG1lc3NhZ2UuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidGl0bGUiOiJBY2NlcHRhbmNlIiwiZW51bSI6WzBdfSx7InRpdGxlIjoiUmVqZWN0aW9uIiwiZW51bSI6WzFdfV19LCJpZF9mb3JtYXQiOnsidGl0bGUiOiJJRCBmb3JtYXQiLCJkZXNjcmlwdGlvbiI6IkZpbHRlciBJRCBmb3JtYXQuIEZpbHRlcnMgYXBwbHkgdG8gbWVzc2FnZXMgd2l0aCBtYXRjaGluZyBJRCBmb3JtYXQuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidGl0bGUiOiJTdGFuZGFyZCAoMTEtYml0KSIsImVudW0iOlswXX0seyJ0aXRsZSI6IkV4dGVuZGVkICgyOS1iaXQpIiwiZW51bSI6WzFdfV19LCJtZXRob2QiOnsidGl0bGUiOiJGaWx0ZXIgbWV0aG9kIiwiZGVzY3JpcHRpb24iOiJUaGUgZmlsdGVyIElEIG1hdGNoaW5nIG1lY2hhbmlzbS4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0aXRsZSI6IlJhbmdlIiwiZW51bSI6WzBdLCJkZXNjcmlwdGlvbiI6IklEIHJhbmdlcyJ9LHsidGl0bGUiOiJNYXNrIiwiZW51bSI6WzFdLCJkZXNjcmlwdGlvbiI6IklEIG1hc2tpbmcifV19LCJmMSI6eyJ0aXRsZSI6IkZyb20gKHJhbmdlKSAvIElEIChtYXNrKSAoSEVYKSIsImRlc2NyaXB0aW9uIjoiSWYgZmlsdGVyIG1ldGhvZCBpcyBSYW5nZSwgdGhpcyBmaWVsZCBkZWZpbmVzIHRoZSBzdGFydCBvZiByYW5nZS4gSWYgZmlsdGVyIG1ldGhvZCBpcyBNYXNrLCB0aGlzIGZpZWxkIGRlZmluZXMgdGhlIGZpbHRlciBJRC4iLCJ0eXBlIjoic3RyaW5nIiwicGF0dGVybiI6Il5bYS1mQS1GMC05XSskIiwibWF4TGVuZ3RoIjo4LCJkZWZhdWx0IjoiMCJ9LCJmMiI6eyJ0aXRsZSI6IlRvIChyYW5nZSkgLyBtYXNrIChtYXNrKSAoSEVYKSIsImRlc2NyaXB0aW9uIjoiSWYgZmlsdGVyIG1ldGhvZCBpcyBSYW5nZSwgdGhpcyBmaWVsZCBkZWZpbmVzIHRoZSBlbmQgb2YgcmFuZ2UuIElmIGZpbHRlciBtZXRob2QgaXMgTWFzaywgdGhpcyBmaWVsZCBkZWZpbmVzIHRoZSBmaWx0ZXIgbWFzay4iLCJ0eXBlIjoic3RyaW5nIiwicGF0dGVybiI6Il5bYS1mQS1GMC05XSskIiwibWF4TGVuZ3RoIjo4LCJkZWZhdWx0IjoiN0ZGIn19LCJkZXBlbmRlbmNpZXMiOnsidHlwZSI6eyJvbmVPZiI6W3sicHJvcGVydGllcyI6eyJ0eXBlIjp7ImVudW0iOlswXX0sInByZXNjYWxlcl90eXBlIjp7InRpdGxlIjoiUHJlc2NhbGluZyB0eXBlIiwiZGVzY3JpcHRpb24iOiJTZWxlY3QgcHJlc2NhbGluZyB0eXBlLiBQcmVzY2FsZSBieSBtZXNzYWdlIGNvdW50LCB0aW1lIG9yIGRhdGEuIFNlbGVjdCBOb25lIHRvIGRpc2FibGUgcHJlc2NhbGluZy4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0aXRsZSI6Ik5vbmUiLCJlbnVtIjpbMF19LHsidGl0bGUiOiJDb3VudCIsImVudW0iOlsxXX0seyJ0aXRsZSI6IlRpbWUiLCJlbnVtIjpbMl19LHsidGl0bGUiOiJEYXRhIiwiZW51bSI6WzNdfV19fSwiZGVwZW5kZW5jaWVzIjp7InByZXNjYWxlcl90eXBlIjp7Im9uZU9mIjpbeyJwcm9wZXJ0aWVzIjp7InByZXNjYWxlcl90eXBlIjp7ImVudW0iOlswXX19fSx7InByb3BlcnRpZXMiOnsicHJlc2NhbGVyX3R5cGUiOnsiZW51bSI6WzFdfSwicHJlc2NhbGVyX3ZhbHVlIjp7InRpdGxlIjoiQ291bnQiLCJ0eXBlIjoiaW50ZWdlciIsImRlc2NyaXB0aW9uIjoiQ291bnQgcHJlc2NhbGVyIHZhbHVlLiBFeGFtcGxlOiBTZXQgdG8gMiB0byBzYW1wbGUgYSBtZXNzYWdlIHdpdGggYSBzcGVjaWZpYyBJRCBldmVyeSBzZWNvbmQgdGltZS4iLCJkZWZhdWx0IjoxLCJtaW5pbXVtIjoxLCJtYXhpbXVtIjoyNTZ9fSwicmVxdWlyZWQiOlsicHJlc2NhbGVyX3ZhbHVlIl19LHsicHJvcGVydGllcyI6eyJwcmVzY2FsZXJfdHlwZSI6eyJlbnVtIjpbMl19LCJwcmVzY2FsZXJfdmFsdWUiOnsidGl0bGUiOiJUaW1lIiwiZGVzY3JpcHRpb24iOiJUaW1lIHByZXNjYWxlciB2YWx1ZSBpbiBtaWxsaXNlY29uZHMuIEV4YW1wbGU6IFNldCB0byAxMDAwIHRvIHNhbXBsZSBhIG1lc3NhZ2Ugd2l0aCBhIHNwZWNpZmljIElEIHdpdGggYSBtaW5pbXVtIHBlcmlvZCB0aW1lIG9mIDEgc2Vjb25kLiBOb3RlIHRoYXQgbWVzc2FnZXMgYXJlIG5vdCByZXNhbXBsZWQgdG8gYSBzcGVjaWZpYyBmaXhlZCBwZXJpb2QgdGltZS4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjEsIm1pbmltdW0iOjEsIm1heGltdW0iOjQxOTQzMDR9fSwicmVxdWlyZWQiOlsicHJlc2NhbGVyX3ZhbHVlIl19LHsicHJvcGVydGllcyI6eyJwcmVzY2FsZXJfdHlwZSI6eyJlbnVtIjpbM119LCJwcmVzY2FsZXJfdmFsdWUiOnsidGl0bGUiOiJNYXNrIiwiZGVzY3JpcHRpb24iOiJEYXRhIHByZXNjYWxlciBtYXNrIHZhbHVlIGluIGhleC4gRWFjaCBiaXQgY29ycmVzcG9uZHMgdG8gYSBkYXRhIGJ5dGUgKHVwIHRvIDY0IGJ5dGVzKS4gTGVhdmUgZW1wdHkgdG8gZGlzYWJsZSB0aGUgbWFzayAodHJpZ2dlcnMgb24gYW55IGRhdGEgY2hhbmdlKS4gRXhhbXBsZSAxOiBTZXQgdG8gRkYgKDBiMTExMTExMTEpIHRvIHNhbXBsZSBhIG1lc3NhZ2Ugd2l0aCBhIHNwZWNpZmljIElEIGlmIGFueSBvZiB0aGUgZmlyc3QgOCBkYXRhIGJ5dGVzIGNoYW5nZS4gRXhhbXBsZSAyOiBTZXQgdG8gMDMgKDBiMDAwMDAwMTEpIHRvIHNhbXBsZSBpZiBhbnkgb2YgdGhlIHR3byBmaXJzdCBkYXRhIGJ5dGVzIGNoYW5nZS4gRXhhbXBsZSAzOiBTZXQgdG8gOSAoMGIwMDAwMTAwMSkgdG8gc2FtcGxlIGlmIGFueSBvZiB0aGUgZmlyc3Qgb3IgZm91cnRoIGRhdGEgYnl0ZXMgY2hhbmdlLiIsInR5cGUiOiJzdHJpbmciLCJkZWZhdWx0IjoiRkYiLCJwYXR0ZXJuIjoiXlthLWZBLUYwLTldKiQiLCJtYXhMZW5ndGgiOjE2fX19XX19LCJyZXF1aXJlZCI6WyJwcmVzY2FsZXJfdHlwZSJdfSx7InByb3BlcnRpZXMiOnsidHlwZSI6eyJlbnVtIjpbMV19fX1dfX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicGF0dGVyblByb3BlcnRpZXMiOnsicHJlc2NhbGVyX3R5cGUiOnt9LCJwcmVzY2FsZXJfdmFsdWUiOnt9fSwicmVxdWlyZWQiOlsic3RhdGUiLCJ0eXBlIiwiaWRfZm9ybWF0IiwibWV0aG9kIiwiZjEiLCJmMiJdfX0sImNhbl9nZW5lcmFsIjp7InRpdGxlIjoiR2VuZXJhbCIsImRlc2NyaXB0aW9uIjoiQ0FOIGJ1cyBnZW5lcmFsIGNvbmZpZ3VyYXRpb24iLCJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJyeF9zdGF0ZSI6eyJ0aXRsZSI6IlJlY2VwdGlvbiAocngpIGluaXRpYWwgc3RhdGUiLCJkZXNjcmlwdGlvbiI6IlRoZSBpbml0aWFsIHN0YXRlIG9mIENBTi1idXMgcmVjZXB0aW9uLiBDYW4gYmUgY2hhbmdlZCB1c2luZyB0aGUgY29udHJvbCBzaWduYWwuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjoxLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkRpc2FibGUiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkVuYWJsZSIsImVudW0iOlsxXX1dfSwidHhfc3RhdGUiOnsidGl0bGUiOiJUcmFuc21pc3Npb24gKHR4KSBpbml0aWFsIHN0YXRlIiwiZGVzY3JpcHRpb24iOiJUaGUgaW5pdGlhbCBzdGF0ZSBvZiBDQU4tYnVzIHRyYW5zbWlzc2lvbnMuIENhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBjb250cm9sIHNpZ25hbC4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjEsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRGlzYWJsZSIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRW5hYmxlIiwiZW51bSI6WzFdfV19fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJyZXF1aXJlZCI6WyJyeF9zdGF0ZSIsInR4X3N0YXRlIl19LCJjYW5fY29udHJvbCI6eyJ0aXRsZSI6IkNvbnRyb2wiLCJkZXNjcmlwdGlvbiI6IkNvbnRyb2wgc2lnbmFsIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiY29udHJvbF9yeF9zdGF0ZSI6eyJ0aXRsZSI6IkNvbnRyb2wgcmVjZXB0aW9uIChyeCkgc3RhdGUiLCJkZXNjcmlwdGlvbiI6IkNvbnRyb2wgQ0FOLWJ1cyByZWNlcHRpb24gc3RhdGUgKGluY2x1ZGluZyBsb2dnaW5nKSAiLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRGlzYWJsZSIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRW5hYmxlIiwiZW51bSI6WzFdfV19LCJjb250cm9sX3R4X3N0YXRlIjp7InRpdGxlIjoiQ29udHJvbCB0cmFuc21pc3Npb24gKHR4KSBzdGF0ZSIsImRlc2NyaXB0aW9uIjoiQ29udHJvbCBDQU4tYnVzIHRyYW5zbWlzc2lvbiBzdGF0ZSAoaW5jbHVkaW5nIGxvZ2dpbmcpICIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJEaXNhYmxlIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJFbmFibGUiLCJlbnVtIjpbMV19XX0sInN0YXJ0Ijp7InRpdGxlIjoiU3RhcnQiLCIkcmVmIjoiIy9kZWZpbml0aW9ucy9jYW5fY29udHJvbF9zdGFydHN0b3AifSwic3RvcCI6eyJ0aXRsZSI6IlN0b3AiLCIkcmVmIjoiIy9kZWZpbml0aW9ucy9jYW5fY29udHJvbF9zdGFydHN0b3AifX0sInJlcXVpcmVkIjpbImNvbnRyb2xfcnhfc3RhdGUiLCJjb250cm9sX3R4X3N0YXRlIiwic3RhcnQiLCJzdG9wIl19LCJjYW4iOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiZ2VuZXJhbCI6eyIkcmVmIjoiIy9kZWZpbml0aW9ucy9jYW5fZ2VuZXJhbCJ9LCJwaHkiOnsidGl0bGUiOiJQaHlzaWNhbCAoQ0FOIGJ1cyBsb3ctbGV2ZWwpIiwiZGVzY3JpcHRpb24iOiJDQU4gYnVzIGxvdy1sZXZlbCBjb25maWd1cmF0aW9uIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsibW9kZSI6eyJ0aXRsZSI6Ik1vZGUiLCJkZXNjcmlwdGlvbiI6IkRldmljZSBDQU4gYnVzIG1vZGUuIENvbmZpZ3VyZXMgaG93IHRoZSBkZXZpY2UgaW50ZXJhY3RzIHdpdGggdGhlIGJ1cy4gSW4gTm9ybWFsIG1vZGUsIHRoZSBkZXZpY2UgY2FuIHJlY2VpdmUsIGFja25vd2xlZGdlIGFuZCB0cmFuc21pdCBmcmFtZXMuIEluIFJlc3RyaWN0ZWQgbW9kZSwgdGhlIGRldmljZSBjYW4gcmVjZWl2ZSBhbmQgYWNrbm93bGVkZ2UsIGJ1dCBub3QgdHJhbnNtaXQgZnJhbWVzLiBJbiBCdXMgTW9uaXRvcmluZyBtb2RlLCB0aGUgZGV2aWNlIGNhbiByZWNlaXZlLCBidXQgbm90IGFja25vd2xlZGdlIG9yIHRyYW5zbWl0IGZyYW1lcy4gSXQgaXMgcmVjb21tZW5kZWQgdG8gYWx3YXlzIHVzZSB0aGUgbW9zdCByZXN0cmljdGl2ZSBtb2RlIHBvc3NpYmxlLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MSwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJOb3JtYWwgKHJlY2VpdmUsIGFja25vd2xlZGdlIGFuZCB0cmFuc21pdCkiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IlJlc3RyaWN0ZWQgKHJlY2VpdmUgYW5kIGFja25vd2xlZGdlKSIsImVudW0iOlsxXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiTW9uaXRvcmluZyAocmVjZWl2ZSBvbmx5KSIsImVudW0iOlsyXX1dfSwicmV0cmFuc21pc3Npb24iOnsidGl0bGUiOiJBdXRvbWF0aWMgcmV0cmFuc21pc3Npb24iLCJkZXNjcmlwdGlvbiI6IlJldHJhbnNtaXNzaW9uIG9mIGZyYW1lcyB0aGF0IGhhdmUgbG9zdCBhcmJpdHJhdGlvbiBvciB0aGF0IGhhdmUgYmVlbiBkaXN0dXJiZWQgYnkgZXJyb3JzIGR1cmluZyB0cmFuc21pc3Npb24uIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjoxLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkRpc2FibGUiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkVuYWJsZSIsImVudW0iOlsxXX1dfSwiZmRfc3BlYyI6eyJ0aXRsZSI6IkNBTiBGRCBzcGVjaWZpY2F0aW9uIiwiZGVzY3JpcHRpb24iOiJDb25maWd1cmVzIHRoZSBDQU4gRkQgc3BlY2lmaWNhdGlvbiB1c2VkIGJ5IHRoZSBkZXZpY2UuIFNoYWxsIG1hdGNoIHRoZSBzcGVjaWZpY2F0aW9uIHVzZWQgYnkgdGhlIENBTiBidXMgbmV0d29yay4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiIElTTyBDQU4gRkQgKDExODk4LTEpIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJub24tSVNPIENBTiBGRCAoQm9zY2ggVjEuMC4pIiwiZW51bSI6WzFdfV19LCJiaXRfcmF0ZV9jZmdfbW9kZSI6eyJ0aXRsZSI6IkJpdC1yYXRlIGNvbmZpZ3VyYXRpb24gbW9kZSIsImRlc2NyaXB0aW9uIjoiQ29uZmlndXJlcyBob3cgdGhlIENBTiBidXMgYml0LXJhdGUgaXMgc2V0LiBNb2RlcyBBdXRvLWRldGVjdCBhbmQgQml0LXJhdGUgc3VwcG9ydCBhbGwgc3RhbmRhcmQgYml0LXJhdGVzLiBOb24tc3RhbmRhcmQgYml0LXJhdGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc2V0IHVzaW5nIEJpdC10aW1pbmcuIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNldCB0aGUgYml0LXJhdGUgbWFudWFsbHkgaWYgaXQgaXMga25vd24uIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidGl0bGUiOiJBdXRvLWRldGVjdCIsImVudW0iOlswXX0seyJ0aXRsZSI6IkJpdC1yYXRlIChzaW1wbGUpIiwiZW51bSI6WzFdfSx7InRpdGxlIjoiQml0LXRpbWluZyAoYWR2YW5jZWQpIiwiZW51bSI6WzJdfV19fSwiZGVwZW5kZW5jaWVzIjp7ImJpdF9yYXRlX2NmZ19tb2RlIjp7Im9uZU9mIjpbeyJwcm9wZXJ0aWVzIjp7ImJpdF9yYXRlX2NmZ19tb2RlIjp7ImVudW0iOlswXX19fSx7InByb3BlcnRpZXMiOnsiYml0X3JhdGVfY2ZnX21vZGUiOnsiZW51bSI6WzFdfSwiYml0X3JhdGVfc3RkIjp7InRpdGxlIjoiQml0LXJhdGUgc3RhbmRhcmQiLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjI1MDAwMCwib25lT2YiOlt7InRpdGxlIjoiNUsiLCJlbnVtIjpbNTAwMF19LHsidGl0bGUiOiIxMEsiLCJlbnVtIjpbMTAwMDBdfSx7InRpdGxlIjoiMjBLIiwiZW51bSI6WzIwMDAwXX0seyJ0aXRsZSI6IjMzLjMzM0siLCJlbnVtIjpbMzMzMzNdfSx7InRpdGxlIjoiNDcuNjE5SyIsImVudW0iOls0NzYxOV19LHsidGl0bGUiOiI1MEsiLCJlbnVtIjpbNTAwMDBdfSx7InRpdGxlIjoiODMuMzMzSyIsImVudW0iOls4MzMzM119LHsidGl0bGUiOiI5NS4yMzhLIiwiZW51bSI6Wzk1MjM4XX0seyJ0aXRsZSI6IjEwMEsiLCJlbnVtIjpbMTAwMDAwXX0seyJ0aXRsZSI6IjEyNUsiLCJlbnVtIjpbMTI1MDAwXX0seyJ0aXRsZSI6IjI1MEsiLCJlbnVtIjpbMjUwMDAwXX0seyJ0aXRsZSI6IjUwMEsiLCJlbnVtIjpbNTAwMDAwXX0seyJ0aXRsZSI6IjgwMEsiLCJlbnVtIjpbODAwMDAwXX0seyJ0aXRsZSI6IjFNIiwiZW51bSI6WzEwMDAwMDBdfV19LCJiaXRfcmF0ZV9mZCI6eyJ0aXRsZSI6IkJpdC1yYXRlIEZEIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjoxMDAwMDAwLCJvbmVPZiI6W3sidGl0bGUiOiIxTSIsImVudW0iOlsxMDAwMDAwXX0seyJ0aXRsZSI6IjJNIiwiZW51bSI6WzIwMDAwMDBdfSx7InRpdGxlIjoiNE0iLCJlbnVtIjpbNDAwMDAwMF19XX19LCJyZXF1aXJlZCI6WyJiaXRfcmF0ZV9zdGQiLCJiaXRfcmF0ZV9mZCJdfSx7InByb3BlcnRpZXMiOnsiYml0X3JhdGVfY2ZnX21vZGUiOnsiZW51bSI6WzJdfSwiYml0X3JhdGVfc3RkIjp7InRpdGxlIjoiQml0LXRpbWluZyBzdGFuZGFyZCIsInR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7ImJycCI6eyJ0aXRsZSI6IkJSUCAoQml0IFJhdGUgUHJlc2NhbGVyKSIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MiwibWluaW11bSI6MX0sInNlZzEiOnsidGl0bGUiOiJTRUcxIChUaW1lIFNlZ21lbnQgMSApIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0Ijo2MywibWluaW11bSI6MX0sInNlZzIiOnsidGl0bGUiOiJTRUcyIChUaW1lIFNlZ21lbnQgMikiLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjE2LCJtaW5pbXVtIjoyfSwic2p3Ijp7InRpdGxlIjoiU0pXIChTeW5jaHJvbml6YXRpb24gSnVtcCBXaWR0aCkiLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjQsIm1pbmltdW0iOjAsIm1heGltdW0iOjR9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJyZXF1aXJlZCI6WyJicnAiLCJzZWcxIiwic2VnMiIsInNqdyJdfSwiYml0X3JhdGVfZmQiOnsidGl0bGUiOiJCaXQtdGltaW5nIEZEIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiYnJwIjp7InRpdGxlIjoiQlJQIChCaXQgUmF0ZSBQcmVzY2FsZXIpIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjoxLCJtaW5pbXVtIjoxfSwic2VnMSI6eyJ0aXRsZSI6IlNFRzEgKFRpbWUgU2VnbWVudCAxKSIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MzEsIm1pbmltdW0iOjF9LCJzZWcyIjp7InRpdGxlIjoiU0VHMiAoVGltZSBTZWdtZW50IDIpIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0Ijo4LCJtaW5pbXVtIjoyfSwic2p3Ijp7InRpdGxlIjoiU0pXIChTeW5jaHJvbml6YXRpb24gSnVtcCBXaWR0aCkiLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjQsIm1pbmltdW0iOjAsIm1heGltdW0iOjR9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJyZXF1aXJlZCI6WyJicnAiLCJzZWcxIiwic2VnMiIsInNqdyJdfX0sInJlcXVpcmVkIjpbImJpdF9yYXRlX3N0ZCIsImJpdF9yYXRlX2ZkIl19XX19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInBhdHRlcm5Qcm9wZXJ0aWVzIjp7ImJpdF9yYXRlX3N0ZCI6e30sImJpdF9yYXRlX2ZkIjp7fX0sInJlcXVpcmVkIjpbIm1vZGUiLCJyZXRyYW5zbWlzc2lvbiIsImZkX3NwZWMiLCJiaXRfcmF0ZV9jZmdfbW9kZSJdfSwiZmlsdGVyIjp7InRpdGxlIjoiUmVjZWl2ZSBmaWx0ZXJzIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsicmVtb3RlX2ZyYW1lcyI6eyJ0aXRsZSI6IkZpbHRlciByZW1vdGUgcmVxdWVzdCBmcmFtZXMiLCJkZXNjcmlwdGlvbiI6IkNvbnRyb2xzIGlmIHJlbW90ZSByZXF1ZXN0IGZyYW1lcyBhcmUgZm9yd2FyZGVkIHRvIHRoZSBtZXNzYWdlIGZpbHRlcnMuIElmIGBSZWplY3RgIGlzIHNlbGVjdGVkLCByZW1vdGUgcmVxdWVzdCBmcmFtZXMgYXJlIGRpc2NhcmRlZCBiZWZvcmUgdGhleSByZWFjaCB0aGUgbWVzc2FnZSBmaWx0ZXJzLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJSZWplY3QiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkFjY2VwdCIsImVudW0iOlsxXX1dfSwiaWQiOnsiZGVzY3JpcHRpb24iOiJGaWx0ZXJzIGFyZSBjaGVja2VkIHNlcXVlbnRpYWxseSwgZXhlY3V0aW9uIHN0b3BzIHdpdGggdGhlIGZpcnN0IG1hdGNoaW5nIGZpbHRlciBlbGVtZW50LiBNYXggMTI4IDExLWJpdCBmaWx0ZXJzIGFuZCA2NCAyOS1iaXQgZmlsdGVycy4iLCJtYXhJdGVtcyI6MTkyLCIkcmVmIjoiIy9kZWZpbml0aW9ucy9jYW5fZmlsdGVyX2lkIn19LCJyZXF1aXJlZCI6WyJyZW1vdGVfZnJhbWVzIiwiaWQiXX0sInRyYW5zbWl0Ijp7InRpdGxlIjoiVHJhbnNtaXQgbWVzc2FnZXMiLCJkZXNjcmlwdGlvbiI6Ikxpc3Qgb2YgQ0FOIGJ1cyBtZXNzYWdlcyB0cmFuc21pdHRlZCBieSB0aGUgZGV2aWNlLiBSZXF1aXJlcyBhIENBTi1idXMgcGh5c2ljYWwgbW9kZSBzdXBwb3J0aW5nIHRyYW5zbWlzc2lvbnMuIiwidHlwZSI6ImFycmF5IiwibWF4SXRlbXMiOjY0LCJpdGVtcyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJuYW1lIjp7InRpdGxlIjoiTmFtZSIsImRlc2NyaXB0aW9uIjoiT3B0aW9uYWwgdHJhbnNtaXQgbWVzc2FnZSBuYW1lLiIsInR5cGUiOiJzdHJpbmciLCJwYXR0ZXJuIjoiXlsgLX5dKiQiLCJtYXhMZW5ndGgiOjE2fSwic3RhdGUiOnsidGl0bGUiOiJTdGF0ZSIsImRlc2NyaXB0aW9uIjoiRGlzYWJsZWQgdHJhbnNtaXQgbWVzc2FnZXMgYXJlIGlnbm9yZWQuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjoxLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkRpc2FibGUiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkVuYWJsZSIsImVudW0iOlsxXX1dfSwiaWRfZm9ybWF0Ijp7InRpdGxlIjoiSUQgRm9ybWF0IiwiZGVzY3JpcHRpb24iOiJJRCBmb3JtYXQgb2YgdGhlIHRyYW5zbWl0IG1lc3NhZ2UuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IlN0YW5kYXJkICgxMS1iaXQpIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJFeHRlbmRlZCAoMjktYml0KSIsImVudW0iOlsxXX1dfSwiZnJhbWVfZm9ybWF0Ijp7InRpdGxlIjoiRnJhbWUgZm9ybWF0IiwiZGVzY3JpcHRpb24iOiJGcmFtZSBmb3JtYXQgb2YgdGhlIHRyYW5zbWl0IG1lc3NhZ2UuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IlN0YW5kYXJkIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJTdGFuZGFyZCBSVFIiLCJlbnVtIjpbMl19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkZEIiwiZW51bSI6WzFdfV19LCJicnMiOnsidGl0bGUiOiJCaXQtUmF0ZSBTd2l0Y2giLCJkZXNjcmlwdGlvbiI6IkRldGVybWluZXMgaWYgYW4gRkQgbWVzc2FnZSBpcyB0cmFuc21pdHRlZCB1c2luZyBhIHN3aXRjaGVkIGJpdC1yYXRlLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MH0sImxvZyI6eyJ0aXRsZSI6IkluY2x1ZGUgaW4gbG9nIiwiZGVzY3JpcHRpb24iOiJEZXRlcm1pbmVzIGlmIHRoZSB0cmFuc21pdHRlZCBtZXNzYWdlIGlzIGluY2x1ZGVkIGluIHRoZSBsb2cgZmlsZS4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRGlzYWJsZSIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRW5hYmxlIiwiZW51bSI6WzFdfV19LCJwZXJpb2QiOnsidGl0bGUiOiJQZXJpb2QgKDEwIG1zIHN0ZXBzKSIsImRlc2NyaXB0aW9uIjoiVGltZSBwZXJpb2Qgb2YgdGhlIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiAwOiBzaW5nbGUgc2hvdCwgPjA6IHBlcmlvZGljLiBVbml0IGlzIG1zLiIsInR5cGUiOiJpbnRlZ2VyIiwibWluaW11bSI6MCwibWF4aW11bSI6NDI5NDk2NzI5MCwibXVsdGlwbGVPZiI6MTB9LCJkZWxheSI6eyJ0aXRsZSI6IkRlbGF5ICgxMCBtcyBzdGVwcykiLCJkZXNjcmlwdGlvbiI6Ik9mZnNldCBtZXNzYWdlIHdpdGhpbiB0aGUgcGVyaW9kIG9yIGRlbGF5IGEgc2luZ2xlIHNob3QgbWVzc2FnZS4gSWYgbXVsdGlwbGUgbWVzc2FnZXMgYXJlIHRyYW5zbWl0dGVkIGJ5IHRoZSBkZXZpY2UsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9mZnNldCBlYWNoIHNlcGFyYXRlbHkgdG8gcmVkdWNlIHBlYWsgbG9hZCBvbiBidXMuIElmIHBlcmlvZCA+IDAsIGRlbGF5IDwgcGVyaW9kLiBJZiBzaW5nbGUtc2hvdCwgZGVsYXkgY2FuIGJlIHVwIHRvIG1heCB2YWx1ZS4gVW5pdCBpcyBtcy4iLCJ0eXBlIjoiaW50ZWdlciIsIm1pbmltdW0iOjAsIm1heGltdW0iOjQyOTQ5NjcyOTAsIm11bHRpcGxlT2YiOjEwfSwiaWQiOnsidGl0bGUiOiJNZXNzYWdlIElEIChoZXgpIiwiZGVzY3JpcHRpb24iOiJJRCBvZiBtZXNzYWdlIHRvIHRyYW5zbWl0IGluIGhleC4gRXhhbXBsZTogMUZGLiIsInR5cGUiOiJzdHJpbmcifSwiZGF0YSI6eyJ0aXRsZSI6Ik1lc3NhZ2VzIERhdGEgKGhleCkiLCJkZXNjcmlwdGlvbiI6IkRhdGEgYnl0ZXMgb2YgbWVzc2FnZSB0byB0cmFuc21pdC4gUlRSIGZyYW1lcyBvbmx5IHVzZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGRvIGRldGVybWluZSB0aGUgRExDLiBFeGFtcGxlOiAwMTAyMDMwNCBvciAwMTAyMDMwNDA1MDYwNzA4LiAiLCJ0eXBlIjoic3RyaW5nIiwicGF0dGVybiI6Il4oW2EtZkEtRjAtOV17Mn0pezAsNjR9JCIsIm1heExlbmd0aCI6MTI4fX0sImRlcGVuZGVuY2llcyI6eyJpZF9mb3JtYXQiOnsib25lT2YiOlt7InByb3BlcnRpZXMiOnsiaWRfZm9ybWF0Ijp7ImVudW0iOlswXX0sImlkIjp7InBhdHRlcm4iOiJeKFswLTddW2EtZkEtRjAtOV17Mn18W2EtZkEtRjAtOV17MSwyfSkkIiwibWF4TGVuZ3RoIjozfX19LHsicHJvcGVydGllcyI6eyJpZF9mb3JtYXQiOnsiZW51bSI6WzFdfSwiaWQiOnsicGF0dGVybiI6Il4oWzAtMV1bYS1mQS1GMC05XXs3fXxbYS1mQS1GMC05XXsxLDd9KSQiLCJtYXhMZW5ndGgiOjh9fX1dfSwiZnJhbWVfZm9ybWF0Ijp7Im9uZU9mIjpbeyJwcm9wZXJ0aWVzIjp7ImZyYW1lX2Zvcm1hdCI6eyJlbnVtIjpbMF19LCJicnMiOnsib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJEaXNhYmxlIiwiZW51bSI6WzBdfV19LCJkYXRhIjp7InBhdHRlcm4iOiJeKFthLWZBLUYwLTldezJ9KXswLDh9JCIsIm1heExlbmd0aCI6MTZ9fX0seyJwcm9wZXJ0aWVzIjp7ImZyYW1lX2Zvcm1hdCI6eyJlbnVtIjpbMl19LCJicnMiOnsib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJEaXNhYmxlIiwiZW51bSI6WzBdfV19LCJkYXRhIjp7InBhdHRlcm4iOiJeKFthLWZBLUYwLTldezJ9KXswLDh9JCIsIm1heExlbmd0aCI6MTZ9fX0seyJwcm9wZXJ0aWVzIjp7ImZyYW1lX2Zvcm1hdCI6eyJlbnVtIjpbMV19LCJicnMiOnsib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJEaXNhYmxlIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJFbmFibGUiLCJlbnVtIjpbMV19XX0sImRhdGEiOnsicGF0dGVybiI6Il4oW2EtZkEtRjAtOV17Mn0pezAsNjR9JCIsIm1heExlbmd0aCI6MTI4fX19XX19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInJlcXVpcmVkIjpbInN0YXRlIiwiaWRfZm9ybWF0IiwiZnJhbWVfZm9ybWF0IiwiYnJzIiwibG9nIiwicGVyaW9kIiwiZGVsYXkiLCJpZCIsImRhdGEiXX19LCJoZWFydGJlYXQiOnsidGl0bGUiOiJIZWFydGJlYXQiLCJkZXNjcmlwdGlvbiI6IlBlcmlvZGljIGhlYXJ0YmVhdCAoMSBzZWNvbmQgcGVyaW9kIHRpbWUpLiBSZXF1aXJlcyBhIENBTi1idXMgcGh5c2ljYWwgbW9kZSBzdXBwb3J0aW5nIHRyYW5zbWlzc2lvbnMuIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsic3RhdGUiOnsidGl0bGUiOiJTdGF0ZSIsImRlc2NyaXB0aW9uIjoiRW5hYmxlIHRvIHBlcmlvZGljYWxseSB0cmFuc21pdCBoZWFydGJlYXQgc2lnbmFsLiAiLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRGlzYWJsZSIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRW5hYmxlIiwiZW51bSI6WzFdfV19LCJpZF9mb3JtYXQiOnsidGl0bGUiOiJJRCBGb3JtYXQiLCJkZXNjcmlwdGlvbiI6IklEIGZvcm1hdCBvZiBoZWFydGJlYXQgbWVzc2FnZS4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjEsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiU3RhbmRhcmQgKDExLWJpdCkiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkV4dGVuZGVkICgyOS1iaXQpIiwiZW51bSI6WzFdfV19LCJpZCI6eyJ0aXRsZSI6IklEIChoZXgpIiwiZGVzY3JpcHRpb24iOiJJRCBvZiBoZWFydGJlYXQgbWVzc2FnZSBpbiBoZXguIEV4YW1wbGU6IDFGRi4iLCJ0eXBlIjoic3RyaW5nIiwiZGVmYXVsdCI6IjAwNDM1MzUzIn19LCJkZXBlbmRlbmNpZXMiOnsiaWRfZm9ybWF0Ijp7Im9uZU9mIjpbeyJwcm9wZXJ0aWVzIjp7ImlkX2Zvcm1hdCI6eyJlbnVtIjpbMF19LCJpZCI6eyJwYXR0ZXJuIjoiXihbMC03XVthLWZBLUYwLTldezJ9fFthLWZBLUYwLTldezEsMn0pJCIsIm1heExlbmd0aCI6M319fSx7InByb3BlcnRpZXMiOnsiaWRfZm9ybWF0Ijp7ImVudW0iOlsxXX0sImlkIjp7InBhdHRlcm4iOiJeKFswLTFdW2EtZkEtRjAtOV17N318W2EtZkEtRjAtOV17MSw3fSkkIiwibWF4TGVuZ3RoIjo4fX19XX19LCJyZXF1aXJlZCI6WyJzdGF0ZSIsImlkX2Zvcm1hdCIsImlkIl19LCJjb250cm9sIjp7IiRyZWYiOiIjL2RlZmluaXRpb25zL2Nhbl9jb250cm9sIn19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInJlcXVpcmVkIjpbImdlbmVyYWwiLCJwaHkiLCJmaWx0ZXIiXX0sImxpbiI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJwaHkiOnsidGl0bGUiOiJQaHlzaWNhbCAoTElOIGJ1cyBsb3ctbGV2ZWwpIiwiZGVzY3JpcHRpb24iOiJMSU4gYnVzIGxvdy1sZXZlbCBjb25maWd1cmF0aW9uIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsibW9kZSI6eyJ0aXRsZSI6Ik1vZGUiLCJkZXNjcmlwdGlvbiI6IkRldmljZSBMSU4gYnVzIG1vZGUuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IlN1YnNjcmliZXIiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IlB1Ymxpc2hlciIsImVudW0iOlsxXX1dfSwiYml0X3JhdGUiOnsidGl0bGUiOiJCaXQtcmF0ZSIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MTkyMDAsIm9uZU9mIjpbeyJ0aXRsZSI6IjI0MDAiLCJlbnVtIjpbMjQwMF19LHsidGl0bGUiOiI5NjAwIiwiZW51bSI6Wzk2MDBdfSx7InRpdGxlIjoiMTA0MDAiLCJlbnVtIjpbMTA0MDBdfSx7InRpdGxlIjoiMTkyMDAiLCJlbnVtIjpbMTkyMDBdfV19fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJyZXF1aXJlZCI6WyJtb2RlIiwiYml0X3JhdGUiXX0sImZyYW1lcyI6eyJ0aXRsZSI6IkxJTiBmcmFtZXMiLCJkZXNjcmlwdGlvbiI6IkN1c3RvbSBkZXNjcmlwdGlvbiBvZiB0aGUgZnJhbWVzIG9uIHRoZSBuZXR3b3JrLCBpZiBub3QgdXNpbmcgYXV0b21hdGljIGxlbmd0aCBhbmQvb3IgY2hlY2tzdW0uIiwidHlwZSI6ImFycmF5IiwibWF4SXRlbXMiOjY0LCJpdGVtcyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJuYW1lIjp7InRpdGxlIjoiTmFtZSIsImRlc2NyaXB0aW9uIjoiT3B0aW9uYWwgZnJhbWUgbmFtZS4iLCJ0eXBlIjoic3RyaW5nIiwicGF0dGVybiI6Il5bIC1+XSokIiwibWF4TGVuZ3RoIjoxNn0sImlkIjp7InRpdGxlIjoiRnJhbWUgSUQgKGhleCkiLCJkZXNjcmlwdGlvbiI6IklEIG9mIGZyYW1lIGluIGhleC4gRXhhbXBsZTogMEYuIiwidHlwZSI6InN0cmluZyIsInBhdHRlcm4iOiJeKFswLTddW2EtZkEtRjAtOV18W2EtZkEtRjAtOV0pJCIsIm1heExlbmd0aCI6Mn0sImxlbmd0aCI6eyJ0aXRsZSI6IkZyYW1lIExlbmd0aCAoZGVjaW1hbCkiLCJkZXNjcmlwdGlvbiI6Ikxlbmd0aCBvZiB0aGUgZnJhbWUgaW4gZGVjaW1hbC4iLCJ0eXBlIjoiaW50ZWdlciIsIm1pbmltdW0iOjEsIm1heGltdW0iOjh9LCJjaGVja3N1bV90eXBlIjp7InRpdGxlIjoiQ2hlY2tzdW0gVHlwZSIsImRlc2NyaXB0aW9uIjoiVHlwZSBvZiB0aGUgY2hlY2tzdW0gdXNlZCBvbiB0aGUgTElOIGZyYW1lLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InRpdGxlIjoiRW5oYW5jZWQiLCJlbnVtIjpbMF19LHsidGl0bGUiOiJDbGFzc2ljIiwiZW51bSI6WzFdfV19fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJyZXF1aXJlZCI6WyJpZCIsImxlbmd0aCIsImNoZWNrc3VtX3R5cGUiXX19LCJ0cmFuc21pdCI6eyJ0aXRsZSI6IkxJTiB0cmFuc21pdCBsaXN0IiwiZGVzY3JpcHRpb24iOiJMaXN0IG9mIGZyYW1lcyB0byB0cmFuc21pdCB3aGVuIGluIG1hc3RlciBtb2RlLiIsInR5cGUiOiJhcnJheSIsIm1heEl0ZW1zIjo2NCwidW5pcXVlSXRlbXMiOnRydWUsIml0ZW1zIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsidGl0bGUiOiJOYW1lIiwiZGVzY3JpcHRpb24iOiJPcHRpb25hbCB0cmFuc21pdCBydWxlIG5hbWUuIiwidHlwZSI6InN0cmluZyIsInBhdHRlcm4iOiJeWyAtfl0qJCIsIm1heExlbmd0aCI6MTZ9LCJzdGF0ZSI6eyJ0aXRsZSI6IlN0YXRlIiwiZGVzY3JpcHRpb24iOiJEaXNhYmxlZCB0cmFuc21pdCBydWxlcyBhcmUgaWdub3JlZC4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjEsIm9uZU9mIjpbeyJ0aXRsZSI6IkRpc2FibGUiLCJlbnVtIjpbMF19LHsidGl0bGUiOiJFbmFibGUiLCJlbnVtIjpbMV19XX0sImlkIjp7InRpdGxlIjoiRnJhbWUgSUQgKGhleCkiLCJ0eXBlIjoic3RyaW5nIiwicGF0dGVybiI6Il4oWzAtN11bYS1mQS1GMC05XXxbYS1mQS1GMC05XSkkIiwibWF4TGVuZ3RoIjoyfSwiZGF0YSI6eyJ0aXRsZSI6IkRhdGEgKGhleCkiLCJ0eXBlIjoic3RyaW5nIiwicGF0dGVybiI6Il4oW2EtZkEtRjAtOV17Mn0pKiQiLCJtYXhMZW5ndGgiOjE2fX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicGF0dGVyblByb3BlcnRpZXMiOnsicGVyaW9kIjp7fSwiZGVsYXkiOnt9fSwicmVxdWlyZWQiOlsic3RhdGUiLCJpZCJdfX19LCJkZXBlbmRlbmNpZXMiOnsicGh5Ijp7Im9uZU9mIjpbeyJwcm9wZXJ0aWVzIjp7InBoeSI6eyJwcm9wZXJ0aWVzIjp7Im1vZGUiOnsiZW51bSI6WzBdfX19LCJ0cmFuc21pdCI6eyJpdGVtcyI6eyJwcm9wZXJ0aWVzIjp7ImlkIjp7ImRlc2NyaXB0aW9uIjoiVW5pcXVlIElEIG9mIGZyYW1lIGluIGhleCAoYW4gSUQgbWF5IG9ubHkgb2NjdXIgb25jZSBpbiB0aGUgbGlzdCkuIEV4YW1wbGU6IDBGLiJ9LCJkYXRhIjp7ImRlc2NyaXB0aW9uIjoiRGF0YSB0byB0cmFuc21pdCBvbiByZXF1ZXN0IiwibWluTGVuZ3RoIjoyfX0sInJlcXVpcmVkIjpbImRhdGEiXX19fX0seyJwcm9wZXJ0aWVzIjp7InBoeSI6eyJwcm9wZXJ0aWVzIjp7Im1vZGUiOnsiZW51bSI6WzFdfX19LCJ0cmFuc21pdCI6eyJpdGVtcyI6eyJwcm9wZXJ0aWVzIjp7ImlkIjp7ImRlc2NyaXB0aW9uIjoiSUQgb2YgZnJhbWUgaW4gaGV4LiBFeGFtcGxlOiAwRi4ifSwiZGF0YSI6eyJkZXNjcmlwdGlvbiI6IklmIG1vcmUgdGhhbiB6ZXJvIGRhdGEgYnl0ZXMsIHRoZW4gdGhlIHRyYW5zbWl0IGlzIGEgUFVCTElTSCBmcmFtZS4gSWYgemVybyBkYXRhIGJ5dGVzLCB0aGVuIHRoZSB0cmFuc21pdCBpcyBhIFNVQlNDUklCRSBmcmFtZSBleHBlY3RpbmcgYSBzdWJzY3JpYmVyIG5vZGUgdG8gcHJvdmlkZSBkYXRhLiAiLCJtaW5MZW5ndGgiOjB9LCJwZXJpb2QiOnsidGl0bGUiOiJQZXJpb2QgKDEwIG1zIHN0ZXBzKSIsImRlc2NyaXB0aW9uIjoiVGltZSBwZXJpb2Qgb2YgdGhlIG1lc3NhZ2UgdHJhbnNtaXNzaW9uLiAwOiBzaW5nbGUgc2hvdCwgPjA6IHBlcmlvZGljLiBVbml0IGlzIG1zLiIsInR5cGUiOiJpbnRlZ2VyIiwibWluaW11bSI6MCwibWF4aW11bSI6NDI5NDk2NzI5MCwibXVsdGlwbGVPZiI6MTB9LCJkZWxheSI6eyJ0aXRsZSI6IkRlbGF5ICgxMCBtcyBzdGVwcykiLCJkZXNjcmlwdGlvbiI6Ik9mZnNldCBtZXNzYWdlIHdpdGhpbiB0aGUgcGVyaW9kIG9yIGRlbGF5IGEgc2luZ2xlIHNob3QgbWVzc2FnZS4gSWYgbXVsdGlwbGUgbWVzc2FnZXMgYXJlIHRyYW5zbWl0dGVkIGJ5IHRoZSBkZXZpY2UsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9mZnNldCBlYWNoIHNlcGFyYXRlbHkgdG8gcmVkdWNlIHBlYWsgbG9hZCBvbiBidXMuIElmIHBlcmlvZCA+IDAsIGRlbGF5IDwgcGVyaW9kLiBJZiBzaW5nbGUtc2hvdCwgZGVsYXkgY2FuIGJlIHVwIHRvIG1heCB2YWx1ZS4gVW5pdCBpcyBtcy4iLCJ0eXBlIjoiaW50ZWdlciIsIm1pbmltdW0iOjAsIm1heGltdW0iOjQyOTQ5NjcyOTAsIm11bHRpcGxlT2YiOjEwfX0sInJlcXVpcmVkIjpbInBlcmlvZCIsImRlbGF5Il19fX19XX19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInJlcXVpcmVkIjpbInBoeSJdfSwicnRjX3RvbGVyYW5jZSI6eyJ0aXRsZSI6IlRpbWUgc3luY2hyb25pemF0aW9uIHRvbGVyYW5jZSIsImRlc2NyaXB0aW9uIjoiSWYgdGhlIHRpbWUgZGlmZmVyZW5jZSBleGNlZWRzIHRoZSB0b2xlcmFuY2UsIHRoZSBpbnRlcm5hbCB0aW1lIGlzIGFicnVwdGx5IHVwZGF0ZWQuIFRoZSB1bml0IGlzIHNlY29uZHMuIiwidHlwZSI6ImludGVnZXIiLCJtaW5pbXVtIjoxLCJtYXhpbXVtIjozNjAwLCJkZWZhdWx0IjozMH19LCJwcm9wZXJ0aWVzIjp7ImdlbmVyYWwiOnsidGl0bGUiOiJHZW5lcmFsIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiZGV2aWNlIjp7InRpdGxlIjoiRGV2aWNlIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsibWV0YSI6eyJ0aXRsZSI6Ik1ldGEgZGF0YSIsImRlc2NyaXB0aW9uIjoiT3B0aW9uYWwgbWV0YSBkYXRhIHN0cmluZy4gRGlzcGxheWVkIGluIGRldmljZSBmaWxlIGFuZCBsb2cgZmlsZSBoZWFkZXJzLiBFeGFtcGxlOiBTaXRlMTsgVHJ1Y2s0OyBDb25maWdSZXYxMiIsInR5cGUiOiJzdHJpbmciLCJtaW5MZW5ndGgiOjAsIm1heExlbmd0aCI6MzAsInBhdHRlcm4iOiJeW2EtekEtWjAtOTsgXSokIn19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2V9LCJzZWN1cml0eSI6eyJ0aXRsZSI6IlNlY3VyaXR5IiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsia3B1YiI6eyJ0aXRsZSI6IlNlcnZlciBwdWJsaWMga2V5IiwiZGVzY3JpcHRpb24iOiJTZXJ2ZXIgLyB1c2VyIEVDQyBwdWJsaWMga2V5IGluIGJhc2U2NCBmb3JtYXQuIFNoYWxsIG1hdGNoIHRoZSBlbmNyeXB0aW9uIHVzZWQgZm9yIGFsbCBwcm90ZWN0ZWQgZmllbGRzLiIsInR5cGUiOiJzdHJpbmciLCJtaW5MZW5ndGgiOjAsIm1heExlbmd0aCI6MTAwLCJwYXR0ZXJuIjoiXlthLXpBLVowLTkrLz1dKiQifX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZX0sImRlYnVnIjp7InRpdGxlIjoiRGVidWciLCJkZXNjcmlwdGlvbiI6IkRlYnVnIGZ1bmN0aW9uYWxpdHkgZm9yIHVzZSBkdXJpbmcgaW5zdGFsbGF0aW9uIGFuZCB0cm91Ymxlc2hvb3RpbmcuIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsic3lzbG9nIjp7InRpdGxlIjoiU3lzdGVtIGxvZyIsImRlc2NyaXB0aW9uIjoiU3lzdGVtIGV2ZW50cyBsb2dnZWQgdG8gdGhlIFNELWNhcmQuIFRoZSBsb2cgbGV2ZWxzIGFyZSBsaXN0ZWQgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBhbW91bnQgb2YgaW5mb3JtYXRpb24gbG9nZ2VkLiBTaG91bGQgb25seSBiZSBlbmFibGVkIGlmIG5lZWRlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIG9yIHRyb3VibGVzaG9vdGluZy4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRGlzYWJsZSAoMCkiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkVycm9yICgxKSIsImVudW0iOlsxXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiV2FybmluZyAoMikiLCJlbnVtIjpbMl19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkluZm8gKDMpIiwiZW51bSI6WzNdfV19fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlfX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicmVxdWlyZWQiOlsiZGV2aWNlIiwic2VjdXJpdHkiLCJkZWJ1ZyJdfSwibG9nIjp7InRpdGxlIjoiTG9nZ2luZyIsInR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7ImZpbGUiOnsidGl0bGUiOiJGaWxlIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsic3BsaXRfc2l6ZSI6eyJ0aXRsZSI6IkZpbGUgc3BsaXQgc2l6ZSAoMSB0byA1MTIgTUIpIiwiZGVzY3JpcHRpb24iOiJMb2cgZmlsZSBzcGxpdCBzaXplIGluIE1CLiBXaGVuIHRoZSBmaWxlIHNwbGl0IHNpemUgaXMgcmVhY2hlZCBhIG5ldyBmaWxlIGlzIGNyZWF0ZWQgYW5kIHRoZSBsb2dnaW5nIGNvbnRpbnVlcy4gQ2xvc2VkIGxvZyBmaWxlcyBjYW4gYmUgcHVzaGVkIHRvIGEgc2VydmVyIGlmIG5ldHdvcmsgaXMgYXZhaWxhYmxlLiBTbWFsbCBzcGxpdCBzaXplcyBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6NTAsIm1pbmltdW0iOjEsIm1heGltdW0iOjUxMn0sInNwbGl0X3RpbWVfcGVyaW9kIjp7InRpdGxlIjoiRmlsZSBzcGxpdCB0aW1lIHBlcmlvZCAoMCB0byA4NjQwMCBzZWNvbmRzLCAwID0gZGlzYWJsZSkiLCJkZXNjcmlwdGlvbiI6IkxvZyBmaWxlIHNwbGl0IHRpbWUgcGVyaW9kIGluIHNlY29uZHMgcmVsYXRpdmUgdG8gbWlkbmlnaHQgKDAwOjAwOjAwKS4gV2hlbiBhIHNwbGl0IHRpbWUgaXMgcmVhY2hlZCBhIG5ldyBmaWxlIGlzIGNyZWF0ZWQgYW5kIHRoZSBsb2dnaW5nIGNvbnRpbnVlcy4gQ2xvc2VkIGxvZyBmaWxlcyBjYW4gYmUgcHVzaGVkIHRvIGEgc2VydmVyIGlmIG5ldHdvcmsgaXMgYXZhaWxhYmxlLiBTbWFsbCBzcGxpdCB0aW1lIHBlcmlvZHMgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZS4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm1pbmltdW0iOjAsIm1heGltdW0iOjg2NDAwLCJtdWx0aXBsZU9mIjoxMH0sInNwbGl0X3RpbWVfb2Zmc2V0Ijp7InRpdGxlIjoiRmlsZSBzcGxpdCB0aW1lIG9mZnNldCAoMCB0byA4NjQwMCBzZWNvbmRzKSIsImRlc2NyaXB0aW9uIjoiTG9nIGZpbGUgc3BsaXQgdGltZSBvZmZzZXQgaW4gc2Vjb25kcy4gVGhpcyB2YWx1ZSBvZmZzZXRzIHRoZSBzcGxpdF90aW1lX3BlcmlvZCByZWxhdGl2ZSB0byBtaWRuaWdodCAoMDA6MDA6MDApLiBUaGUgc2V0IHZhbHVlIHNoYWxsIGJlIGxlc3MgdGhhbiB0aGUgc3BsaXRfdGltZV9wZXJpb2QgdmFsdWUuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJtaW5pbXVtIjowLCJtYXhpbXVtIjo4NjQwMCwibXVsdGlwbGVPZiI6MTB9LCJjeWNsaWMiOnsidGl0bGUiOiJDeWNsaWMgbG9nZ2luZyIsImRlc2NyaXB0aW9uIjoiV2l0aCBjeWNsaW5nIGxvZ2dpbmcgbW9kZSBlbmFibGVkIHRoZSBvbGRlc3QgbG9nIGZpbGUgaXMgZGVsZXRlZCB3aGVuIHRoZSBtZW1vcnkgY2FyZCBiZWNvbWVzIGZ1bGwsIGFsbG93aW5nIHRoZSBsb2dnaW5nIHRvIGNvbnRpbnVlLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MSwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJEaXNhYmxlIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJFbmFibGUiLCJlbnVtIjpbMV19XX19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInJlcXVpcmVkIjpbInNwbGl0X3NpemUiLCJzcGxpdF90aW1lX3BlcmlvZCIsInNwbGl0X3RpbWVfb2Zmc2V0IiwiY3ljbGljIl19LCJjb21wcmVzc2lvbiI6eyJ0aXRsZSI6IkNvbXByZXNzaW9uIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsibGV2ZWwiOnsidGl0bGUiOiJMZXZlbCIsImRlc2NyaXB0aW9uIjoiV2luZG93IHNpemUgdXNlZCBkdXJpbmcgb3B0aW9uYWwgY29tcHJlc3Npb24uIExhcmdlciB3aW5kb3cgc2l6ZXMgeWllbGQgcG90ZW50aWFsbHkgYmV0dGVyIGNvbXByZXNzaW9uIHJhdGVzLCBidXQgbWF5IHJlZHVjZSBsb2dnaW5nIHBlcmZvcm1hbmNlLiBDb21wcmVzc2VkIGxvZyBmaWxlcyBuZWVkIHRvIGJlIGRlY29tcHJlc3NlZCBwcmlvciB0byBwcm9jZXNzaW5nLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJEaXNhYmxlIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiIyNTYgYnl0ZXMgd2luZG93IiwiZW51bSI6WzI1Nl19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IjUxMiBieXRlcyB3aW5kb3ciLCJlbnVtIjpbNTEyXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiMTAyNCBieXRlcyB3aW5kb3ciLCJlbnVtIjpbMTAyNF19XX19fSwiZW5jcnlwdGlvbiI6eyJ0aXRsZSI6IkVuY3J5cHRpb24iLCJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJzdGF0ZSI6eyJ0aXRsZSI6IlN0YXRlIiwiZGVzY3JpcHRpb24iOiJPcHRpb25hbCBsb2cgZmlsZSBlbmNyeXB0aW9uLiBFbmNyeXB0ZWQgbG9nIGZpbGVzIG5lZWQgdG8gYmUgZGVjcnlwdGVkIHByaW9yIHRvIHByb2Nlc3NpbmcuIERlY3J5cHRpb24gcmVxdWlyZXMgeW91ciBlbmNyeXB0aW9uIHBhc3N3b3JkIGluIHBsYWluIGZvcm0gLSBpZiB0aGlzIGlzIGxvc3QsIHRoZSBlbmNyeXB0ZWQgZGF0YSBjYW5ub3QgYmUgcmVjb3ZlcmVkLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJEaXNhYmxlIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJFbmFibGUiLCJlbnVtIjpbMV19XX19LCJkZXBlbmRlbmNpZXMiOnsic3RhdGUiOnsib25lT2YiOlt7InByb3BlcnRpZXMiOnsic3RhdGUiOnsiZW51bSI6WzBdfX19LHsicHJvcGVydGllcyI6eyJzdGF0ZSI6eyJlbnVtIjpbMV19LCJrZXlmb3JtYXQiOnsidGl0bGUiOiJLZXkgZm9ybWF0IiwiZGVzY3JpcHRpb24iOiJUaGUgZm9ybWF0IG9mIHRoZSBlbmNyeXB0aW9uIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRpbmcgbG9nZ2VkIGRhdGEgb24gdGhlIGRldmljZS4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiUGxhaW4iLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkVuY3J5cHRlZCIsImVudW0iOlsxXX1dfSwicHdkIjp7InRpdGxlIjoiRW5jcnlwdGlvbiBwYXNzd29yZCIsInR5cGUiOiJzdHJpbmciLCJkZWZhdWx0IjoiIn19LCJkZXBlbmRlbmNpZXMiOnsia2V5Zm9ybWF0Ijp7Im9uZU9mIjpbeyJwcm9wZXJ0aWVzIjp7ImtleWZvcm1hdCI6eyJlbnVtIjpbMF19LCJwd2QiOnsiZGVzY3JpcHRpb24iOiJFbmNyeXB0aW9uIHBhc3N3b3JkIGluIHBsYWluIGZvcm0gKG1pbiAxLCBtYXggNjQpLiBFeGFtcGxlOiAyZTlhc2RLSmF6Q2F0c3NzZFMzMjNAQUJDaDIyLiBJTVBPUlRBTlQ6IEVuc3VyZSB0aGF0IHlvdSBzZWN1cmVseSBzdG9yZSB0aGUgcGxhaW4gZm9ybSBlbmNyeXB0aW9uIHBhc3N3b3JkIGZvciBkZWNyeXB0aW9uIHB1cnBvc2VzLiIsInBhdHRlcm4iOiJeWyAtfl0qJCIsIm1pbkxlbmd0aCI6MSwibWF4TGVuZ3RoIjo2NH19fSx7InByb3BlcnRpZXMiOnsia2V5Zm9ybWF0Ijp7ImVudW0iOlsxXX0sInB3ZCI6eyJkZXNjcmlwdGlvbiI6IkVuY3J5cHRpb24gcGFzc3dvcmQgaW4gZW5jcnlwdGVkIGZvcm0gKG1pbiAyNCwgbWF4IDEwOCkuIEV4YW1wbGU6IEIxRGxNck5oMjJ0cS9rTmVySy9UK2VTeUNXU0pxaXF5VW9vdlE3QzZncVJhSW5nNkYrRT0uIElNUE9SVEFOVDogRW5zdXJlIHRoYXQgeW91IGVuY3J5cHQgdGhlIGVuY3J5cHRpb24gcGFzc3dvcmQgYW5kIHRoYXQgeW91IGluY2x1ZGUgdGhlIHNlcnZlciBwdWJsaWMga2V5LiBGdXJ0aGVyLCBlbnN1cmUgdGhhdCB5b3Ugc2VjdXJlbHkgc3RvcmUgdGhlIHBsYWluIGZvcm0gZW5jcnlwdGlvbiBwYXNzd29yZCBmb3IgZGVjcnlwdGlvbiBwdXJwb3Nlcy4iLCJwYXR0ZXJuIjoiXlthLXpBLVowLTkrLz1dKiQiLCJtaW5MZW5ndGgiOjI0LCJtYXhMZW5ndGgiOjEwOH19fV19fSwicmVxdWlyZWQiOlsia2V5Zm9ybWF0IiwicHdkIl19XX19fSwiZXJyb3JfZnJhbWVzIjp7InRpdGxlIjoiRXJyb3IgRnJhbWVzIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsic3RhdGUiOnsidGl0bGUiOiJTdGF0ZSIsImRlc2NyaXB0aW9uIjoiU3BlY2lmeSB3aGV0aGVyIHRvIHJlY29yZCBlcnJvciBmcmFtZXMuIEVuYWJsaW5nIHRoaXMgY2FuIG5lZ2F0aXZlbHkgaW1wYWN0IHBlcmZvcm1hbmNlLCBhcyBhIHBvdGVudGlhbGx5IGxhcmdlIG51bWJlciBvZiBhZGRpdGlvbmFsIGZyYW1lcyBtYXkgYmUgcmVjb3JkZWQuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkRpc2FibGUiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IkVuYWJsZSIsImVudW0iOlsxXX1dfX0sInJlcXVpcmVkIjpbInN0YXRlIl19fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJwYXR0ZXJuUHJvcGVydGllcyI6eyJrZXlmb3JtYXQiOnt9LCJwd2QiOnt9fSwicmVxdWlyZWQiOlsiZmlsZSIsImNvbXByZXNzaW9uIiwiZW5jcnlwdGlvbiIsImVycm9yX2ZyYW1lcyJdfSwicnRjIjp7InRpdGxlIjoiUmVhbC1UaW1lIENsb2NrIChSVEMpIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsic3luYyI6eyJ0aXRsZSI6IlRpbWUgc3luY2hyb25pemF0aW9uIG1ldGhvZCIsImRlc2NyaXB0aW9uIjoiSW50ZXJuYWwgcmVhbC10aW1lLWNsb2NrIHN5bmNocm9uaXphdGlvbiBtZXRob2QuIFRoZSByZWFsLXRpbWUtY2xvY2sgaXMgbWFpbnRhaW5lZCB3aGVuIHRoZSBkZXZpY2UgaXMgb2ZmLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6Miwib25lT2YiOlt7InRpdGxlIjoiUmV0YWluIGN1cnJlbnQgdGltZSIsImRlc2NyaXB0aW9uIjoiVGhlIGN1cnJlbnQgaW50ZXJuYWwgdGltZSBpcyBub3QgY2hhbmdlZC4iLCJ0eXBlIjoiaW50ZWdlciIsImVudW0iOlswXX0seyJ0aXRsZSI6Ik1hbnVhbCB1cGRhdGUiLCJkZXNjcmlwdGlvbiI6IlRoZSBpbnRlcm5hbCB0aW1lIGlzIHVwZGF0ZWQgd2l0aCB0aGUgbWFudWFsbHkgc2V0IFVUQyB0aW1lIHdoZW4gdGhlIGRldmljZSBwb3dlcnMgb24uIFRoZSBtYW51YWwgdGltZSBpcyBzZXQgdXNpbmcgdGhlIG1hbnVhbF9kYXRlX3RpbWUgZmllbGQiLCJ0eXBlIjoiaW50ZWdlciIsImVudW0iOlsxXX0seyJ0aXRsZSI6IkNBTi1idXMiLCJkZXNjcmlwdGlvbiI6IlRoZSBpbnRlcm5hbCB0aW1lIHN5bmNocm9uaXplZCB0byB0aGUgdGltZSBwcm92aWRlZCBieSB0aGUgcGF5bG9hZCBvZiBhIENBTi1idXMgbWVzc2FnZSIsInR5cGUiOiJpbnRlZ2VyIiwiZW51bSI6WzNdfSx7InRpdGxlIjoiTmV0d29yayIsImRlc2NyaXB0aW9uIjoiVGhlIGludGVybmFsIHRpbWUgaXMgc3luY2hyb25pemVkIHdpdGggdGhlIHRpbWUgcHJvdmlkZWQgYnkgdGhlIG5ldHdvcmsgd2hlbiBhdmFpbGFibGUuIiwidHlwZSI6ImludGVnZXIiLCJlbnVtIjpbMl19XX0sInRpbWV6b25lIjp7InRpdGxlIjoiVGltZSB6b25lIChVVEMtMTIgdG8gVVRDKzE0KSIsImRlc2NyaXB0aW9uIjoiQWRqdXN0bWVudCBpbiBmdWxsIGhvdXJzIHRvIHRoZSBVVEMgdGltZS4gSW5jbHVkZXMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlmIGFwcGxpY2FibGUuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJtaW5pbXVtIjotMTIsIm1heGltdW0iOjE0fSwiYWRqdXN0bWVudCI6eyJ0aXRsZSI6IkFkanVzdG1lbnQgKC0xMjk2MDAgdG8gMTI5NjAwIHNlY29uZHMpIiwiZGVzY3JpcHRpb24iOiJBZGp1c3RtZW50IGluIHNlY29uZHMgdG8gdGhlIFVUQyB0aW1lLiBDYW4gYmUgdXNlZCBmb3IgZmluZSB0dW5pbmcgdGhlIGludGVybmFsIHRpbWUuICIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwibWluaW11bSI6LTEyOTYwMCwibWF4aW11bSI6MTI5NjAwfX0sImRlcGVuZGVuY2llcyI6eyJzeW5jIjp7Im9uZU9mIjpbeyJwcm9wZXJ0aWVzIjp7InN5bmMiOnsiZW51bSI6WzBdfX19LHsicHJvcGVydGllcyI6eyJzeW5jIjp7ImVudW0iOlsxXX0sIm1hbnVhbF9kYXRlX3RpbWUiOnsidGl0bGUiOiJUaW1lIChVVEMpIiwiZGVzY3JpcHRpb24iOiJNYW51YWxseSBzZXQgVVRDIGRhdGUgYW5kIHRpbWUgdmFsdWUuIiwidHlwZSI6InN0cmluZyIsImZvcm1hdCI6ImRhdGUtdGltZSJ9fSwicmVxdWlyZWQiOlsibWFudWFsX2RhdGVfdGltZSJdfSx7InByb3BlcnRpZXMiOnsic3luYyI6eyJlbnVtIjpbM119LCJ0b2xlcmFuY2UiOnsiJHJlZiI6IiMvZGVmaW5pdGlvbnMvcnRjX3RvbGVyYW5jZSJ9LCJtZXNzYWdlIjp7InRpdGxlIjoiTWVzc2FnZSIsIiRyZWYiOiIjL2RlZmluaXRpb25zL2Nhbl9tZXNzYWdlIn0sInZhbGlkX3NpZ25hbCI6eyJ0aXRsZSI6IlRpbWUgdmFsaWQgc2lnbmFsIiwiJHJlZiI6IiMvZGVmaW5pdGlvbnMvY2FuX3NpZ25hbCJ9LCJ0aW1lX3NpZ25hbCI6eyJ0aXRsZSI6IlRpbWUgdmFsdWUgc2lnbmFsIiwiJHJlZiI6IiMvZGVmaW5pdGlvbnMvY2FuX3NpZ25hbCJ9fSwicmVxdWlyZWQiOlsibWVzc2FnZSIsInZhbGlkX3NpZ25hbCIsInRpbWVfc2lnbmFsIl19LHsicHJvcGVydGllcyI6eyJzeW5jIjp7ImVudW0iOlsyXX0sInRvbGVyYW5jZSI6eyIkcmVmIjoiIy9kZWZpbml0aW9ucy9ydGNfdG9sZXJhbmNlIn0sIm50cF9zZXJ2ZXIiOnsidGl0bGUiOiJUaW1lIHNlcnZlciIsImRlc2NyaXB0aW9uIjoiTlRQIHNlcnZlciBuYW1lIHVzZWQgZm9yIHRpbWUgc3luY2hyb25pemF0aW9uLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGFuIGFzdGVyaXNrICgqKSB0aGVuIHRoZSBzZXJ2ZXIgbmFtZSBpcyB0cmVhdGVkIGFzIGEgc2VydmVyIHBvb2wuIEV4YW1wbGVzOiAgKi5wb29sLm50cC5vcmcsICoudXMucG9vbC5udHAub3JnLCB0aW1lLm5pc3QuZ292IiwidHlwZSI6InN0cmluZyIsImRlZmF1bHQiOiIqLnBvb2wubnRwLm9yZyIsIm1heExlbmd0aCI6MzIsInBhdHRlcm4iOiJeXFwqP1thLXowLTlcXC4tXSokIn19LCJyZXF1aXJlZCI6WyJudHBfc2VydmVyIiwidG9sZXJhbmNlIl19XX19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInBhdHRlcm5Qcm9wZXJ0aWVzIjp7Im1hbnVhbF9kYXRlX3RpbWUiOnt9LCJtZXNzYWdlIjp7fSwidmFsaWRfc2lnbmFsIjp7fSwidGltZV9zaWduYWwiOnt9LCJudHBfc2VydmVyIjp7fSwidG9sZXJhbmNlIjp7fX0sInJlcXVpcmVkIjpbInN5bmMiLCJ0aW1lem9uZSIsImFkanVzdG1lbnQiXX0sInNlY29uZGFyeXBvcnQiOnsidGl0bGUiOiJTZWNvbmRhcnkgUG9ydCIsImRlc2NyaXB0aW9uIjoiQ29udHJvbCBvZiBwb3dlci1vdXQgKDVWKSBvbiBDaGFubmVsIDIgKENIMikgY29ubmVjdG9yLiIsInR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7InBvd2VyX3NjaGVkdWxlIjp7InRpdGxlIjoiUG93ZXIgc2NoZWR1bGUiLCJkZXNjcmlwdGlvbiI6IlRoZSBkYWlseSBwb3dlciBzY2hlZHVsZSBpcyBkZWZpbmVkIGJ5IGEgbnVtYmVyIG9mIHBvd2VyLW9uIGZyb20vdG8gaW50ZXJ2YWxzLiBEZWZpbmUgbm8gcG93ZXItb24gaW50ZXJ2YWxzIHRvIGtlZXAgYWx3YXlzIG9mZi4gRGVmaW5lIG9uZSBpbnRlcnZhbCB3aXRoIGZyb20vdG8gYm90aCBzZXQgdG8gMDA6MDAgdG8ga2VlcCBhbHdheXMgb24uIFRpbWUgZm9ybWF0IGlzIEhIOk1NICgxIG1pbnV0ZSByZXNvbHV0aW9uKSIsInR5cGUiOiJhcnJheSIsImRlZmF1bHQiOltdLCJtYXhJdGVtcyI6NSwiaXRlbXMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiZnJvbSI6eyJ0aXRsZSI6IkZyb20iLCJkZXNjcmlwdGlvbiI6IlBvd2VyLW9uIEZST00gdGltZSBpbiBmb3JtYXQgSEg6TU0uIFNoYWxsIGJlIGJlZm9yZSBwb3dlci1vbiBUTyB0aW1lLiBFLmcuIGF0IG1pZG5pZ2h0IDAwOjAwIiwidHlwZSI6InN0cmluZyIsImRlZmF1bHQiOiIwMDowMCIsInBhdHRlcm4iOiJeKFswLTFdWzAtOV18MlswLTRdKTooWzAtNV1bMC05XSkkIn0sInRvIjp7InRpdGxlIjoiVG8iLCJkZXNjcmlwdGlvbiI6IlBvd2VyLW9uIFRPIHRpbWUgaW4gZm9ybWF0IEhIOk1NLiBTaGFsbCBiZSBhZnRlciBwb3dlci1vbiBGUk9NIHRpbWUuIEUuZy4gYXQgbWlkZGF5IDEyOjAwLiIsInR5cGUiOiJzdHJpbmciLCJkZWZhdWx0IjoiMDA6MDAiLCJwYXR0ZXJuIjoiXihbMC0xXVswLTldfDJbMC00XSk6KFswLTVdWzAtOV0pJCJ9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJyZXF1aXJlZCI6WyJmcm9tIiwidG8iXX19fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJyZXF1aXJlZCI6WyJwb3dlcl9zY2hlZHVsZSJdfSwiY2FuX2ludGVybmFsIjp7InRpdGxlIjoiQ0FOIENoYW5uZWwgaW50ZXJuYWwiLCJkZXNjcmlwdGlvbiI6IkNBTiBDaGFubmVsIGludGVybmFsIGlzIGEgdmlydHVhbCBjaGFubmVsIHVzZWQgZm9yIHNpZ25hbHMgZ2VuZXJhdGVkIGJ5IHRoZSBkZXZpY2UgaXRzZWxmLiIsInR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7ImdlbmVyYWwiOnsidGl0bGUiOiJHZW5lcmFsIiwiJHJlZiI6IiMvZGVmaW5pdGlvbnMvY2FuX2dlbmVyYWwifSwiZmlsdGVyIjp7InRpdGxlIjoiUmVjZWl2ZSBmaWx0ZXJzIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiaWQiOnsiZGVzY3JpcHRpb24iOiJGaWx0ZXJzIGFyZSBjaGVja2VkIHNlcXVlbnRpYWxseSwgZXhlY3V0aW9uIHN0b3BzIHdpdGggdGhlIGZpcnN0IG1hdGNoaW5nIGZpbHRlciBlbGVtZW50LiBNYXggMjAgZmlsdGVycyBpbiB0b3RhbC4iLCJtYXhJdGVtcyI6MjAsIiRyZWYiOiIjL2RlZmluaXRpb25zL2Nhbl9maWx0ZXJfaWQifX0sInJlcXVpcmVkIjpbImlkIl19LCJjb250cm9sIjp7IiRyZWYiOiIjL2RlZmluaXRpb25zL2Nhbl9jb250cm9sIn19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsInJlcXVpcmVkIjpbImZpbHRlciJdfSwiY2FuXzEiOnsidGl0bGUiOiJDQU4gQ2hhbm5lbCAxIChwaHlzaWNhbCkiLCJkZXNjcmlwdGlvbiI6IkNBTiBDaGFubmVsIDEgaXMgYW4gZXh0ZXJuYWwgcGh5c2ljYWwgY2hhbm5lbC4iLCIkcmVmIjoiIy9kZWZpbml0aW9ucy9jYW4ifSwiY2FuXzIiOnsidGl0bGUiOiJDQU4gQ2hhbm5lbCAyIChwaHlzaWNhbCkiLCJkZXNjcmlwdGlvbiI6IkNBTiBDaGFubmVsIDIgaXMgYW4gZXh0ZXJuYWwgcGh5c2ljYWwgY2hhbm5lbC4iLCIkcmVmIjoiIy9kZWZpbml0aW9ucy9jYW4ifSwibGluXzEiOnsidGl0bGUiOiJMSU4gQ2hhbm5lbCAxIiwiJHJlZiI6IiMvZGVmaW5pdGlvbnMvbGluIn0sImxpbl8yIjp7InRpdGxlIjoiTElOIENoYW5uZWwgMiIsIiRyZWYiOiIjL2RlZmluaXRpb25zL2xpbiJ9LCJjb25uZWN0Ijp7InRpdGxlIjoiQ29ubmVjdGl2aXR5IiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsid2lmaSI6eyJ0aXRsZSI6IldpRmkiLCJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJtb2RlIjp7InRpdGxlIjoiTW9kZSIsImRlc2NyaXB0aW9uIjoiSW4gc3RhdGlvbiBtb2RlLCB0aGUgZGV2aWNlIGNhbiB1c2UgZWl0aGVyIGFjdGl2ZSBvciBwYXNzaXZlIHNjYW5uaW5nIHRvIGZpbmQgQVBzLiBVc2luZyBhY3RpdmUgc2NhbiwgdGhlIHJhZGlvIHRyYW5zbWl0cyBhIHByb2JlIHJlcXVlc3QgYW5kIGxpc3RlbnMgZm9yIHJlc3BvbnNlcy4gVXNpbmcgcGFzc2l2ZSBzY2FuLCB0aGUgcmFkaW8gbGlzdGVucyBvbiBlYWNoIGNoYW5uZWwgZm9yIGJlYWNvbnMgc2VudCBwZXJpb2RpY2FsbHkgYnkgQVBzLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJTdGF0aW9uIG1vZGUgKGFjdGl2ZSBzY2FubmluZykiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IlN0YXRpb24gbW9kZSAocGFzc2l2ZSBzY2FubmluZykiLCJlbnVtIjpbMV19XX0sImtleWZvcm1hdCI6eyJ0aXRsZSI6IktleSBmb3JtYXQiLCJkZXNjcmlwdGlvbiI6IlRoZSBmb3JtYXQgb2YgdGhlIGtleSB1c2VkIGZvciBhbGwgZW50cmllcyBpbiB0aGUgYWNjZXNzIHBvaW50IGxpc3QuIENhbiBiZSB1c2VkIHRvIGhpZGUgdGhlIFdpRmkgcGFzc3dvcmRzIHN0b3JlZCBvbiB0aGUgZGV2aWNlLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJQbGFpbiIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRW5jcnlwdGVkIiwiZW51bSI6WzFdfV19LCJhY2Nlc3Nwb2ludCI6eyJ0aXRsZSI6IkFjY2VzcyBwb2ludHMiLCJkZXNjcmlwdGlvbiI6Ikxpc3Qgb2YgYWNjZXNzIHBvaW50cy4gQ29ubmVjdHMgdG8gdGhlIGZpcnN0IGF2YWlsYWJsZSBBUCBpbiBsaXN0LiIsInR5cGUiOiJhcnJheSIsIm1heEl0ZW1zIjo0LCJpdGVtcyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJzc2lkIjp7InRpdGxlIjoiU1NJRCIsImRlc2NyaXB0aW9uIjoiQWNjZXNzIHBvaW50IFNTSUQgKG5hbWUgb2YgYWNjZXNzIHBvaW50KSIsInR5cGUiOiJzdHJpbmciLCJwYXR0ZXJuIjoiXig/IVxccykuKyg/PCFcXHMpJCIsIm1pbkxlbmd0aCI6MCwibWF4TGVuZ3RoIjozMn0sInB3ZCI6eyJ0aXRsZSI6IlBhc3N3b3JkIiwidHlwZSI6InN0cmluZyIsInBhdHRlcm4iOiJeKD8hXFxzKS4rKD88IVxccykkIiwiZGVmYXVsdCI6IiIsIm1heExlbmd0aCI6NjR9LCJtaW5yc3NpIjp7InRpdGxlIjoiTWluaW11bSBSU1NJIChyZWNlaXZlZCBzaWduYWwgc3RyZW5ndGggaW5kaWNhdG9yKSwgMC0xMDAlIiwiZGVzY3JpcHRpb24iOiJTZXRzIGEgbWluaW11bSByZXF1aXJlZCBhY2Nlc3MgcG9pbnQgc2lnbmFsIHN0cmVuZ3RoLiBUaGUgZGV2aWNlIHdpbGwgbm90IGNvbm5lY3QgdG8gdGhlIGFjY2VzcyBwb2ludCBpZiB0aGUgbWVhc3VyZWQgc2lnbmFsIHN0cmVuZ3RoIGlzIGJlbG93IHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwibWluaW11bSI6MCwibWF4aW11bSI6MTAwfX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicmVxdWlyZWQiOlsic3NpZCIsInB3ZCIsIm1pbnJzc2kiXX19fSwiZGVwZW5kZW5jaWVzIjp7ImtleWZvcm1hdCI6eyJvbmVPZiI6W3sicHJvcGVydGllcyI6eyJrZXlmb3JtYXQiOnsiZW51bSI6WzBdfSwiYWNjZXNzcG9pbnQiOnsiaXRlbXMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsicHdkIjp7InRpdGxlIjoiUGFzc3dvcmQiLCJkZXNjcmlwdGlvbiI6IkFjY2VzcyBwb2ludCBwYXNzd29yZCBpbiBwbGFpbiBmb3JtIChtYXggNjQpLiBMZWF2ZSBlbXB0eSB0byBjb25uZWN0IHRvIGFuIG9wZW4gQVAuIEV4YW1wbGU6IDMxYUFhYkM4MUA5OS4iLCJwYXR0ZXJuIjoiXlsgLX5dKiQiLCJtaW5MZW5ndGgiOjB9fX19fX0seyJwcm9wZXJ0aWVzIjp7ImtleWZvcm1hdCI6eyJlbnVtIjpbMV19LCJhY2Nlc3Nwb2ludCI6eyJpdGVtcyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJwd2QiOnsidGl0bGUiOiJFbmNyeXB0ZWQgcGFzc3dvcmQiLCJkZXNjcmlwdGlvbiI6IkFjY2VzcyBwb2ludCBwYXNzd29yZCBpbiBlbmNyeXB0ZWQgZm9ybSAobWluIDI0LCBtYXggNjQpLiBFeGFtcGxlOiBybDgvRUF5M3FUQ2hDc01JSWVaUFI2cnZHRWFuUkpDbkwyeGJ6cW89LiBJTVBPUlRBTlQ6IEVuc3VyZSB0aGF0IHlvdSBlbmNyeXB0IGFsbCBhY2Nlc3MgcG9pbnQgcGFzc3dvcmRzIGFuZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBzZXJ2ZXIgcHVibGljIGtleSIsInBhdHRlcm4iOiJeW2EtekEtWjAtOSsvPV0qJCIsIm1pbkxlbmd0aCI6MjR9fX19fX1dfX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicmVxdWlyZWQiOlsibW9kZSIsImtleWZvcm1hdCJdfSwiczMiOnsidGl0bGUiOiJTMyBzZXJ2ZXIgc2V0dGluZ3MiLCJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJzeW5jIjp7InRpdGxlIjoiU3luY2hyb25pemF0aW9uIiwiZGVzY3JpcHRpb24iOiJUaGlzIHNlY3Rpb24gY29uZmlndXJlcyBob3cgYW5kIHdoZW4gdGhlIGRldmljZSBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgUzMgc2VydmVyLiIsInR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im90YSI6eyJ0aXRsZSI6IkZpcm13YXJlLCBjb25maWcgYW5kIGNlcnRpZmljYXRlIiwiZGVzY3JpcHRpb24iOiJDb25maWd1cmVzIGhvdyBvZnRlbiB0aGUgZGV2aWNlIGxvb2tzIGZvciBmaXJtd2FyZS0sIGNvbmZpZy0gYW5kIGNlcnRpZmljYXRlLW92ZXItdGhlLWFpciB1cGRhdGVzLiBTbWFsbCB2YWx1ZXMgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZS4gVGltZSBwZXJpb2QgbWF5IHNvbWV0aW1lcyBiZWNvbWUgbG9uZ2VyIGlmIGRldmljZSBpcyBidXN5LiBTZXQgdG8gMCB0byBkaXNhYmxlLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6NjAwLCJtaW5pbXVtIjowLCJtYXhpbXVtIjo4NjQwMCwibXVsdGlwbGVPZiI6NX0sImhlYXJ0YmVhdCI6eyJ0aXRsZSI6IkhlYXJ0YmVhdCIsImRlc2NyaXB0aW9uIjoiQ29uZmlndXJlcyBob3cgb2Z0ZW4gdGhlIGRldmljZSB0cmFuc21pdHMgdGhlIGhlYXJ0YmVhdCBzaWduYWwuIFNtYWxsIHZhbHVlcyBtYXkgcmVkdWNlIHBlcmZvcm1hbmNlLiBUaW1lIHBlcmlvZCBtYXkgc29tZXRpbWVzIGJlY29tZSBsb25nZXIgaWYgZGV2aWNlIGlzIGJ1c3kuIFNldCB0byAwIHRvIGRpc2FibGUuIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjozMDAsIm1pbmltdW0iOjAsIm1heGltdW0iOjg2NDAwLCJtdWx0aXBsZU9mIjo1fSwibG9nZmlsZXMiOnsidGl0bGUiOiJMb2cgZmlsZXMiLCJkZXNjcmlwdGlvbiI6IkNvbmZpZ3VyZXMgaWYgdGhlIGRldmljZSBwdXNoZXMgY2xvc2VkIGxvZyBmaWxlcyB0byB0aGUgc2VydmVyLiBUaGUgbG9nIGZpbGVzIGFyZSBkZWxldGVkIGZyb20gdGhlIGRldmljZSB3aGVuIHN1Y2Nlc3NmdWxseSB1cGxvYWRlZC4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjEsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRGlzYWJsZSIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRW5hYmxlIiwiZW51bSI6WzFdfV19fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCJyZXF1aXJlZCI6WyJvdGEiLCJoZWFydGJlYXQiLCJsb2dmaWxlcyJdfSwic2VydmVyIjp7InRpdGxlIjoiU2VydmVyIiwiZGVzY3JpcHRpb24iOiJUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIHNlcnZlciBjb25uZWN0aW9uIHBhcmFtZXRlcnMuIiwidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiZW5kcG9pbnQiOnsidGl0bGUiOiJFbmRwb2ludCIsImRlc2NyaXB0aW9uIjoiUzMgc2VydmVyIGVuZHBvaW50LiBQcmVmaXggd2l0aCBodHRwOi8vIHRvIGNvbm5lY3QgdXNpbmcgc3RhbmRhcmQgaHR0cC4gUHJlZml4IHdpdGggaHR0cHM6Ly8gdG8gY29ubmVjdCB1c2luZyBTU0wvVExTIC0gcmVxdWlyZXMgc3VwcG9ydCBieSB0aGUgc2VydmVyIGFuZCB0aGF0IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgaXMgbG9hZGVkIG9udG8gdGhlIGRldmljZS4gRXhhbXBsZXM6IGh0dHA6Ly8xOTIuMTY4LjAuMSwgaHR0cHM6Ly9zMy5teWRvbWFpbi5jb20sIGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbSwgaHR0cDovL3MzLXVzLWVhc3QtMi5hbWF6b25hd3MuY29tLiIsInR5cGUiOiJzdHJpbmciLCJwYXR0ZXJuIjoiXmh0dHBzKjovL1thLXpBLVowLTlfL1xcLi1dKyQiLCJtYXhMZW5ndGgiOjEyOH0sInBvcnQiOnsidGl0bGUiOiJQb3J0IiwiZGVzY3JpcHRpb24iOiJTMyBzZXJ2ZXIgcG9ydC4gRXhhbXBsZXM6IDgwIChodHRwKSwgNDQzIChodHRwcyksIDkwMDAgKGN1c3RvbSkuIiwidHlwZSI6ImludGVnZXIiLCJtaW5pbXVtIjowLCJtYXhpbXVtIjo2NTUzNX0sImJ1Y2tldCI6eyJ0aXRsZSI6IkJ1Y2tldCBuYW1lIiwiZGVzY3JpcHRpb24iOiJTMyBzZXJ2ZXIgYnVja2V0IG5hbWUuIEV4YW1wbGVzOiBsb2didWNrZXQsIGZsZWV0YnVja2V0LCB0ZXN0YnVja2V0LiIsInR5cGUiOiJzdHJpbmciLCJwYXR0ZXJuIjoiXlthLXowLTldezF9W2EtejAtOVxcLlxcLV17MCw2Mn1bYS16MC05XXsxfSQiLCJtYXhMZW5ndGgiOjY0fSwicmVnaW9uIjp7InRpdGxlIjoiUmVnaW9uIiwiZGVzY3JpcHRpb24iOiJTMyBzZXJ2ZXIgcmVnaW9uLiBFeGFtcGxlOiB1cy1lYXN0LTEuIiwidHlwZSI6InN0cmluZyIsInBhdHRlcm4iOiJeW2EtejAtOS1dKiQiLCJtaW5MZW5ndGgiOjAsIm1heExlbmd0aCI6MzJ9LCJyZXF1ZXN0X3N0eWxlIjp7InRpdGxlIjoiUmVxdWVzdCBzdHlsZSIsImRlc2NyaXB0aW9uIjoiVmlydHVhbC1ob3N0ZWQtc3R5bGUgb3IgcGF0aC1zdHlsZSBTMyByZXF1ZXN0cy4gVmlydHVhbCBob3N0ZWQtc3R5bGUgZm9ybWF0OiBcImh0dHA6Ly9bQlVDS0VULU5BTUVdLltET01BSU5dL1tPQkpFQ1QtTkFNRV1cIi4gUGF0aC1zdHlsZSBmb3JtYXQ6IFwiaHR0cDovL1tET01BSU5dL1tCVUNLRVQtTkFNRV0vW09CSkVDVC1OQU1FXVwiIiwidHlwZSI6ImludGVnZXIiLCJkZWZhdWx0IjowLCJvbmVPZiI6W3sidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IlBhdGgtc3R5bGUiLCJlbnVtIjpbMF19LHsidHlwZSI6ImludGVnZXIiLCJ0aXRsZSI6IlZpcnR1YWwgaG9zdGVkLXN0eWxlIiwiZW51bSI6WzFdfV19LCJhY2Nlc3NrZXkiOnsidGl0bGUiOiJBY2Nlc3NLZXkiLCJkZXNjcmlwdGlvbiI6IlMzIHNlcnZlciBhY2Nlc3Mga2V5IElELiBFeGFtcGxlOiBQUkRES044UjZQQUFPR1RFSTUzRSIsInR5cGUiOiJzdHJpbmciLCJwYXR0ZXJuIjoiXlthLXpBLVowLTlfLV0rJCIsIm1pbkxlbmd0aCI6MywibWF4TGVuZ3RoIjoxMjh9LCJrZXlmb3JtYXQiOnsidGl0bGUiOiJTZWNyZXRLZXkgZm9ybWF0IiwiZGVzY3JpcHRpb24iOiJUaGUgZm9ybWF0IG9mIHRoZSBzZWNyZXQga2V5LiBDYW4gYmUgdXNlZCB0byBoaWRlIHRoZSBzZWNyZXQga2V5IHN0b3JlZCBvbiB0aGUgZGV2aWNlLiIsInR5cGUiOiJpbnRlZ2VyIiwiZGVmYXVsdCI6MCwib25lT2YiOlt7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJQbGFpbiIsImVudW0iOlswXX0seyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiRW5jcnlwdGVkIiwiZW51bSI6WzFdfV19LCJzZWNyZXRrZXkiOnsidGl0bGUiOiJTZWNyZXRLZXkiLCJ0eXBlIjoic3RyaW5nIn0sInNpZ25lZF9wYXlsb2FkIjp7InRpdGxlIjoiU2lnbmVkIHBheWxvYWQiLCJkZXNjcmlwdGlvbiI6IkluY2x1ZGUgcGF5bG9hZCBjaGVja3N1bSBpbiBzaWduYXR1cmUuIFJlZHVjZXMgZGV2aWNlIHVwbG9hZCBwZXJmb3JtYW5jZS4iLCJ0eXBlIjoiaW50ZWdlciIsImRlZmF1bHQiOjAsIm9uZU9mIjpbeyJ0eXBlIjoiaW50ZWdlciIsInRpdGxlIjoiT2ZmIiwiZW51bSI6WzBdfSx7InR5cGUiOiJpbnRlZ2VyIiwidGl0bGUiOiJPbiIsImVudW0iOlsxXX1dfX0sImRlcGVuZGVuY2llcyI6eyJlbmRwb2ludCI6WyJwb3J0IiwiYnVja2V0IiwicmVnaW9uIiwicmVxdWVzdF9zdHlsZSIsImFjY2Vzc2tleSIsImtleWZvcm1hdCIsInNlY3JldGtleSIsInNpZ25lZF9wYXlsb2FkIl0sImtleWZvcm1hdCI6eyJvbmVPZiI6W3sicHJvcGVydGllcyI6eyJrZXlmb3JtYXQiOnsiZW51bSI6WzBdfSwic2VjcmV0a2V5Ijp7ImRlc2NyaXB0aW9uIjoiUzMgc2VydmVyIHNlY3JldCBrZXkgaW4gcGxhaW4gZm9ybSAobWF4IDEyOCkuIEV4YW1wbGU6IElBa3dFOXZ2RWg5a2U0UkgiLCJwYXR0ZXJuIjoiXlsgLX5dKiQiLCJtaW5MZW5ndGgiOjEsIm1heExlbmd0aCI6MTI4fX19LHsicHJvcGVydGllcyI6eyJrZXlmb3JtYXQiOnsiZW51bSI6WzFdfSwic2VjcmV0a2V5Ijp7ImRlc2NyaXB0aW9uIjoiUzMgc2VydmVyIHNlY3JldCBrZXkgaW4gZW5jcnlwdGVkIGZvcm0gKG1pbiAyNCwgbWF4IDE1MCkuIEV4YW1wbGU6IEFLR2FxR0pXeEVoVGZKWDZvZVIvT0lkdTVTd205SFFZLiBJTVBPUlRBTlQ6IEVuc3VyZSB0aGF0IHlvdSBjb3JyZWN0bHkgZW5jcnlwdCB0aGUgc2VjcmV0S2V5IGFuZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBzZXJ2ZXIgcHVibGljIGtleSIsInBhdHRlcm4iOiJeW2EtekEtWjAtOSsvPV0qJCIsIm1pbkxlbmd0aCI6MjQsIm1heExlbmd0aCI6MTUwfX19XX19LCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2V9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlfX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicmVxdWlyZWQiOlsid2lmaSJdfX0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwicmVxdWlyZWQiOlsiZ2VuZXJhbCIsImxvZyIsInJ0YyIsInNlY29uZGFyeXBvcnQiLCJjYW5faW50ZXJuYWwiLCJjYW5fMSIsImNhbl8yIiwibGluXzEiLCJsaW5fMiJdfSwidWlTY2hlbWEiOnt9LCJ0aGVtZSI6ImRlZmF1bHQiLCJsaXZlU2V0dGluZ3MiOnsic2hvd0Vycm9yTGlzdCI6InRvcCIsInZhbGlkYXRlIjpmYWxzZSwiZGlzYWJsZWQiOmZhbHNlLCJub0h0bWw1VmFsaWRhdGUiOnRydWUsInJlYWRvbmx5IjpmYWxzZSwib21pdEV4dHJhRGF0YSI6dHJ1ZSwibGl2ZU9taXQiOnRydWUsImV4cGVyaW1lbnRhbF9kZWZhdWx0Rm9ybVN0YXRlQmVoYXZpb3IiOnsiYXJyYXlNaW5JdGVtcyI6InBvcHVsYXRlIiwiZW1wdHlPYmplY3RGaWVsZHMiOiJwb3B1bGF0ZUFsbERlZmF1bHRzIn19fQ==

xyy7260 commented 1 year ago

@MatinF Did you solve it?

MatinF commented 1 year ago

No in contrast, the latest rjsf playground exhibits performance issues for all fields when we load our Schema. This is not the case in the older versions as discussed in this thread and in the latest rjsf version it seems the issue of performance is no longer limited to array entries.

You should be able to replicate this performance issue by using the playground link I added in my previous post.

xyy7260 commented 1 year ago

@MatinF Ok, I wonder if the next release will fix the performance issues

heath-freenome commented 1 year ago

@MatinF I'm using your playground link and when I turn off omit extra data and live omit the response time goes from a second or 2 delay to about 1/4 of a second. Maybe it make sense to add some performance tuning optional parameters to the Form. If you want live omit, maybe we can add a skipOneOf or skipArrays flags to return things to where they were before the bug fix. Also, maybe there is a more performant way of omitting live data that doesn't rely on the pathSchema? All of these things require time and a lot of debugging, which sadly, I do not have much of in the 2 hours a week I am able to spend on the library.

MatinF commented 1 year ago

Thanks for providing inputs - fully understand that there is limited time for this. For now, we're using the older version which works OK for us right now, so this is more a focus for longer-term as we'd of course want to be able to keep up with new features/improvements eventually.

I tried testing with the live omit and omit extra data turned off and it does improve it a bit - but if you e.g. write some text in the top, it still seems very laggy on my end compared to the older versions. I'm not sure what is causing that, however.