modified date: July 23, 2017
INS0923920381WD202C
Instacart Analysis is derived from the R scripts in the insta_public_analysis project. See end of file for license details.
The sample of Instacart Data contains aggregate transactions of 206209 and 3214874 unique users that are part of the “prior” eval_set.
The summary below represents the frequency distribution of the number of orders per user.
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.00 5.00 9.00 15.59 19.00 99.00
Users and Day of Week
Sunday was the most popular day to place orders at 151528. Friday was the lease popular day to place orders at 128327.
We see the pattern from the graph above, for the entire week. The following graph shows the averages for every hour for each day and groups by shopper type:
Re Orders
Days since prior order- Ice Cream
Ignoring unknown parameters: binwidth, bins, pad

How Many prior orders - Ice Cream
##
Orders and Basket Size
Basket Variety - Product Combinations
The graph shows the variety of the basket. The unique products in a basket decreases through the customers lifecyle. Note that there is one order_id outlier that has 145 unqiue product_ids in the order.
Another interesting point; there seems to be a strong positive correlation in the quantity of unique products to the quantity of prior reorders (see How Many prior orders chart above) . So not only does the product basket variety decrease, but so does the number of future orders.
This might show potential symptoms that a customer might “churn out” if the quantity of unique products decreases. We would need to perform a deeper analysis and hypothesis test to rule out other factors such as; seasonality, duration of products, etc.
The outlier can be seen in the following distribution:
The users purchased a combination of 10 product_ids. However, a large proportion spans between 5 and 8 unique products, but are most frequently had 1 unique product at 313496 orders. 6429748 orders were the denser proportion of orders.
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.00 5.00 8.00 10.09 14.00 145.00
Basket Size - Ice Cream
A basket that includes ice cream is likely to have around 1 or 2 different product id’s: 
Reorders and Proportions - Ice Cream Only
Purchase frequency and most often reordered
Top Proportion Reordered

Basket Size Trend
Basket Size Trend
The scatterplot shows an increase in product variety in each order from the first to the 30th order. Then the curve of the trend shifts downward after the 30th order.
Basket Size Variance
This plot suggests that the customers are likely to have an average of approx. 9.4 items before their first 50 orders. After 50, the variance is wider, yet the customers basket size declines.
Ice Cream Basket Trend
This graph suggests that when compared to the total average basket trend, the average of ice cream is a part of the basket anywhere between the first and 90th order and will have 1.6 to 2.0 types of ice cream. It does decrease , but since you cannot have partial ice cream product, it is most likely 2 different product ids.
Ice Cream basket Variance
This graph suggests 2 different types of ice cream products within first 20 orders; variance will increase by up to 6 percent, but still not significant from the fitted line.
##
Top Selling Products
The table below shows the top product names.
All Dept & Aisle
This treemap covers all departments and aisles.
This table shows top products:
Frozen & Ice Cream
Barplot of the top selling Ice Cream Products.
Table showing the to Ice Cream Products:
License and Copyright
Project: insta_public_analysis project
Copyright(C) Michael Garcia 2017. All Rights Reserved.
GNU General Public License Version 3
Contact Author: mgar_datascience at protonmail dot com
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License Version 3 for more details.
See http://www.gnu.org/licenses for full license. Additional Licenses
may apply. Run source(listPckg) for a list of installed packages and
licenses.
Also Contains Source from:
Philipp Spachtholz as permitted by Apache 2.0 License
http://www.apache.org/licenses/LICENSE-2.0
Repository
https://www.kaggle.com/philippsp/exploratory-analysis-instacart/code
LS0tCnRpdGxlOiAiSW5zdGFjYXJ0IEFuYWx5c2lzIDIwMTciCmF1dGhvcjogIk1pY2hhZWwgR2FyY2lhIgpkYXRlOiAiSnVseSA2LCAyMDE3Igptb2RpZmllZCBkYXRlOiAiSnVseSAyMywgMjAxNyIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0CnRoZW1lOiBzcGFjZWxhYgpkZl9wcmludDogcGFnZWQKLS0tCiMjIyMjIG1vZGlmaWVkIGRhdGU6IEp1bHkgMjMsIDIwMTcKCklOUzA5MjM5MjAzODFXRDIwMkMKCkluc3RhY2FydCBBbmFseXNpcyBpcyBkZXJpdmVkIGZyb20gdGhlIFIgc2NyaXB0cyBpbiB0aGUgaW5zdGFfcHVibGljX2FuYWx5c2lzIHByb2plY3QuIFNlZSBlbmQgb2YgZmlsZSBmb3IgbGljZW5zZSBkZXRhaWxzLgoKYGBge3IsIGVjaG89RkFMU0V9CiNzb3VyY2UoZmlsZS5wYXRoKGdldHdkKCkscGFzdGUoIlJ1bl9JbnN0YWNhcnRTb3VyY2VGaWxlcyIsIi5SIixzZXAgPSAiIikpLCB2ZXJib3NlID0gRkFMU0UpCmBgYAoKClRoZSBzYW1wbGUgb2YgSW5zdGFjYXJ0IERhdGEgY29udGFpbnMgYWdncmVnYXRlIHRyYW5zYWN0aW9ucyBvZiBgciBwYXN0ZSh1c2VyQ291bnRzWzFdKWAgYW5kICBgciBwYXN0ZSh1c2VyQ291bnRzWzJdKWAgdW5pcXVlIHVzZXJzIHRoYXQgYXJlIHBhcnQgb2YgdGhlICJwcmlvciIgZXZhbF9zZXQuIAoKVGhlIHN1bW1hcnkgYmVsb3cgcmVwcmVzZW50cyB0aGUgZnJlcXVlbmN5IGRpc3RyaWJ1dGlvbiBvZiB0aGUgbnVtYmVyIG9mIG9yZGVycyBwZXIgdXNlci4KYGBge3IsIGVjaG89RkFMU0V9CmZycVN1bW1hcnkoKQpgYGAKCgojIyMjIFVzZXJzIGFuZCBEYXkgb2YgV2VlayAKClN1bmRheSB3YXMgdGhlIG1vc3QgcG9wdWxhciBkYXkgdG8gcGxhY2Ugb3JkZXJzIGF0IGByIHBhc3RlKGRvd191c2VyRnVuYygpW3doaWNoKGRvd191c2VyRnVuYygpWzFdID09IDEpLDJdKWAuCkZyaWRheSB3YXMgdGhlIGxlYXNlIHBvcHVsYXIgZGF5IHRvIHBsYWNlIG9yZGVycyBhdCBgciBwYXN0ZShkb3dfdXNlckZ1bmMoKVt3aGljaChkb3dfdXNlckZ1bmMoKVsxXSA9PSA2KSwyXSlgLgoKIyMgRGF5IGFuZCBIb3VyIFNob3BwaW5nIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQojIyMgRGF5IG9mIFdlZWsgU2hvcHBpbmcKVGhlIGZ1bGwgZGlzdHJpYnV0aW9uIGlzIGF2YWlsYWJsZSBiZWxvdyBhcyBhIGRhdGEgdGFibGUgYW5kIGdyYXBoOgpgYGB7cixlY2hvPUZBTFNFfQpybWFya2Rvd246OnBhZ2VkX3RhYmxlKGRvd191c2VyRnVuYygpKQpgYGAKCiFbRGF5IG9mIFdlZWtdKGRvd191c2VyUGxvdC5wbmcpCgojIyMgSG91ciBvZiBEYXkgU2hvcHBpbmcKVGhlIGhvdXIgb2YgdGhlIGRheSB0aGF0IHdhcyBtb3N0IHNob3BwZWQgd2FzIGhvdXIgMTUgd2l0aCBhIGxvZzEwIHRvdGFsIG9mIDUuMDYgT3JkZXJzIGFuZCByYW5nZXMgZnJvbSAxMCAtMTUgYXJvdW5kIDUgdG90YWwgb3JkZXJzLgoKVGhlIGNoYXJ0IGJlbG93cyBwbG90cyB0aGUgcG9pbnRzIG9mIHRvdGFsIG9yZGVycyBhdCB0aGUgcmVzcGVjdGl2ZSBob3VycyBwbGFjZWQKIVtIb3VyIG9mIERheV0odGltZV91c2Vyc1Bsb3QucG5nKQoKIyMjIERheSBPZiBXZWVrIEljZSBDcmVhbSAKVGhpcyBncmFwaCByZXByZXNlbnRzIGRheSBvZiB3ZWVrIG9yZGVycyBmb3IgSWNlIENyZWFtIEFpc2xlLiBQcm9kdWN0IE5hbWVzIGFyZSBkaWZmZXJlbnQgd2l0aGluIHRoZSBhaXNsZS4KIVtJY2UgQ3JlYW1dKGZyb3plbl9pY2VjcmVhbV9kb3cucG5nKQoKIyMjIEhvdXIgb2YgRGF5IEljZSBDcmVhbQpUaGlzIGdyYXBoIHJlcHJlc2VudHMgZGF5IG9mIHdlZWsgb3JkZXJzIGZvciBJY2UgQ3JlYW0gQWlzbGUuIFByb2R1Y3QgTmFtZXMgYXJlIGRpZmZlcmVudCB3aXRoaW4gdGhlIGFpc2xlLgohW0ljZSBDcmVhbV0oZnJvemVuX2ljZWNyZWFtX2hvdXIucG5nKQoKIyMKCldlIHNlZSB0aGUgcGF0dGVybiBmcm9tIHRoZSBncmFwaCBhYm92ZSwgZm9yIHRoZSBlbnRpcmUgd2Vlay4gVGhlIGZvbGxvd2luZyBncmFwaCBzaG93cyB0aGUgYXZlcmFnZXMgZm9yIGV2ZXJ5IGhvdXIgZm9yIGVhY2ggZGF5IGFuZCBncm91cHMgYnkgc2hvcHBlciB0eXBlOgoKCiMjIFJlIE9yZGVycyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30KCiMjIyBEYXlzIHNpbmNlIHByaW9yIG9yZGVyLSBJY2UgQ3JlYW0KYGBgIHtyLCBlY2hvID0gRkFMU0V9CnJlb3JkZXJfZGF5cyhkZXBhcnRtZW50ID0gImZyb3plbiIsIGFpc2xlID0gImljZSBjcmVhbSBpY2UiKQpgYGAKCiMjIyBIb3cgTWFueSBwcmlvciBvcmRlcnMgLSBJY2UgQ3JlYW0KIVtJY2UgQ3JlYW0gT25seSBSZW9yZGVyc10oUnBsb3Rfbm9fcHJpb3JfcmVvcmRlcnMucG5nKQojIwoKCgojIyBPcmRlcnMgYW5kIEJhc2tldCBTaXplIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQojIyMgQmFza2V0IFZhcmlldHkgLSBQcm9kdWN0IENvbWJpbmF0aW9ucwpUaGUgZ3JhcGggc2hvd3MgdGhlIHZhcmlldHkgb2YgdGhlIGJhc2tldC4gVGhlIHVuaXF1ZSBwcm9kdWN0cyBpbiBhIGJhc2tldCBkZWNyZWFzZXMgdGhyb3VnaCB0aGUgY3VzdG9tZXJzIGxpZmVjeWxlLiAKTm90ZSB0aGF0IHRoZXJlIGlzIG9uZSBvcmRlcl9pZCBvdXRsaWVyIHRoYXQgaGFzIDE0NSB1bnFpdWUgcHJvZHVjdF9pZHMgaW4gdGhlIG9yZGVyLiAKCkFub3RoZXIgaW50ZXJlc3RpbmcgcG9pbnQ7IHRoZXJlIHNlZW1zIHRvIGJlIGEgc3Ryb25nIHBvc2l0aXZlIGNvcnJlbGF0aW9uIGluIHRoZSBxdWFudGl0eSBvZiB1bmlxdWUgcHJvZHVjdHMgdG8gdGhlIHF1YW50aXR5IG9mIHByaW9yIHJlb3JkZXJzIChzZWUgSG93IE1hbnkgcHJpb3Igb3JkZXJzIGNoYXJ0IGFib3ZlKSAuIFNvIG5vdCBvbmx5IGRvZXMgdGhlIHByb2R1Y3QgYmFza2V0IHZhcmlldHkgZGVjcmVhc2UsIGJ1dCBzbyBkb2VzIHRoZSBudW1iZXIgb2YgZnV0dXJlIG9yZGVycy4gCgpUaGlzIG1pZ2h0IHNob3cgcG90ZW50aWFsIHN5bXB0b21zIHRoYXQgYSBjdXN0b21lciBtaWdodCAiY2h1cm4gb3V0IiBpZiB0aGUgcXVhbnRpdHkgb2YgdW5pcXVlIHByb2R1Y3RzIGRlY3JlYXNlcy4gV2Ugd291bGQgbmVlZCB0byBwZXJmb3JtIGEgZGVlcGVyIGFuYWx5c2lzIGFuZCBoeXBvdGhlc2lzIHRlc3QgdG8gcnVsZSBvdXQgb3RoZXIgZmFjdG9ycyBzdWNoIGFzOyBzZWFzb25hbGl0eSwgZHVyYXRpb24gb2YgcHJvZHVjdHMsIGV0Yy4gCgpUaGUgb3V0bGllciBjYW4gYmUgc2VlbiBpbiB0aGUgZm9sbG93aW5nIGRpc3RyaWJ1dGlvbjoKCiFbRGlzdHJpYnV0aW9uIG9mIFByb2R1Y3RJRCBDb21iaW5hdGlvbnNdKHByb2Rjb21iaW5hdGlvbnMucG5nKQoKVGhlIHVzZXJzIHB1cmNoYXNlZCBhIGNvbWJpbmF0aW9uIG9mIDEwIHByb2R1Y3RfaWRzLiBIb3dldmVyLCBhIGxhcmdlIHByb3BvcnRpb24gc3BhbnMgYmV0d2VlbiA1IGFuZCA4IHVuaXF1ZSBwcm9kdWN0cywgYnV0IGFyZSBtb3N0IGZyZXF1ZW50bHkgaGFkIDEgIHVuaXF1ZSBwcm9kdWN0IGF0IGByIHBhc3RlKGxlbmd0aCh1bmxpc3QoYVt3aGljaChhJG5vX3Byb2R1Y3RzID09IDEpLF0pKSlgIG9yZGVycy4gYHIgcGFzdGUobGVuZ3RoKHVubGlzdChhW3doaWNoKGEkbm9fcHJvZHVjdHMgPD0gOCB8IGEkbm9fcHJvZHVjdHMgPjEgKSxdKSkpYCBvcmRlcnMgd2VyZSB0aGUgZGVuc2VyIHByb3BvcnRpb24gb2Ygb3JkZXJzLiAKCmBgYHtyLCBlY2hvPUZBTFNFfQpzdW1tYXJ5KGEkbm9fcHJvZHVjdHMpCmBgYCAKYGBge3IsIGVjaG89RkFMU0V9CnJtYXJrZG93bjo6cGFnZWRfdGFibGUoTm9PcmRlcl9EZXB0QWlzbGUpCiN0YWJsZXM6OmFzLnRhYnVsYXIoKE5vT3JkZXJfRGVwdEFpc2xlKSkKYGBgCgoKIyMjIEJhc2tldCBTaXplIC0gSWNlIENyZWFtCkEgYmFza2V0IHRoYXQgaW5jbHVkZXMgaWNlIGNyZWFtIGlzIGxpa2VseSB0byBoYXZlIGFyb3VuZCAxIG9yIDIgZGlmZmVyZW50IHByb2R1Y3QgaWQnczoKIVtJY2UgQ3JlYW0gQmFza2V0IFZhcmlldHldKHByZGNvbWJwcm9iX2ZyekljZWNybS5wbmcpCgoKIyMjIFJlb3JkZXJzIGFuZCBQcm9wb3J0aW9ucyAtIEljZSBDcmVhbSBPbmx5CgpQdXJjaGFzZSBmcmVxdWVuY3kgYW5kIG1vc3Qgb2Z0ZW4gcmVvcmRlcmVkCgpgYGAge3IgaW5jbHVkZSA9IFRSVUUsIGVjaG8gPSBGQUxTRX0KIyBzb3VyY2UgaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS9waGlsaXBwc3AvZXhwbG9yYXRvcnktYW5hbHlzaXMtaW5zdGFjYXJ0L25vdGVib29rICB1bmRlciBBcGFjaGUgTGljZW5zZQpvcmRlcl9wcm9kX3ByaW9yX2RlcHRbd2hpY2gob3JkZXJfcHJvZF9wcmlvcl9kZXB0JGRlcGFydG1lbnQgPT0gImZyb3plbiIgJiBvcmRlcl9wcm9kX3ByaW9yX2RlcHQkYWlzbGUgPT0gImljZSBjcmVhbSBpY2UiKSxdICAlPiUgCiAgZ3JvdXBfYnkocmVvcmRlcmVkKSAlPiUgCiAgc3VtbWFyaXplKGNvdW50ID0gbigpKSAlPiUgCiAgbXV0YXRlKHJlb3JkZXJlZCA9IGFzLmZhY3RvcihyZW9yZGVyZWQpKSAlPiUKICBtdXRhdGUocHJvcG9ydGlvbiA9IHJvdW5kKChjb3VudC9zdW0oY291bnQpKSwyKSkKCmBgYAoKCgoKCgoKCiMjIyBSZW9yZGVyZWQgUHJvcG9ydGlvbgpgYGAge3IgaW5jbHVkZSA9IFRSVUUsIGVjaG8gPSBGQUxTRX0Kcm1hcmtkb3duOjpwYWdlZF90YWJsZShyZW9yZGVyZWRQcm9wb3J0aW9uKCkpCmBgYAoKIyMjIFRvcCBQcm9wb3J0aW9uIFJlb3JkZXJlZAoKYGBgIHtyIG9uY2x1ZGUgPSBUUlVFLCBlY2hvID0gRkFMU0V9CnJtYXJrZG93bjo6cGFnZWRfdGFibGUob2Z0ZW5PcmRlckZ1bih0b3BOUHJvZCA9IDEwMCkpCmBgYAoKCgpgYGAge3IgaW5jbHVkZSA9IFRSVUUsIGVjaG8gPSBGQUxTRX0KUGxvdG9mdGVuT3JkZXJGdW4odG9wTlByZFBsb3QgPSAyMCkKCmBgYAoKCiMjCgoKIyMgQmFza2V0IFNpemUgVHJlbmQgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9CiMjIyBCYXNrZXQgU2l6ZSBUcmVuZApUaGUgc2NhdHRlcnBsb3Qgc2hvd3MgYW4gaW5jcmVhc2UgaW4gcHJvZHVjdCB2YXJpZXR5IGluIGVhY2ggb3JkZXIgZnJvbSB0aGUgZmlyc3QgdG8gdGhlIDMwdGggb3JkZXIuIFRoZW4gdGhlIGN1cnZlIG9mIHRoZSB0cmVuZCBzaGlmdHMgZG93bndhcmQgYWZ0ZXIgdGhlIDMwdGggb3JkZXIuCgohW0Jhc2tldCBTaXplIFRyZW5kXShiYXNrZXRzaXplX3RyZW5kX1Bsb3QucG5nKQoKYHIgcm1hcmtkb3duOjpwYWdlZF90YWJsZShiYXNrZXRzaXplX3RyZW5kKWAKCiMjIyBCYXNrZXQgU2l6ZSBWYXJpYW5jZQoKVGhpcyBwbG90IHN1Z2dlc3RzIHRoYXQgdGhlIGN1c3RvbWVycyBhcmUgbGlrZWx5IHRvIGhhdmUgYW4gYXZlcmFnZSBvZiBhcHByb3guIDkuNCBpdGVtcyBiZWZvcmUgdGhlaXIgZmlyc3QgNTAgb3JkZXJzLiAKQWZ0ZXIgNTAsIHRoZSB2YXJpYW5jZSBpcyB3aWRlciwgeWV0IHRoZSBjdXN0b21lcnMgYmFza2V0IHNpemUgZGVjbGluZXMuCgohW1ZhcmlhbmNlIG9mIERhdGFdKGJhc2tldHNpemVfcGN0Q2hnX1Bsb3QucG5nKQoKCiMjIyBJY2UgQ3JlYW0gQmFza2V0IFRyZW5kClRoaXMgZ3JhcGggc3VnZ2VzdHMgdGhhdCB3aGVuIGNvbXBhcmVkIHRvIHRoZSB0b3RhbCBhdmVyYWdlIGJhc2tldCB0cmVuZCwgdGhlIGF2ZXJhZ2Ugb2YgaWNlIGNyZWFtIGlzIGEgcGFydCBvZiB0aGUgYmFza2V0IGFueXdoZXJlIGJldHdlZW4gdGhlIGZpcnN0IGFuZCA5MHRoIG9yZGVyIGFuZCB3aWxsIGhhdmUgMS42IHRvIDIuMCB0eXBlcyBvZiBpY2UgY3JlYW0uIEl0IGRvZXMgZGVjcmVhc2UgLCBidXQgc2luY2UgeW91IGNhbm5vdCBoYXZlIHBhcnRpYWwgaWNlIGNyZWFtIHByb2R1Y3QsIGl0IGlzIG1vc3QgbGlrZWx5IDIgZGlmZmVyZW50IHByb2R1Y3QgaWRzLgoKIVtJY2UgQ3JlYW0gQmFza2V0IFRyZW5kXShiYXNrZXRUcmVuZFBsb3RfRGVwQWlzbGUucG5nKQoKIyMjIEljZSBDcmVhbSBiYXNrZXQgVmFyaWFuY2UKVGhpcyBncmFwaCBzdWdnZXN0cyAyIGRpZmZlcmVudCB0eXBlcyBvZiBpY2UgY3JlYW0gcHJvZHVjdHMgd2l0aGluIGZpcnN0IDIwIG9yZGVyczsgdmFyaWFuY2Ugd2lsbCBpbmNyZWFzZSBieSB1cCB0byA2IHBlcmNlbnQsIGJ1dCBzdGlsbCBub3Qgc2lnbmlmaWNhbnQgZnJvbSB0aGUgZml0dGVkIGxpbmUuCgohW2ljZWNyZWFtIHZhcmlhbmNlXShiYXNrZXRzaXplRmlsdF9wY3RDaGdfUGxvdC5wbmcpCiMjCgoKCmBgYHtyLCBlY2hvPUZBTFNFfQojIGhvbGQgZm9yIHBhdGggbW9zdCB0cmF2ZWxsZWQgZGVwYXJ0bWVudCAtLS0gYWlzbGVzCmBgYAoKXG5ld3BhZ2UKCiMjIFRvcCBTZWxsaW5nIFByb2R1Y3RzIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQoKClRoZSB0YWJsZSBiZWxvdyBzaG93cyB0aGUgdG9wIHByb2R1Y3QgbmFtZXMuIAoKIyMjIEFsbCBEZXB0ICYgQWlzbGUKClRoaXMgdHJlZW1hcCBjb3ZlcnMgYWxsIGRlcGFydG1lbnRzIGFuZCBhaXNsZXMuCgohW0Zyb3plbiBkZXBhcnRtZW50IGFuZCBJY2UgQ3JlYW0gQWlzbGVdKGFsbF9kZXB0LnBuZykKCgpUaGlzIHRhYmxlIHNob3dzIHRvcCBwcm9kdWN0czoKYGBge3IsIGVjaG89RkFMU0V9CnJtYXJrZG93bjo6cGFnZWRfdGFibGUodG9wX3Byb2R1Y3RzKHRvcE4gPSA0MCkpCmBgYAoKIyMjIEZyb3plbiAmIEljZSBDcmVhbSAKQmFycGxvdCBvZiB0aGUgdG9wIHNlbGxpbmcgSWNlIENyZWFtIFByb2R1Y3RzLgoKCiFbRnJvemVuIGRlcGFydG1lbnQgYW5kIEljZSBDcmVhbSBBaXNsZV0oZnJvemVuX2ljZWNyZWFtX2JhcnBsdC5wbmcpCgoKClRhYmxlIHNob3dpbmcgdGhlIHRvIEljZSBDcmVhbSBQcm9kdWN0czoKCgpgYGB7ciwgZWNobz1GQUxTRX0Kcm1hcmtkb3duOjpwYWdlZF90YWJsZSh0b3BfcHJvZHVjdHMoZGVwYXJ0bWVudCA9ICJmcm96ZW4iLCBhaXNsZSA9ICJpY2UgY3JlYW0gaWNlIiwgdG9wTiA9IDE1KSkKYGBgCgoKIyMgCgpccGFnZWJyZWFrCgojIyMjIyBEYXRhIFNvdXJjZToKVGhlIEluc3RhY2FydCBPbmxpbmUgR3JvY2VyeSBTaG9wcGluZyBEYXRhc2V0IDIwMTfigJ0sIEFjY2Vzc2VkIGZyb20gaHR0cHM6Ly93d3cuaW5zdGFjYXJ0LmNvbS9kYXRhc2V0cy9ncm9jZXJ5LXNob3BwaW5nLTIwMTcgb24gSnVseSAyMDE3CgojIyMjIyMgVGhpcyBwcm9qZWN0IHdhcyBkZXZlbG9wZWQgb24gUiBTeXN0ZW0gZm9yIFN0YXRpc3RpY2FsIENvbXB1dGF0aW9uIGFuZCBHcmFwaGljcy4gQWxsIHNvdXJjZSBjb2RlIGlzIGluIFIgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UuIEZvciBpbmZvcm1hdGlvbiBzZWUgaHR0cHM6Ly93d3cuci1wcm9qZWN0Lm9yZy9hYm91dC5odG1sCgojIyMjIyBMaWNlbnNlIGFuZCBDb3B5cmlnaHQKICAgICBQcm9qZWN0OiBpbnN0YV9wdWJsaWNfYW5hbHlzaXMgcHJvamVjdAogICAgIENvcHlyaWdodChDKSBNaWNoYWVsIEdhcmNpYSAyMDE3LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMwogICAgIENvbnRhY3QgQXV0aG9yOiBtZ2FyX2RhdGFzY2llbmNlIGF0IHByb3Rvbm1haWwgZG90IGNvbSAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCAgICAgICAgICAgICAKICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgICAgICAgCiAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICAgICAgIAogICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMyBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAKICAgICBTZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzIGZvciBmdWxsIGxpY2Vuc2UuIEFkZGl0aW9uYWwgTGljZW5zZXMgCiAgICAgbWF5IGFwcGx5LiBSdW4gc291cmNlKGxpc3RQY2tnKSBmb3IgYSBsaXN0IG9mIGluc3RhbGxlZCBwYWNrYWdlcyBhbmQKICAgICBsaWNlbnNlcy4KIyMjIyMgQWxzbyBDb250YWlucyBTb3VyY2UgZnJvbTogCiAgICAgUGhpbGlwcCBTcGFjaHRob2x6IGFzIHBlcm1pdHRlZCBieSBBcGFjaGUgMi4wIExpY2Vuc2UgCiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgICAgUmVwb3NpdG9yeQogICAgIGh0dHBzOi8vd3d3LmthZ2dsZS5jb20vcGhpbGlwcHNwL2V4cGxvcmF0b3J5LWFuYWx5c2lzLWluc3RhY2FydC9jb2RlCgo=