From 7c9d094db89f03bd9e0bbc031c82fd51bdb3833c Mon Sep 17 00:00:00 2001 From: khushal Date: Tue, 4 Feb 2025 17:56:54 +0530 Subject: [PATCH] Squashed 'utils_v2/' content from commit 0fdc939c git-subtree-dir: utils_v2 git-subtree-split: 0fdc939cad796fa02eb9d1f817c53d28cf8c2364 --- .gitignore | 8 + __init__.py | 0 ai/__init__.py | 0 ai/image_classification/__init__.py | 0 ai/image_classification/async_blur.py | 202 + ai/image_classification/async_nsfw.py | 188 + ai/image_segmentation/__init__.py | 0 .../async_dichotomous_segmentation.py | 223 + ai/object_detection/__init__.py | 0 ai/object_detection/yolo.py | 176 + ai/tts/__init__.py | 0 ai/tts/easy_tts.py | 175 + ai/tts/test.wav | Bin 0 -> 162150 bytes api/__init__.py | 0 api/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 162 bytes api/__pycache__/async_quart.cpython-310.pyc | Bin 0 -> 32358 bytes api/__pycache__/codes.cpython-310.pyc | Bin 0 -> 3708 bytes api/__pycache__/log.cpython-310.pyc | Bin 0 -> 1778 bytes .../metrics_prometheus.cpython-310.pyc | Bin 0 -> 5163 bytes api/__pycache__/response.cpython-310.pyc | Bin 0 -> 1865 bytes api/async_quart.py | 1276 + api/codes.py | 164 + api/log.py | 139 + api/response.py | 133 + cache/__init__.py | 0 cache/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 164 bytes .../async_redis_cache.cpython-310.pyc | Bin 0 -> 13364 bytes cache/async_redis_cache.py | 497 + cache/async_redis_cache_v2.py | 568 + database/__init__.py | 0 database/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 167 bytes .../async_mongo_v2.cpython-310.pyc | Bin 0 -> 40213 bytes .../async_mysql_v2.cpython-310.pyc | Bin 0 -> 9372 bytes database/async_firebase.py | 504 + database/async_mongo.py | 843 + database/async_mongo_storage.py | 358 + database/async_mongo_v2.py | 1749 + database/async_mysql_v2.py | 451 + dataframe/__init__.py | 0 dataframe/splitter.py | 118 + date_time/__init__.py | 0 date_time/date_time.py | 365 + goog/__init__.py | 0 goog/controllers/__init__.py | 0 goog/controllers/base.py | 479 + goog/controllers/gmail/__init__.py | 0 goog/controllers/gmail/gmail_client.py | 977 + goog/controllers/gmail/gmail_message.py | 349 + .../chatgpt_suggested_message_format.json | 69 + .../formatted_message_list_20241126.json | 36 + ...3669615aa33694_no_attachment_20241126.json | 148 + ...7930033154ca_with_attachment_20241126.json | 258 + ..._message_03_19365d0239aa1aaf_20241126.json | 175 + ..._message_04_193640e74d93dc9b_20241126.json | 179 + ..._message_05_19363d6a7f50225a_20241126.json | 183 + ..._message_06_19363ba8e2582133_20241126.json | 183 + ..._message_07_19362f9983e58ea6_20241126.json | 210 + ..._message_08_19360aabcb976cfc_20241126.json | 175 + ..._message_09_193604ad97c9fe62_20241126.json | 183 + ..._message_10_1935e92672e67f22_20241126.json | 183 + goog/models/__init__.py | 0 goog/models/api_call.py | 132 + goog/models/auth_tokens.py | 243 + image/__init__.py | 0 image/scanner/__init__.py | 0 image/scanner/scanner.py | 410 + image/scanner/scanner_v2.py | 379 + logging/__init__.py | 0 logging/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 166 bytes logging/__pycache__/model.cpython-310.pyc | Bin 0 -> 1709 bytes logging/context.py | 468 + logging/model.py | 131 + mail/__init__.py | 0 mail/async_smpt.py | 443 + mail/mail_parser.py | 266 + network/__init__.py | 0 network/ip.py | 173 + network/ping.py | 201 + nse/__init__.py | 0 nse/controllers/__init__.py | 0 nse/controllers/base.py | 443 + nse/controllers/bhavcopy/__init__.py | 0 nse/controllers/bhavcopy/equities.py | 326 + nse/controllers/bhavcopy/fno.py | 325 + nse/controllers/calendar/__init__.py | 0 nse/controllers/calendar/corporate_actions.py | 282 + nse/controllers/calendar/corporate_events.py | 273 + ...ormatted_nse_corporate_event_calendar.json | 178 + ...1128_raw_nse_corporate_event_calendar.json | 156 + ...ormatted_nse_trading_holiday_calendar.json | 542 + ...1205_raw_nse_trading_holiday_calendar.json | 2104 + nse/controllers/calendar/holidays.py | 323 + nse/controllers/indices/__init__.py | 0 nse/controllers/indices/constituents.py | 378 + .../20241128_formatted_nse_index_master.json | 2301 + .../20241128_raw_nse_index_master.json | 2785 ++ ...41216_formatted_nse_index_constituent.json | 1252 + .../20241216_raw_nse_index_constituent.json | 2963 ++ nse/controllers/indices/master.py | 284 + nse/controllers/ipo/__init__.py | 0 nse/controllers/ipo/current.py | 252 + nse/controllers/ipo/past.py | 311 + nse/controllers/ipo/upcoming.py | 275 + nse/controllers/market/__init__.py | 0 ...0241205_formatted_nse_pre_market_data.json | 3134 ++ .../20241205_raw_nse_pre_market_data.json | 20309 ++++++++ nse/controllers/market/pre_market.py | 305 + nse/controllers/options/__init__.py | 0 .../20241122_raw_nse_nifty_option_chain.json | 40750 ++++++++++++++++ ...1128_formatted_nse_nifty_option_chain.json | 34811 +++++++++++++ nse/controllers/options/index.py | 315 + nse/models/__init__.py | 0 nse/models/api_call.py | 132 + nse/models/calendar.py | 396 + nse/models/indices.py | 319 + nse/models/ipo.py | 208 + nse/models/pre_market.py | 300 + payments/__init__.py | 0 payments/safaricom/__init__.py | 0 payments/safaricom/controllers/__init__.py | 0 .../safaricom/controllers/m_pesa_express.py | 410 + payments/safaricom/models/__init__.py | 0 payments/safaricom/models/api_call.py | 135 + payments/safaricom/models/auth.py | 269 + pdf/__init__.py | 0 pdf/pdf_maker.py | 1642 + queue/__init__.py | 0 queue/kafka/__init__.py | 0 queue/kafka/controllers/__init__.py | 0 queue/kafka/controllers/async_kafka.py | 523 + queue/kafka/controllers/kafka.py | 586 + queue/kafka/models/__init__.py | 0 queue/kafka/models/message.py | 257 + rate_limit/__init__.py | 0 rate_limit/async_token_bucket.py | 212 + rest/__init__.py | 0 rest/controllers/__init__.py | 0 rest/controllers/async_base.py | 350 + rest/models/__init__.py | 0 rest/models/api_call.py | 134 + security/__init__.py | 0 security/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 167 bytes .../__pycache__/sanitizers.cpython-310.pyc | Bin 0 -> 1929 bytes security/hash.py | 245 + security/otp.py | 156 + security/sanitizers.py | 135 + serialization/__init__.py | 0 serialization/json_serializer.py | 129 + serialization/pickle_serializer.py | 122 + serialization/universal_serializer.py | 265 + sms/__init__.py | 0 sms/india/__init__.py | 0 sms/india/nimbus/__init__.py | 0 sms/india/nimbus/controllers/__init__.py | 0 sms/india/nimbus/controllers/async_nimbus.py | 279 + sms/india/nimbus/models/__init__.py | 0 sms/india/nimbus/models/response.py | 150 + sms/kenya/__init__.py | 0 sms/kenya/savvy_bulk_sms/__init__.py | 0 .../savvy_bulk_sms/controllers/__init__.py | 0 .../controllers/async_savvy_bulk_sms.py | 230 + sms/models/__init__.py | 0 sms/models/sms_message.py | 157 + string/__init__.py | 0 string/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 165 bytes string/__pycache__/json.cpython-310.pyc | Bin 0 -> 3542 bytes string/__pycache__/regex.cpython-310.pyc | Bin 0 -> 7718 bytes string/fuzzy.py | 245 + string/help.py | 177 + string/json.py | 202 + string/regex.py | 290 + system/__init__.py | 0 system/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 165 bytes system/__pycache__/files.cpython-310.pyc | Bin 0 -> 11550 bytes system/cpu.py | 104 + system/files.py | 508 + telegram/__init__.py | 0 telegram/controllers/__init__.py | 0 telegram/controllers/async_bot.py | 659 + telegram/models/__init__.py | 0 telegram/models/api_call.py | 130 + telegram/models/update.py | 967 + trading/__init__.py | 0 trading/icici_breeze/__init__.py | 0 trading/icici_breeze/models/__init__.py | 0 trading/icici_breeze/models/auth_tokens.py | 200 + trading/zerodha_kite/__init__.py | 0 trading/zerodha_kite/controllers/__init__.py | 0 .../controllers/async_zerodha_kite.py | 1712 + trading/zerodha_kite/models/__init__.py | 0 trading/zerodha_kite/models/api_call.py | 182 + trading/zerodha_kite/models/auth_tokens.py | 248 + trading/zerodha_kite/models/instruments.py | 222 + trading/zerodha_kite/models/ticks.py | 358 + trading/zerodha_kite/models/user_funds.py | 257 + trading/zerodha_kite/models/user_profile.py | 177 + whatsapp/__init__.py | 0 whatsapp/nimbus/__init__.py | 0 whatsapp/nimbus/controllers/__init__.py | 0 .../controllers/async_nimbus_whatsapp.py | 236 + whatsapp/nimbus/models/__init__.py | 0 .../nimbus/models/send_message_response.py | 287 + 202 files changed, 145049 insertions(+) create mode 100644 .gitignore create mode 100644 __init__.py create mode 100644 ai/__init__.py create mode 100644 ai/image_classification/__init__.py create mode 100644 ai/image_classification/async_blur.py create mode 100644 ai/image_classification/async_nsfw.py create mode 100644 ai/image_segmentation/__init__.py create mode 100644 ai/image_segmentation/async_dichotomous_segmentation.py create mode 100644 ai/object_detection/__init__.py create mode 100644 ai/object_detection/yolo.py create mode 100644 ai/tts/__init__.py create mode 100644 ai/tts/easy_tts.py create mode 100644 ai/tts/test.wav create mode 100644 api/__init__.py create mode 100644 api/__pycache__/__init__.cpython-310.pyc create mode 100644 api/__pycache__/async_quart.cpython-310.pyc create mode 100644 api/__pycache__/codes.cpython-310.pyc create mode 100644 api/__pycache__/log.cpython-310.pyc create mode 100644 api/__pycache__/metrics_prometheus.cpython-310.pyc create mode 100644 api/__pycache__/response.cpython-310.pyc create mode 100644 api/async_quart.py create mode 100644 api/codes.py create mode 100644 api/log.py create mode 100644 api/response.py create mode 100644 cache/__init__.py create mode 100644 cache/__pycache__/__init__.cpython-310.pyc create mode 100644 cache/__pycache__/async_redis_cache.cpython-310.pyc create mode 100644 cache/async_redis_cache.py create mode 100644 cache/async_redis_cache_v2.py create mode 100644 database/__init__.py create mode 100644 database/__pycache__/__init__.cpython-310.pyc create mode 100644 database/__pycache__/async_mongo_v2.cpython-310.pyc create mode 100644 database/__pycache__/async_mysql_v2.cpython-310.pyc create mode 100644 database/async_firebase.py create mode 100644 database/async_mongo.py create mode 100644 database/async_mongo_storage.py create mode 100644 database/async_mongo_v2.py create mode 100644 database/async_mysql_v2.py create mode 100644 dataframe/__init__.py create mode 100644 dataframe/splitter.py create mode 100644 date_time/__init__.py create mode 100644 date_time/date_time.py create mode 100644 goog/__init__.py create mode 100644 goog/controllers/__init__.py create mode 100644 goog/controllers/base.py create mode 100644 goog/controllers/gmail/__init__.py create mode 100644 goog/controllers/gmail/gmail_client.py create mode 100644 goog/controllers/gmail/gmail_message.py create mode 100644 goog/controllers/gmail/json/messages/chatgpt_suggested_message_format.json create mode 100644 goog/controllers/gmail/json/messages/formatted_message_list_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_01_193669615aa33694_no_attachment_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_02_19367930033154ca_with_attachment_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_03_19365d0239aa1aaf_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_04_193640e74d93dc9b_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_05_19363d6a7f50225a_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_06_19363ba8e2582133_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_07_19362f9983e58ea6_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_08_19360aabcb976cfc_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_09_193604ad97c9fe62_20241126.json create mode 100644 goog/controllers/gmail/json/messages/raw_message_10_1935e92672e67f22_20241126.json create mode 100644 goog/models/__init__.py create mode 100644 goog/models/api_call.py create mode 100644 goog/models/auth_tokens.py create mode 100644 image/__init__.py create mode 100644 image/scanner/__init__.py create mode 100644 image/scanner/scanner.py create mode 100644 image/scanner/scanner_v2.py create mode 100644 logging/__init__.py create mode 100644 logging/__pycache__/__init__.cpython-310.pyc create mode 100644 logging/__pycache__/model.cpython-310.pyc create mode 100644 logging/context.py create mode 100644 logging/model.py create mode 100644 mail/__init__.py create mode 100644 mail/async_smpt.py create mode 100644 mail/mail_parser.py create mode 100644 network/__init__.py create mode 100644 network/ip.py create mode 100644 network/ping.py create mode 100644 nse/__init__.py create mode 100644 nse/controllers/__init__.py create mode 100644 nse/controllers/base.py create mode 100644 nse/controllers/bhavcopy/__init__.py create mode 100644 nse/controllers/bhavcopy/equities.py create mode 100644 nse/controllers/bhavcopy/fno.py create mode 100644 nse/controllers/calendar/__init__.py create mode 100644 nse/controllers/calendar/corporate_actions.py create mode 100644 nse/controllers/calendar/corporate_events.py create mode 100644 nse/controllers/calendar/examples/20241128_formatted_nse_corporate_event_calendar.json create mode 100644 nse/controllers/calendar/examples/20241128_raw_nse_corporate_event_calendar.json create mode 100644 nse/controllers/calendar/examples/20241205_formatted_nse_trading_holiday_calendar.json create mode 100644 nse/controllers/calendar/examples/20241205_raw_nse_trading_holiday_calendar.json create mode 100644 nse/controllers/calendar/holidays.py create mode 100644 nse/controllers/indices/__init__.py create mode 100644 nse/controllers/indices/constituents.py create mode 100644 nse/controllers/indices/examples/20241128_formatted_nse_index_master.json create mode 100644 nse/controllers/indices/examples/20241128_raw_nse_index_master.json create mode 100644 nse/controllers/indices/examples/20241216_formatted_nse_index_constituent.json create mode 100644 nse/controllers/indices/examples/20241216_raw_nse_index_constituent.json create mode 100644 nse/controllers/indices/master.py create mode 100644 nse/controllers/ipo/__init__.py create mode 100644 nse/controllers/ipo/current.py create mode 100644 nse/controllers/ipo/past.py create mode 100644 nse/controllers/ipo/upcoming.py create mode 100644 nse/controllers/market/__init__.py create mode 100644 nse/controllers/market/examples/20241205_formatted_nse_pre_market_data.json create mode 100644 nse/controllers/market/examples/20241205_raw_nse_pre_market_data.json create mode 100644 nse/controllers/market/pre_market.py create mode 100644 nse/controllers/options/__init__.py create mode 100644 nse/controllers/options/examples/20241122_raw_nse_nifty_option_chain.json create mode 100644 nse/controllers/options/examples/20241128_formatted_nse_nifty_option_chain.json create mode 100644 nse/controllers/options/index.py create mode 100644 nse/models/__init__.py create mode 100644 nse/models/api_call.py create mode 100644 nse/models/calendar.py create mode 100644 nse/models/indices.py create mode 100644 nse/models/ipo.py create mode 100644 nse/models/pre_market.py create mode 100644 payments/__init__.py create mode 100644 payments/safaricom/__init__.py create mode 100644 payments/safaricom/controllers/__init__.py create mode 100644 payments/safaricom/controllers/m_pesa_express.py create mode 100644 payments/safaricom/models/__init__.py create mode 100644 payments/safaricom/models/api_call.py create mode 100644 payments/safaricom/models/auth.py create mode 100644 pdf/__init__.py create mode 100644 pdf/pdf_maker.py create mode 100644 queue/__init__.py create mode 100644 queue/kafka/__init__.py create mode 100644 queue/kafka/controllers/__init__.py create mode 100644 queue/kafka/controllers/async_kafka.py create mode 100644 queue/kafka/controllers/kafka.py create mode 100644 queue/kafka/models/__init__.py create mode 100644 queue/kafka/models/message.py create mode 100644 rate_limit/__init__.py create mode 100644 rate_limit/async_token_bucket.py create mode 100644 rest/__init__.py create mode 100644 rest/controllers/__init__.py create mode 100644 rest/controllers/async_base.py create mode 100644 rest/models/__init__.py create mode 100644 rest/models/api_call.py create mode 100644 security/__init__.py create mode 100644 security/__pycache__/__init__.cpython-310.pyc create mode 100644 security/__pycache__/sanitizers.cpython-310.pyc create mode 100644 security/hash.py create mode 100644 security/otp.py create mode 100644 security/sanitizers.py create mode 100644 serialization/__init__.py create mode 100644 serialization/json_serializer.py create mode 100644 serialization/pickle_serializer.py create mode 100644 serialization/universal_serializer.py create mode 100644 sms/__init__.py create mode 100644 sms/india/__init__.py create mode 100644 sms/india/nimbus/__init__.py create mode 100644 sms/india/nimbus/controllers/__init__.py create mode 100644 sms/india/nimbus/controllers/async_nimbus.py create mode 100644 sms/india/nimbus/models/__init__.py create mode 100644 sms/india/nimbus/models/response.py create mode 100644 sms/kenya/__init__.py create mode 100644 sms/kenya/savvy_bulk_sms/__init__.py create mode 100644 sms/kenya/savvy_bulk_sms/controllers/__init__.py create mode 100644 sms/kenya/savvy_bulk_sms/controllers/async_savvy_bulk_sms.py create mode 100644 sms/models/__init__.py create mode 100644 sms/models/sms_message.py create mode 100644 string/__init__.py create mode 100644 string/__pycache__/__init__.cpython-310.pyc create mode 100644 string/__pycache__/json.cpython-310.pyc create mode 100644 string/__pycache__/regex.cpython-310.pyc create mode 100644 string/fuzzy.py create mode 100644 string/help.py create mode 100644 string/json.py create mode 100644 string/regex.py create mode 100644 system/__init__.py create mode 100644 system/__pycache__/__init__.cpython-310.pyc create mode 100644 system/__pycache__/files.cpython-310.pyc create mode 100644 system/cpu.py create mode 100644 system/files.py create mode 100644 telegram/__init__.py create mode 100644 telegram/controllers/__init__.py create mode 100644 telegram/controllers/async_bot.py create mode 100644 telegram/models/__init__.py create mode 100644 telegram/models/api_call.py create mode 100644 telegram/models/update.py create mode 100644 trading/__init__.py create mode 100644 trading/icici_breeze/__init__.py create mode 100644 trading/icici_breeze/models/__init__.py create mode 100644 trading/icici_breeze/models/auth_tokens.py create mode 100644 trading/zerodha_kite/__init__.py create mode 100644 trading/zerodha_kite/controllers/__init__.py create mode 100644 trading/zerodha_kite/controllers/async_zerodha_kite.py create mode 100644 trading/zerodha_kite/models/__init__.py create mode 100644 trading/zerodha_kite/models/api_call.py create mode 100644 trading/zerodha_kite/models/auth_tokens.py create mode 100644 trading/zerodha_kite/models/instruments.py create mode 100644 trading/zerodha_kite/models/ticks.py create mode 100644 trading/zerodha_kite/models/user_funds.py create mode 100644 trading/zerodha_kite/models/user_profile.py create mode 100644 whatsapp/__init__.py create mode 100644 whatsapp/nimbus/__init__.py create mode 100644 whatsapp/nimbus/controllers/__init__.py create mode 100644 whatsapp/nimbus/controllers/async_nimbus_whatsapp.py create mode 100644 whatsapp/nimbus/models/__init__.py create mode 100644 whatsapp/nimbus/models/send_message_response.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ebb370b --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +/.venv/ +/.idea/ +**/__pycache__/ +__pycache__/ + +*.pem +*.pyc +*.pyd \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ai/__init__.py b/ai/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ai/image_classification/__init__.py b/ai/image_classification/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ai/image_classification/async_blur.py b/ai/image_classification/async_blur.py new file mode 100644 index 0000000..f69af42 --- /dev/null +++ b/ai/image_classification/async_blur.py @@ -0,0 +1,202 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 2nd Sept., 2024 + + OBJECTIVE: + + To provide an easy way to assess images for blurriness. + Tried and implemented using HuggingFace behaviour_models. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# For using the AI model: +import torch +from transformers import pipeline + +# To download images from URLs: +import requests + +# To read images: +from PIL import Image + +# Common: +from shared import variables + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AssessImageBlur: + + def __init__( + self, + model, + blur_label = "Blur", + clarity_label = "Normal", + blur_threshold = 0.25, + clarity_threshold = 0.65 + ): + + """ + This class assesses the input image and tells if it is blurry or clear. + :param model: The model to use. Either the name of the HuggingFace repo, or the directory where the model is + stored. + :param blur_threshold: The max allowed blurriness (0 to 1 range). + :param clarity_threshold: The minimum needed clarity (0 to 1 range). + """ + + # Note down the config: + self.__model = model + self.__device = "gpu" if torch.cuda.is_available() else "cpu" + self.__blur_label = blur_label + self.__clarity_label = clarity_label + self.__blur_threshold = blur_threshold + self.__clarity_threshold = clarity_threshold + + # Initialize the classifier: + self.__classifier = pipeline( + task = "image-classification", + model = self.__model, + device = self.__device + ) + + @staticmethod + async def read_image(source): + + """ + Reads an image in whichever format it is provided and returns it as a PIL object. + :param source: The image as either a path or a URL or a io.BytesIO object. + :return: The image opened as a PIL object. + """ + + # If the input image is already a PIL image: + if isinstance(source, Image.Image): return source + + # If a buffer is provided: + elif isinstance(source, io.BytesIO): + source.seek(0) + return Image.open(source) + + # If a string is provided (local path or URL): + elif isinstance(source, str): + if source.startswith("http://") or source.startswith("https://"): + response = await variables.http_client.get(source) + return Image.open(io.BytesIO(response.content)) + else: return Image.open(source) + + async def classify(self, image): + + """ + To get the prediction of the model from the given input image. + :param image: The image (as a PIL object or file path or a URL). + :return: The dictionary of classes with their respective predictions. + """ + + image = await self.read_image(image) + predictions = self.__classifier(image) + classes = {p["label"]: p["score"] for p in predictions} + return classes + + async def is_ok( + self, + image, + blur_threshold = None, + clarity_threshold = None + ): + + """ + Checks if the image given to it can be used, or should be rejected. + :param image: The image (as a PIL object or file path or a URL). + :param blur_threshold: A custom threshold to test against. If not provided, the default will be taken that was + provided when the instance was created. + :param clarity_threshold: A custom threshold to test against. If not provided, the default will be taken that + was provided when the instance was created. + :return: True if the image is okay, else False. + """ + + image = await self.read_image(image) + blur_threshold = blur_threshold or self.__blur_threshold + clarity_threshold = clarity_threshold or self.__clarity_threshold + classes = await self.classify(image) + if ( + classes[self.__blur_label] <= blur_threshold and + classes[self.__clarity_label] >= clarity_threshold + ): return True + return False + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + + + async def main(): + image = r"/home/developer/Downloads/low-res-check.png" + assessor = AssessImageBlur(model = r"/home/developer/PycharmProjects/utils/data/ai/behaviour_models/hugging_face/image_classification/BlurOrBokeh") + usable = await assessor.is_ok(image) + classes = await assessor.classify(image) + print("IS OKAY:", usable) + print("CLASSES:", classes) + + asyncio.run(main()) diff --git a/ai/image_classification/async_nsfw.py b/ai/image_classification/async_nsfw.py new file mode 100644 index 0000000..446c34a --- /dev/null +++ b/ai/image_classification/async_nsfw.py @@ -0,0 +1,188 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 2nd Sept., 2024 + + OBJECTIVE: + + To provide an easy way to assess images for adult content. + Tried and implemented using HuggingFace behaviour_models. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# For using the AI model: +import torch +from transformers import pipeline + +# To download images from URLs: +import requests + +# To read images: +from PIL import Image + +# Common: +from shared import variables + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AssessImageNSFW: + + def __init__( + self, + model, + nsfw_label = "nsfw", + nsfw_threshold = 0.25, + ): + + """ + This class assesses the input image and tells if it is blurry or clear. + :param model: The model to use. Either the name of the HuggingFace repo, or the directory where the model is + stored. + :param nsfw_threshold: The max allowed blurriness (0 to 1 range). + """ + + # Note down the config: + self.__model = model + self.__device = "gpu" if torch.cuda.is_available() else "cpu" + self.__nsfw_label = nsfw_label + self.__nsfw_threshold = nsfw_threshold + + # Initialize the classifier: + self.__classifier = pipeline( + task = "image-classification", + model = self.__model, + device = self.__device + ) + + @staticmethod + async def read_image(source): + + """ + Reads an image in whichever format it is provided and returns it as a PIL object. + :param source: The image as either a path or a URL or a io.BytesIO object. + :return: The image opened as a PIL object. + """ + + # If the input image is already a PIL image: + if isinstance(source, Image.Image): return source + + # If a buffer is provided: + elif isinstance(source, io.BytesIO): + source.seek(0) + return Image.open(source) + + # If a string is provided (local path or URL): + elif isinstance(source, str): + if source.startswith("http://") or source.startswith("https://"): + response = await variables.http_client.get(source) + return Image.open(io.BytesIO(response.content)) + else: return Image.open(source) + + async def classify(self, image): + + """ + To get the prediction of the model from the given input image. + :param image: The image (as a PIL object or file path or a URL). + :return: The dictionary of classes with their respective predictions. + """ + + image = await self.read_image(image) + predictions = self.__classifier(image) + classes = {p["label"]: p["score"] for p in predictions} + return classes + + async def is_ok( + self, + image, + nsfw_threshold = None + ): + + """ + Checks if the image given to it can be used, or should be rejected. + :param image: The image (as a PIL object or file path or a URL). + :param nsfw_threshold: A custom threshold to test against. If not provided, the default will be taken that was + provided when the instance was created. + :return: True if the image is okay, else False. + """ + + image = await self.read_image(image) + nsfw_threshold = nsfw_threshold or self.__nsfw_threshold + classes = await self.classify(image) + return True if classes[self.__nsfw_label] <= nsfw_threshold else False + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + + + async def main(): + + assessor = AssessImageNSFW(model = r"/path/to/model") + usable = await assessor.is_ok(r"/path/to/image/img.jpg") + classes = await assessor.classify(r"https://...") + + + asyncio.run(main()) diff --git a/ai/image_segmentation/__init__.py b/ai/image_segmentation/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ai/image_segmentation/async_dichotomous_segmentation.py b/ai/image_segmentation/async_dichotomous_segmentation.py new file mode 100644 index 0000000..fb6d6c7 --- /dev/null +++ b/ai/image_segmentation/async_dichotomous_segmentation.py @@ -0,0 +1,223 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Saturday, 14th Sept., 2024 + + OBJECTIVE: + + To provide an easy way to get masks from dichotomous image segmentation. + + This code uses a very specific model from HuggingFace: "ZhengPeng7/BiRefNet-portrait". + You may experiment with other behaviour_models too, but make sure that model is made for "dichotomous" behaviour. This + means that the model should have only two classes like "foreground", and "background". The specified model was + trained for implementing portrait mode style blurring of backgrounds. + + The originally tested model has an MIT license as per their GitHub page. The code in this file may or may not + support drop-in replacement for other behaviour_models, please be aware about this. + + REFERENCES: + + 01. https://huggingface.co/ZhengPeng7/BiRefNet-portrait + 02. https://github.com/ZhengPeng7/BiRefNet + + DOWNLOADS: + + 01. https://huggingface.co/ZhengPeng7/BiRefNet-portrait/tree/main + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For system-level activities: +import io + +# To work with PIL images: +from PIL import Image + +# To make asynchronous HTTP calls: +from shared.variables import http_client + +# For using the AI model: +import torch +from torchvision import transforms +from transformers import AutoModelForImageSegmentation + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class DichotomousSegmenter: + + def __init__( + self, + model = r"zhengpeng7/BiRefNet-portrait" + ): + + """ + This class uses Dichotomous Image Segmentation to produce a mask of what is in the foreground (or what is of + interest in a given image). + :param model: The path of the model. + """ + + # Check if GPU is available for faster predictions: + self.__cuda_is_available = True if torch.cuda.is_available() else False + + # Initialize the model: + self.__model = AutoModelForImageSegmentation.from_pretrained( + pretrained_model_name_or_path = model, + trust_remote_code = True + ) + torch.set_float32_matmul_precision(["high", "highest"][0]) + self.__model.to("cuda" if self.__cuda_is_available else "cpu") + + @staticmethod + async def read_image(source): + + """ + Reads an image in whichever format it is provided and returns it as a PIL object. + :param source: The image as either a path or a URL or a io.BytesIO object. + :return: The image opened as a PIL object. + """ + + # If the input image is already a PIL image: + if isinstance(source, Image.Image): return source + + # If a buffer is provided: + elif isinstance(source, io.BytesIO): + source.seek(0) + return Image.open(source) + + # If a string is provided (local path or URL): + elif isinstance(source, str): + if source.startswith("http://") or source.startswith("https://"): + response = await http_client.get(source) + return Image.open(io.BytesIO(response.content)) + else: return Image.open(source) + + async def get_mask(self, image): + + """ + Process the image to figure out the mask. In some cases (like the image of a sunset) you will have no white + pixels in the mask. White pixels represent the areas that the AI considered to be the foreground (area of + interest) and the black parts are the background. + :param image: The image data as either a PIL object, or a path to a file on the local disk, or a URL. + :return: The mask as a PIL object. + """ + + # Prepare the image transformer: + image_size = (1024, 1024) + transform_image = transforms.Compose([ + transforms.Resize(image_size), + transforms.ToTensor(), + transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) + ]) + + # Read and transform the image: + image = await self.read_image(image) + input_image = transform_image(image).unsqueeze(0).to("cuda" if self.__cuda_is_available else "cpu") + + # Make the prediction: + with torch.no_grad(): + if self.__cuda_is_available: mask = self.__model(input_image)[-1].sigmoid().cuda() + else: mask = self.__model(input_image)[-1].sigmoid().cpu() + + # Create a PIL object of the mask data: + mask = mask[0].squeeze() + mask = transforms.ToPILImage()(mask) + mask = mask.resize(image.size) + + # Done here: + return mask + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + import numpy as np + + async def main(): + + model = DichotomousSegmenter() + + images = [ + # r"/home/developer/Downloads/kate.jpg", + # r"/home/developer/Downloads/IMG-20240730-WA0001.jpg", + # r"/home/developer/Downloads/pexels-pixabay-57416.jpg", + # r"/home/developer/Downloads/summer_clothes.jpg", + # r"/home/developer/Downloads/low_res_cat - upscaled.png", + # r"/home/developer/Downloads/blurry_traffic.jpg", + r"/home/developer/Downloads/card_0.jpg", + r"/home/developer/Downloads/card_1.jpg", + r"/home/developer/Downloads/card_2.jpg", + r"/home/developer/Downloads/card_3.jpg", + r"/home/developer/Downloads/sushmita_card.jpg", + r"/home/developer/Downloads/niranjan_card.jpg", + r"/home/developer/Downloads/niranjan_card_2.jpg", + ] + + for image in images: + print(image.split("/")[-1]) + image = await DichotomousSegmenter.read_image(image) + mask = await model.get_mask(image) + image.show() + mask.show() + print("MASK!") + array = np.array(mask) + print("Dimensions of the array:", array.shape) + masked_count = np.sum(array > 125) + print(masked_count, type(masked_count), np.size, type(np.size)) + percentage = masked_count / np.prod(array.shape) + print("Area:", round(percentage * 100, 4)) + # image.putalpha(mask) + # image.show() + # mask.show() + + + asyncio.run(main()) diff --git a/ai/object_detection/__init__.py b/ai/object_detection/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ai/object_detection/yolo.py b/ai/object_detection/yolo.py new file mode 100644 index 0000000..a435ca6 --- /dev/null +++ b/ai/object_detection/yolo.py @@ -0,0 +1,176 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 4th Jul, 2024 + + OBJECTIVE: + + To provide a class to detect objects in images using YOLO behaviour_models. + + REFERENCES: + + 1) Code Examples: https://docs.ultralytics.com/usage/python/ + 2) Models: https://docs.ultralytics.com/models/yolov8/#supported-tasks-and-modes + + DOWNLOADS: + + N/A + +""" + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import os + +# To use YOLO architecture: +from ultralytics import YOLO + +# To work with images: +from PIL import Image + +# utils: +from utils_v2.string import json + +# Common: +from shared import constants + +# For debugging: +from icecream import IceCreamDebugger + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class YoloDetect: + + def __init__( + self, + model_file, + debug = True, + debug_prefix = "YOLO | " + ): + + # Load the model: + self._model = YOLO(model = model_file) + + # Initialize the dbugging tool: + self._printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self._printer.disable() + + def disable_debug(self): + self._printer.disable() + + def enable_debug(self): + self._printer.enable() + + @staticmethod + def _process_result(raw_result): + + # Extract the various types of results available from the inference: + speed = {k: (v / 100.0) for k, v in raw_result.speed.items()} + class_mapping = raw_result.names + probabilities = raw_result.probs + boxes = raw_result.boxes + masks = raw_result.masks + + # Construct a default response: + response_json = { + "speed": speed, + "classes": class_mapping, + "boxes": None + } + + # Object-Detection results: + formatted_boxes = [] + for box in boxes: + detected_class = int(box.cls.numpy()[0]) + x1, y1, x2, y2 = box.xyxy[0] + formatted_boxes.append( + { + "class": detected_class, + "className": class_mapping[detected_class], + "confidence": float(box.conf.numpy()[0]), + "x1": int(x1.numpy()), + "y1": int(y1.numpy()), + "x2": int(x2.numpy()), + "y2": int(y2.numpy()) + } + ) + response_json["boxes"] = formatted_boxes + + # Done here: + return response_json + + def predict(self, image, show = False, verbose = False): + + # Process the input image with the given task: + results = self._model( + source = image, + show = show, + verbose = verbose + ) + + # Based on the task, interpret the results: + results_json = self._process_result(results[0]) + + # Done here: + return results_json + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + # model_file_path = os.path.join(constants.PROJECT_DIRECTORY, "ai", "yolo", "behaviour_models", "yolov8x.pt") + model_file_path = r"/home/developer/PycharmProjects/utils/data/ai/models/hugging_face/object_detection/YOLOv10-Document-Layout-Analysis/yolov10x_best.pt" + # sample_image_path = r"/home/developer/Downloads/2_cats.jpg" + sample_image_path = r"/home/developer/Downloads/flattened_image.jpg" + my_yolo = YoloDetect(model_file = model_file_path) + results = my_yolo.predict(image = Image.open(sample_image_path)) + print("FINAL RESULTS:", json.to_string(results)) + diff --git a/ai/tts/__init__.py b/ai/tts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/ai/tts/easy_tts.py b/ai/tts/easy_tts.py new file mode 100644 index 0000000..fc4bb9b --- /dev/null +++ b/ai/tts/easy_tts.py @@ -0,0 +1,175 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 26th Sept., 2024 + + OBJECTIVE: + + To provide a fast way to make audio from TTS engines. + + REFERENCES: + + 01. Usage: https://github.com/myshell-ai/MeloTTS/blob/main/docs/install.md#python-api + 02. Installation: https://github.com/myshell-ai/MeloTTS/blob/main/docs/install.md#linux-and-macos-install + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# To use the AI: +from melo.api import TTS +import numpy as np +import soundfile + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class EasyTTS: + + __sampling_rate = 44_100 + + def __init__( + self, + language = "EN", + speed = 1.0 + ): + + self.__audio = np.zeros(1) + self.__language = language + self.__speed = speed + self.__model = TTS(language = language, device = "auto") + self.__speakers = self.__model.hps.data.spk2id + + def list_speakers(self): + return list(self.__speakers.keys()) + + def speak( + self, + text, + speaker + ): + + this_audio = self.__model.tts_to_file( + text, + self.__speakers[speaker], + speed = self.__speed, + quiet = True + ) + + self.__audio = np.concatenate((self.__audio, this_audio)) + + def pause(self, seconds): + + self.__audio = np.concatenate(( + self.__audio, + np.zeros(int(self.__sampling_rate * seconds)) + )) + + def to_wav(self, path = None): + + if path is None: + audio_buffer = io.BytesIO() + soundfile.write(audio_buffer, self.__audio, self.__sampling_rate) + return audio_buffer + + else: soundfile.write(path, self.__audio, self.__sampling_rate) + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + speaker = "EN-BR" + tts_maker = EasyTTS(language = "EN", speed = 0.9) + + tts_maker.speak( + text = """ + Imagine delighting your doctors with a personalized calendar, + crafted from their own cherished memories. + """, + speaker = speaker + ) + tts_maker.pause(seconds = 0.3) + tts_maker.speak( + text = """ + Every day, as they turn the page, + they’ll not only relive those special moments but also remember you, + the one who made it happen. + """, + speaker = speaker + ) + tts_maker.pause(seconds = 0.75) + tts_maker.speak( + text = "STEP 1:", + speaker = speaker + ) + tts_maker.pause(seconds = 0.3) + tts_maker.speak( + text = "Start by identifying the doctors you’d like to engage with, and add them to our app.", + speaker = speaker + ) + tts_maker.pause(seconds = 0.3) + tts_maker.speak( + text = "No rush, you can add their photographs later as well.", + speaker = speaker + ) + tts_maker.pause(seconds = 0.3) + tts_maker.speak( + text = "With this, your engagement funnel is created.", + speaker = speaker + ) + + tts_maker.to_wav(r"/home/developer/Downloads/voiceover.wav") diff --git a/ai/tts/test.wav b/ai/tts/test.wav new file mode 100644 index 0000000000000000000000000000000000000000..d38cfc00b1dfaeac3bbc500cb2dea7b17deeca71 GIT binary patch literal 162150 zcmeD^2bdH^vy*2w-CiIoIfEbwsGy)^kqm;M1j$JOMS>DllA=UO0-}fr5*1XCq=14F z6cqzm^1-Feljl`kJ8$<+E(!Yo?|t5W>~yHy)z#HKz1pc&ix$0JV5r9%cWplKndi&I zQxrwRr`ZOIn%Rw}7%HCX-{<*04FJZ1KPvN^lmPUPKdk5VmlN#GDcaEFnLpZjLH+;e zkJ{^I`k=jHN6ChX+L1um?YI7nQbt-?Yj!<%nQvW&SPDdcB1iN)7NX!~q*HLLf?z}? zC8a3t-_P6Tm0bqAZuj5(nLntTH$Up_P_UO+cft1_j3IIP2IL*{E}RDx~yxN}Qc`?i_EwWVdFi?9%5|kCi_!*!=X{^zs9XFu7azW>o%J z`}|pg-1ytt=LVCVBI0Ck%UX~2-;93V_*tplYAu%E&EzR4{U{Am`YZT3<7B69*K@}B zJA3{L_rGS9+ouKc&yAX`Q|vQ$_}qF6+84_;Cpi%&e{^kX`GdYWR90>_Me@8k#;vtx z<#%he^2RQx9=85@Qzj7E>D%~Z1he<%m+D`Kv-#&l!S1)8Il<+({qN8)*88*5&tA{3 zoH@bWE;~f&BgLF*(e|86S@Cm*%U=)CFK1ZNA1iUru=(k+>1BQ92lMZOK}n*tiCoe8 zt(LM<&kwcSF^GKGzw<*kzc8`ZxEW4%-lTpr$eXuig~!^>;r_nX+&L2YvVZ3+P43ik z#=Ch>l<&>^3%bJ~^m3w=pLV1Wg|p?0w*2>%V&%w z6l{xSecpaP`K4&fkze?Nu3!15d;1{K*KNJX^Y+osi&B(tPLKtY2%&SLl)v^^ex!Ws zH1o$9p<=n`AFCjc1+$NBfr4=OZ-TYux3$hbmf8FNEPHm0KSTW8Ew=3W<5Mu`{Lzd; z5qm}Jd6)h#*)Qr1f3FpDvsyvzl{b9e5IM^ewMfn|x%b!)t55v3YiiiOV&I~MM*mt#2)DGEZ%mb)N0 z|0Jv}U+gnC{s@;_f5G~qTyw(98zPEn!$w;QUP2l+mQ9a5?bh4-%uYMX{r2)9)R0?2 z=o0A)hEovwe>bcxzpVkO+gzi)cE8;deP+dow%@!|FzB1p$gLIW=hpvs_YwUHBE#Qp zk-Ri67=K&8f@qkR1O@BA{hU!JB16G!fjG833Z}z<6LeOcv+85lvclY&^tP>UjY<^T zmNDA$_m+@fEQjp1?ESH@|JTd5t^Y6SSTI=&2L1nU{%7~l*by(NZL-t)&(w(qw~M!J zkDTen^2-~Vcu>yN{=0f?eejuI$?}4YrD>P*OZ)GD%dS~o^8Xz&6ojU2v#ig8P`G`t zQ5o`2li=hZ{-1`7>J%;gb28-3(}u`fCL1!lhv$tM3xQOk_1i-;N-wVx;g=WGt@Oug zmp2_-|GXjpJ0bFx--aM|!P>29a;x}xanDXadp$4w-1}{7y>)v(F1a3Uxl;fCtBMzo0?tE zO=<#TW90QL7<69L{z`wr#VX|@BflTZ0+!we+_RhWI=i74UZ79{-1w&2`2f@ zKUQ`~n>)70mb1f=dfpH>$Gdqekv*1X?8ruYV@o%ul;74^Uirnj6*waKtx$-?we1kw zmbDzKU*6E!M?4lgE8U!GvE!8!O#a(*=Wpvnp82Pm8)R0Rb}cuItbMmr7Nm^yVmV~5 z$M)s7Ok}jb^NW=~IGbwpnLoV$7O1G)cIls$jBw4Jr!ATN%pLl6_Szird24i|lx`QD zD8*Zq?bal^9oVtDU^#D^1;@ypCgGYN&V)|>A#cu?;Aht&TDP(O++z1cpEgXi<@S|q z+Ii`lSATYiV&SnITh9)Q_1JzQQ!G?e%A1#BVY8P13{Tdeto)+{x)xXM(IcUV{xMWS!KvX%=VQV zy;#sFeH`ff~wf%>1cKNS8P0IvCq=HZUCeO^uP3m?#!HL%LQ_4!2VBDMe*QQCJNsYAHHi@NTSVlGr+0sTeiIp$PpOolK22ox%cJ9wusff(B z+_ADnX&^juvZ10S!k^G1tx<^xv@IL`zn+C~qz~Jo9%ECnpElH=Wg@mgI?)m-6WTVW zU9%}>eQY%5@Ybd(4zw&5Rgwz-jdtSp%znNU$UyUl(Qc%(sEY-;3b z+r)0QxgjjJ+19Y32@TuUgr;pf{Qn@>e_44U6@2_}jFj(nK||xnPS;$8L+I5j%2(p50Oj zJ2#t0Rwx^mXiE6oQp9Q+^>r46w8Jp^vO52*_7;d(iU5@F|$7jCTT@@BAs2wC!u2Vun*zbG<+3^1bZp8|yzG#qhrpw>q~C_JxyM3bAA!q0 z{}IZ@Bwm=cCAOE8?S6a`?pPv!u{zjou{}f%yT|5hKeIzdsYUT@J#3uVdRDqN4uQZv zfv4c5jF}D zTShBJdr3KKe-sZ(x%Fj-%r9(K{#mJHuSH?A_7KUlwqY$N_&-Db*%Aci<`iOei!I-b zZfqNo^X3?_tu|KzZ&S!xvs-P+WAUSXSxY%l$O`pu?OzN0Yk_|)@UI2_wZOj?_}2n| zzXfv2U9dfSU-o)->9XVGRlga&-Ig6Uw%snrK5h8_{wK*W?R+r$B=){_`Lol{PS@_w z-cGC;tR1*@vv;S z$3C%a*R#WCuM=35pkVg1>D$ljbhFo^e4@Ov!^GBYy0Ny2?a!%f<7Mx+>11!ush$&^ zoZxe6Cwk{R9z-ttJ0~iLf4d~gnMZCte>ZoVzHJG+elwW}46#XWaEO~%|IO(C9c^U% z?C(Ewi0U0J{Tb@7wGfJb4fl3ok#Vqfi&DKE<6~3BXO!~oDaFzz<=aE|uTm+PhOyHB zRgSlUXY%09F^WtAH|H_M6*8YNPQ*ex|9RJfb zTYh}rOqSUGoM3K-mvh_A`Q!}$-_~<`tPs_TSU6h$Z!Tr^hT9`)R+|4=YuK{f9?fnC zmH)Iv`Qsm*(+Gb%^!}%47pw(^1U^#u^Rk!O0iVz@?WPG#Y9@sTJ{p* zgsnEu+~K46QTS-v%}P-?yL2-syUm8l`m}qqKBF+C9rgUPu2CqvbTca0X7@**c3W2Z z*?HttkJ8Crvg!W0JytebpPcANWsa54rWvJ_6TS^ep1H$EWkKjzeo>o8VPgAjE(9(X zCbn#Ix1qB>V{x&^wqNWs7ACeFOUZ_}Y1nW!jNNay->e?nXZPFqu}>Q=wk@`tS3kn$ zMn9HTLCZGpSo*Q$?DTB-?Ct;7|Fyus7Wmf!|61U7Tfklq3;IMkqBvP=(e}JbM4P;z z3fdnl8RF(&x~z~yx~y%v$&wX5yA*k0+WoolvpFEFUCs_4{pEpuOP)~94rlYr>zS1b zLKDvR)0TtKA-{Zx{{F#+CB5X=E#zi#c6d^^zY#Bb1KGwVzpSwDz{hg7%f#wLW?ORX zvoUQ-*kX^6ZLwJ1QF^3g%WP);Dlw{`jf2l94yi@^u*a_1C6ta}5ZOpQ_V*~U?NKb0 zfc!F&STkxT!j-g=-?ShFgeJPiN`bJ%J_MiCi6w|sgpRE@_7fS%H=#=;v9Y4Rq(Ru| zuWHEe84yFy{AB%Ir)^7HZbHT8Yxg35{3Cqz|Fr;Ov48v$2m277e4`9Vh2Y?Ca2SgF z7p#eBgv?cKB99Nv{nHU;i7gW<3_B7 zRwgpYU>lSjsUjt$inPe+AvS?Ue?sfv2qI)uny6$bC7CNYo;+~3M;T!VbsR|*eLiGaw0i1dajP zlt>V^{O}0^hCSEFNFxsce8LGIq-^s;|3U3kkQ+x1Kd3Kiike|x)I!)!#vXaveuKIS znQ~B6$V#=YTWO#j(jjvLJzRkr3;g3KFZ_!GDR`i*WR8*nmbbl+q7*A&`9OyV*b#L^ zkFh|ufRzsIGT0Wq+XEkWrjMiECO}G1cLA&cm;oyTK0dGmnIXgnP);e+298V{phpl6 z45h(nAm0q&EQ73Mq|v@S*p@^zLIw2~flsW>5Z(d&otfkDUq2l4=1ZWvrk%k2}##zjQ#Gy?6 zwMapydN^%77;Y98q5!V~ii@ zxh&wi{;<2Asc||$`#}m0wD3Y71Gd2#5eA8fkKtTHInk0~po0=PGHphD8~u$$Tht7g z04B~&88Fa80w9Z?87u6VN#KdZ_89pytxs%CA{NdOoPi!H5k7HHMo$fcBqr#AG%VoZ zvu?l#=Z}>sFAcE*Es7k`liXkd^bsfE<2-O?+78Dm2wI}{flNOjQHjJe8em<3?6W!G)Bc4jnKdLrqUG%MmqcNt zrh_(tOx_p|$UH{hWHQGDZGp0)RwPD605&7j<|Hn$(1W9e@e5}?Ss_UzB=*Jl#)2(% z&=1Ee2o}Z&6oANd1O5d;DjsZ+L=~k9XU-qg)wU*jKEnE81kn4V<73asFyN!#5ud^J z24g428H@p*Ogobpi@M_6Ml0h;5Q#7{;TSQXWjsic2>P?f z(1URvBR$SrGSASmXlDb)5$%g*ve#T5hnLjqWgGVV-$ zbbv{*lHp$vq{3bjDbZ$Ry+p4>k0MzHN`^jxGa9uZaTKFIiEI}5j|XN*B7AcY!*JC| z2OAQNaTG|5!cif41d$E>oMddaKjRZe7jrg@Hl!DQpU6To0$i1`1?RFKxP>yUi+$Km zGOFmhgCmG*8L>IeXtH)A7xWc7vJe00 zDO!nmNHp6d^AT5fTyN2G9vC@$w9(!;3&Y@_sql~33?mNl0h9@65?N_UEV1VpM(6;H z09naVI$RfUy+OO%aU0{g3~;#027nf>ICkVkuO=gm@d#%xt_B#PP=1nW;4H_r4d;Np z&PC@~G-t+K1o@*CFn2-^#7K@&0P~}?%=l_rB4`#5|8S*2{tQreg1#PTLErI1yhw(B z=^!nxe5f6X`M74G*W{(iy1YJjRP!AA{_cKt_7HdAYb%@bQmifEsU5Xl42~y z*nyFRDZGVTkw%z|qc2LYW?la}u**%v*70;MkM(4Q+v1 z;(Wv07}p39B=o{RA~*Ue`WuP0wuhjWm`f4LIEU<1d4V zUnLQ>O3N$ggCja4m0{Bjm%q&C%+mICuqY%l#D4?DWKIH?M$!HKi#<3!~BW4}M zQY332(NG4SILpXPA(1I_YGuwY95JMiG|0+kujaTXwRcP?1?HNVZ^w`Y5ix zB%82zi!RWjBzy`3Wz57;?iA3J?51!I;5;W;d=ltf4E`kmZL*I-&X_IWZU^&h+&y9x zLk%$M61x@x>+&E$22e(SCnJexA{tpW05EjxDd znOT<(^(4@k=q$m^xCU^)L#)DF6e9}mhROJ24un}3O5yi7 zF29GS9XvX=WfI%Tt^y?> zYbwcKB&g#$f$-QvMw!eJ%$adjLQCU3!(D0s?1?^yql3FdjEW?$A-jeUXmJJfzYO2W z0Iy|c*zo{|XE0vyn4&Ne#lTt)7>SHbO|Ak?I+W25@fijViPW7`S*ko$2H?faxS0Yy znDL^`d_eoWbq07SmIvsSf=>y+VKYyZZe-FxPr#TJ%=AqEA95!_)Tu~S0{A4bl?jlS z{-EOoD|#}uC1+!p@#9L0Sp+#J48h1=$dBm|WECd+HXp!UwJv~GxR!*$3yT0`HL3&zAC zy#ZX^V3Cp_e<2vHbchS5;a?hXz?GEvO9r(3XdQ)rXMw6}xd0w1Rmk)yk^vDv<{_&4 zf$}-9!5P3ppQ1r_oUeu9A6ajSFJYv>D4_xdS{V1mWDb(Ni^Sa`RB@0m4)jY0AGidN zB-0nc-U(nw^z#T<2xCkVRhha6^eY4&h;b9+e+2vx&;1-A8G5=O>KHrG#}dJEB{HSL zejV&|8lvbWkc$HdTp3+J=_+V*0Wfv&jFK?Y6`;og9Z$gL9LQ~1@z8!JP?SMBT(>E} zE&-lao+=GABv>=>Tm@HMJRc$XHm(W2OiP^xt6l~=6iAr}9)hb5$&XDK8`K`#$Qc6q zgJBh;?gl+8!koSnxD*DjLp^Z^5P|+1Ko?iQvoKz#pybVz`W~tw^&ogl5=fa0vjkU0 zT&X>vjT6QlrN{uiOHg&FHdGI)JM}PF=8E;TwcYyE+GBkO@dsA{j4r9*RVS?Du-;q& z`k1X@o*abwr`Aeqg|!Zz2Y{k!-APrYs(_3|zzQLNz65-6$8LfpE&}{l)+g2%FoI>M zCR7KiC-n^VJk_6S2HsT_yt_WgTNFlC1&(Jxn_ploSg?Ofsuw`@rn*oq0MY@JH7fx| zrWW8lNVTRqQH=pF9XN!nIDoHDb)@=HPf<;wHO2bDI&2-W4uVc!T0a5B6!6pUtzFh; z>oee?SS6_YsCHCmpru$ltQpo2Yk)P;T4n7AYbJvy?6jsq%TQ~IwZQrSG(gGLTH~z8 ztol|ttB6(6YHdxjwphP`rEumJgE7Q)!VUAUHfU5jbKDAn4X%RC&t=AS5A^``EcGFE zhGOXiny0T(`>7?=FseC>bA75SHIAA`t)_NRhpBI<&D3maBJ~n{ub@7n4pKi*$EeQ% zdIZ%9#;zLp|NT^37{AU?Zv}QO2lh(?kHSb<5+rB{5FB*|benIDu=-eoLG~He8`f)} z(M0QIYdU=9S(`FPe!A7xs$h96$_ko(lL7r6wwgeTWu}=vGh(W+G{%9(_rs^Cb;ev} zPBMp>kDHy$XU!dEA)x+-^_H~+eBu+BSv>H5jrxT$sO!{L>O~mwd%%N};9or$vw@)R z5b%J>)N*PsbqOp{ioTz2L${|J(|6OA{`l0TyVA4i-{>05L}oX0l?gIunGcw!n6iwI z{(=62{*?ZR-b#N)zef)ROYWs!0R7in&8)IkL#vC`)GBPHnTO1|W@D2!DYLWro7vQQ z!n((jEX~wR+2jFkIn4EY0PiPjy!EKn$f|7l%suAk=J$a4x>?`Uj5Ed$#t~z$vBlVC zoHI(AkC^Sv4(8M55_7A$-dtq9X>KupHdDus7#3u7yXj@`#H#5w;tnSwH)|=Kb zt28x|`k0cbKJ<0EAG4g9&kSK|F+b3)=r3W!U!e|A@pL=-d3qu}f_{vyPv1p1qvz8O zW+r1YBiIvc5v~*$W_Po**x~F@c0BtQluxqf*llbtR%hO4?qjCWGpONKZ?ltem(FQr z)z6h3O0x2>nyeaHQ{zdq0?fhf)K+>Dlfsl?+X9_->>-9`n$vq=c3lSlxD&=+Gf$YK z%&;-rXl)cSj_8y0R(gHCwq8U}*Uo5ut%g2B=Z*J_wr09H1){_~;LR2PSjBF@{GMc0 zvwk$Efz3tpigDd=nRUQggUpxB55PWdm^TApCON24)FH}CkEC^aDN}+S!M@FIU|(Zv zu^%yYnUnPU^ec2$GMTbkH1&ATafwB_+h-ky~N$e zHQ+{a?{OQs_FQeYB;DMsq4k%a3Xcly2t~pl%FWe5T875xLG2#hZMVEZeb)EX2 zdRm>Vy{vy^oG`z&##6shzrq+=)*P!pM2v4B8eF$NvbtKQ%@*bsqpi`@c-;sXEzODM z+u$wln=hD6%o1jTS;g!DJ`@l0u?V%2N(2c$pns%OX@Pl|*~m0xe`LFItGPKa@)wxt z^!?Q1R#j`8wU-LgJdFHlb}`$OZOnemzQQf$zZDLO)uhAXIpHAxBUg`0ZS|JdjThd&D#lMQg?`42djTg%R4Ut)W* z^;m{|hcW58^k^#CT5Y{*^|eH6lKHFQHOlMtwO7^Zsz)uY_E7h#4YZ?RkH?KBW<6L5 zexcgZv*?Xr%ds>^PlI{C8Y0OW@Pzwd{`7zuRMI>HUNp?O+YpVSMjvCB5iulFF)kRV z48Kvsd=+BNPHQNYOjV~l!q}{$kI`Too7~3UmLHf<0Dl<#{#_r zTLbHY-tfvuyz+qBNE@u*Fg94d=)+7ZyNfH$d-zSkxsbLQI}&^|l<=8!&5LGfEl9^p*On`fPoNP8p4j{>EhEQ$sYnfcKc@ zM989gQ0u7xRSu#=NjjeP(1l@)CIjV}FtgXPaa>#Od2TY-mGiSNu*KN#nHkK3OnGJ; z)0!O%b~!365sOQmqz9$b;&Wn4v7b0eEGtSvDQ*aD8O78J;RF8V8Cv?TjA8!y!DHbg zaz}Nb)>~h0w72@xOWD`>Gr~Zzj`*z5jjzQ$%6`XeW_ChscCr;%j$O?ZWrotTsR>pG z^KOVmt+dxvzcOAas_c~~%g@PsISQq;)a~HD{*0mN?Ez30C)g9U( z#Us~@91EWfH;bHzjFIapcdJipH}tjUH0ohy0o#vT$34Zp$9}>bhpp~?)Em}au59I=c*lIl>Q9}es=$iU9inMb z`U*suPLQjXq8fpPO4Fz4sf+@a8N+U3Iqnrs;5)&`#SiBCvE7(!^l)Y`JB1%0dL8l3 z`<#0mw4=WCwm3@MCT?IH=<|%isXcEb-{_XM!zYB^i%eBcslRET=@*PI ztTv2~3kWyF>tZXhyU>9j%BgHU?gqDvKh1CCoAMuV*Vr@62KpJQoVDF3s}EBT%hMvC zhr5Scg=d8;N8;sL%ByM_{fsfoQYjDfF>{SM469;8Mx_tYuS4E2nmTCpvbtFxT1_d2 zewW@y*P_E#J9CNNQu{#tSgoY()1J^j(?8M&>UH(udRe2Q`H0nxsz$E?&sYQN>~UCu z8^XRtwMs$UFG6plyD}G;8f*==2zv*_nMttzw&iwn7rEt}hkKQMhPBuZd>yg1qm-+e zd%9b8U39K+%#ecO6|hS;p*?%l9H1-<6ivI9e8;u4Ya4I0Pv-)S!yn5%)va0s;{oe4 z`Z-P(c1i;sP6sP}B20j|+kxu>Bk%&q=<$1{`Yb1=3;spqJ5kZ;tY@1u*+m!aI9 zx&Zmy?97?;n7&49sKsk(>S6V`T1tCIYpxeI3Ym98hW|FDL9BAnVOVpIP^+jnA>&l2 z`(Q;j=(&u@wt{&yf}PARV3)IV*!k?QYpJAqEmBSaF_7xavyQ^ za$3@(QVHovF`h3=7t@~(Ka=tO^`loNUM_NV@AXpYH3Dgl+s08Vf5pO8RD^nz z`i`1LH)i%SzcSmH)ey(7F>baG>*jvq+VKzbKZ9j9bJO`W;eeFxEa&+o&h4!h_pY0E zO>oqZT8M88gZM4XJ?0SE=|kpo)T%K^wD-05>=F0&o1Onz^Em1quH~}AVy@?Kzz6aS?C#v3d87ikXt`Pe@ZQ| zN}7xG7FsX$cV&yRR@tO%hR-3Tr24&@qCH`pGRsgry_Am7#h7Gz0!`Da!S4pbo@Fmp zm;RRS%)HBd%6!X6kWIV^IqPC}I~!)paS7Zx_IGw5H=4gDY>;+3e{c_o)8b~wz2GVB z-sK$WXf2fyXYmFjSZ^sU0`Anbs~=oCc=7Ga=aYM;F9@!XCu?hs-qtB<60?cxC0=oi zbFFs0<-8>EVrRY(H;w&_9l^EWukxjZ(|l#V0(YJ1PfxYR8w<5mrJtM{-X8J?=Lg3I z*9D&leH>mR8|n~ajr9_Jlo`h^VF$CNVSS&)bY{vy>}^GV20O~W)EcT7{UKeI=>$3R z{j_ckFt_Wiwc2WXWfQDxN97($NO?;gptaHOHHw-6^O*HM)gL14@AS*G4m+Kq)bDUQ zxs)11Kf`olWmtzAa&@@cTp{i>dxTBkp5aDw23wOI%s3&>d6Rvge^#31x;t*I_q4a3 zw{YAFcOh5M@vx($^aAgt`)FKfc-n|-oi5#dvH0bR$$Z*p{@vk#(nBw4Zn8Gfy||X* zn~uHC{mv7PdQu}{G}i|93D2>8x$e9m^bm##6@)%~UG6*PQF^8|)_6dRSIS4Gg&GHk z2dW0%gna1!aH3pGovt4?S5UvvE14v=4yvMQx3=0COSI1FOUj*!SE;TvQ0geHm4nI#^`zF=IBAZ8JxC8`6jO?MnLYrgAd50{ z<{-qKk>D@2*#J9_E6R`MC-4dU6z*=WEXQzLU`(E2x3Cg73+7Tev5w;jR~b*0xPEco zxWS&W?uT3#98;u2LK63@RYqM9D3!YYs(JCl3+_wIwGUGl1g6Ly{U!53>P319Q-<4Ulb_#Qht_s=RJnAU*G~JWw#g^xu z=Wp)G zar3>E`ja>8t?Wdc#b%WIciD$#c})udYD!?xF{vIHGJ;prCza!0d_Hp)q(!6v$>=6X|9!&+luSFlEzwP2^*+IpVaMW1BW zun%y@xXFAwp`v(H{7U>#n98lD8=3Rfj*&j0_|TEicj0}JMe^OsB;`}3hU(Pn>n|El zo4d_%CTo6ftTzrBRpGR!HFYP`h-)ic7Sp8BjxLT)(gvX>Ka6V$KJqGefqRnQ%b(%b z^CS3Ud}r~Jzlt*Nq*<7e*_y zhqakk;jgHd(J~9-_{$-wK5tgPfm(hp%w7kh%-=xKnI(ZZY>R_aW!u zC-KYpw|GXV262~jr^ltlPe=&HukrTsRCl_?yZC-wW41GOw>CKFNNsWDnct6|>wIC` zH8o?X+{74aEw+Z38}v`K_w~oD@yrqKT|S+w%GRTukUtr8G2Sl?ch8CwymjKnxC=Q) zh<9<> zJZqh$4$-?AA3Ke&Cbp9{N?oO9Vt-y>Pf_))RAZOEO}n5rP;V$5)y`ToeW^Z3zpQcE zH_9&g1({PWDO=Tc+GkoNJ>J-9{!R(3!Tll(mKr!U&4pNKZYwt(j#q@ zirPa)8>=XsJDy`RxD)()!eCJs%Sh|QcZC`-BPY;{t-@w~BdCXUP1p6H{*Jyw8>}{h zJnuvKj9gTCOnFs#4?dql9$Z8_pu4T<^lG*+yb%6Ks03b8OX$l_<<|;9@vyYSLAzGD zTY5&i9j+eEADz0Zr{`E)`S^_Z-SJ(#f@i(6renEuL@dFtwQfXerJujj`+S2lU!G05 zv@_Ki?xxX3ves8w99|ae7kn^0M%kmMn_s}Ym5~&~Jjb;Xn>uTIR(YKX9THB)i}9!8 zs(Vg5Q^a{(XZoO7-e|8^fm0+GoUt|4eQF!!naGMz*WmuZ%E0@9^MU@sBBA6E1!oWC z)w9}SqrBCCIt3@x66~@cgq&s;*Np#?H+WX~nAbRtJI=JHcf$(&G@R)UFskTj>KY|U zem~qaTqklu9;m*qRfUt{E80$&lf(4>hHfTPGa-}h$34sk`MZRoLI7^@AZC{-@iEZ z@>AEJ&6p9YBX^g#g{ud@@@>u7=UX1U7U`)j(rCS#{-7aPJ0YTMl+s*%;?8>CiTB0- z5YNW zL0^cHGnC$11-+-<4?LiYvA}FWJ-`&<2Js3X;y>n}=BxAPxJhs}TZ1ji9Hw5kW|_N; zYr3IT(B`Vm)q1dh466&ZU$u$a7jQ~St8>*oS{qm=U@y*m3p=oF++MCN-$JM{m%yRX1PItT|u4bnhYN$clhO1{T z-g}8jekLP6Qc-QCxWaY)m(q-suBl?ixj>o7XYy%zxBR|xj}A9?xC!EY&dTnpo(`V7 zJ$*dCd)#rYJTqPQ!j+Df_%K%jX7FnMDZV{-A2Yz3qEl)h(lRWC8V0`#Ob(0+d=h91 z*PsrEW`@f})<*7?56N9&e_UHzuY1jMR#~bmy_pHI75Mvvv%)UnYyN(&H?x&G0`Gwu z!W*jXaB95(R^rS0xB4WbGMw^C#wl%|8dSbhrm1JN1;$I(L-f7O^UQb5CiW>f!*9wB z=I4vk9s8Zf;UuA}=cGH)z0XzJUBjcsB_vEsyq>rwkx%?SUi4P-ly&*U3}%=9M7UGN zpc^%kS6|#!ag z87dYk85$F+6}~6J%6G~8A`eH3MkYjFlk2OU^m*oPYBqC-9nYmf-d>8I$t`9lFwN+a zRC_Dg+;5&VTfw`?Ch(?m44l>cXl*ga7*FW6w2JB#Wsh22Ut?6VKBD58O0179%gtru z*^O)hpCFtUG^wL|Y}~IN%T?3W&ov9I(lqYDgo;ToClyLMp3u)*%Co~=*b{N~;b)o; z$`$>KQtDj)Jtf00%d&o#c~%=5uAlMsjS0zzt|`e6q+Wt6R>^_aLgVCZ+II6BdMND4 zd44*anmor37aB|Rok7=j*KTLTF~}h}+BxbtS2}k&&WZE*txOy1N&SFYUzL@BGDN+g zu2T2G`dUY>6!|6edvIhhA-FuSBrqmOg^xydD_gZL#sE0gUtv{+bJ-y@!=%tZQyr{F z;a$M1=F3)nx+Oc8>%+BWTQQ6240uEAhPMW@OGCYiR}#lNs=1c9db&EfTDkT*8#@m>JGtZHj(fjIsGZb4X<=eY!u%kwaR4bE(-*{~(g$3#a^=oPKTQ_0nmZeH{Z&1QrCo4UP#vC7Y_# z>`XO>sIh?lo}R~aOzLfTAAHKv&26wQ4yP8=#~2QFQxQ1* zYtP=ztcJ6ggUo)mC$EV|oPFF+x>ve%=Thf8&Q7lG?vkEwJ-^1S_Hy2Zp4pyp-Vfqi z#eE@7WDe`CBW?Uk(syS(5<0Jbh;J_S-tx8JQeVR~^TwSi7gBqsUr1k)@s9udP&Z|% z&cZ#2qgEK+;uAGQWZx%#|~KglN3rB}NM4cQtFY7QUU2@g z7v4WtgY*3IaNagdpQZ-nUXe|qXM!n#9|LCs-Gk#pC&E8QI>LF%9Qh;JkUJ~uls0NB z?V|RKwoJXEF4t$lxyrXxfZoKkWE#=CVUL+ck7MS*+l|)r5V-fzlzNcf$H2QlJ`LUt zzRGQs8x&n7Mu|*6&|5HVobFn=JWa^%BIk#zDa3qQZJ{eup^$8DJqZUN5G0mn%d%h9`y21bxAYq1~bNq14dG@bGX-h!3}jq{yY! zQ)+RoqxzTp`M(R$pfKuxDdFtdU7NIaQjFK}1*fx-+p z_xTxeR+cLQr;?TUm-tq~MzNPeaTam+a7*qVTsK@BUEe#KJJX$ayLZAKZkcZ3}-$(TbmK-7p((EBfYFPL`_vjLGC*_QUmq`VyJy6BXk2U?!PEsifjn)4}B8q z9ey&>Q2sz(AioOd5J%MG`e}0^^&FiJF?W~I!=9zh}YAor$l z2(rIl#D~SVgf_xap_=rqBf~ksHPQ8k>vh*-t|V7SS5sJnwt8B5lHC~|&_pP3`6(#%D8L--xMO*s$ePnX%* zd?7Ia?~*0ysJLA;#j(Z+F`E_tkaz<3$rbQNle-a_sjR5Cni<5D6iU#2~pQPtPjUpx3x zxWD|gGF+J;7m1vPHPs4M3De3oeI`|rP3KAo6ND
  • =4x^Y`%c_@1yXzb&2;4e_k_ zqF6HXE!{vNoqwEf#68XQqBfbMjWPP$8m-M&o2b=bpZA2SgM|vo!@~CkoBFr-PWr`A z{m5ati!w*v7iL1EgA+m@M%t*W^)$HYaULS^Y<-{6*7}M%NTI)^)Jx`wzrc|P(y5;w?OGJck~W}MqI%w66+$-Tkj^rmHB?*nI`=bQM0kzg24}{}+*sbv9}s>4>F$}~a z*cf~~yf<CQj_RwbOYuIrZ=;J8NjyW?tnGmv~Wf| zA+2*XhZXQ^_{TVTN0Rh7yt|I$=dvr{w#iqti|zwA%Z^yht>)%My`%Q2!pKSCCczhA zACMjz7I{D(A#aVm7Fyz8kg+VIm48*Rc4W0uLo1_2l%VXFuPSY{SM{dG8^%$iDcmfo zLDgb5a&N%tn=H`cNHJYpAnkC}bTx1E@4RgIqxg+ z%MyN1=$s%VR7~g=|E6c6V*vjR{jS+VKcQ7ICRmH<4$Lpqy~ZrLN^p5bICVnG_>|{U z2c)H@%}8I6@tyBC|FXc9z@ve^K6ggd^a&7ymjv9ACF(HaVaUPfP!r(RSVwvg(}gX{ zIpM^#xVTnqD%En_3oBrES2tIRv$nIhV~o^AtSGdDw^rTY76`-6V6M^@-0r!{x?$AN zN2p$9U!-q%ZsiXVaY-Z~2&@5J^_rYp<)L)`7YObIivJ~Y#tz>TiH zaJ%gtYYf!}yk{KqD%+Z`C4M07b$sa@?dtDZ;oRns94|^4;#_gGI7F;3287Rru|f*$ znijGqJ&H=Q-ZxZjyy{cNz?;-^+V3i*oq-jva_Dj2iu9@(hkYjkW5d0bdfE@_6nS&# zK%hh5&fwb6{KyJrxb~jj$oSUSX6~`3!5irWrZjs2-itNjw+QW|mmDRWJ)B3KS6y>G zmAsF~uTOX>Nh@@w&=X1N31bsRCyY!u19|_JLZb^GEc9q%(6dV#$g!|T|B>F!t`O!) zABlyyZq|PF)9_1yg}zf6`!cR&RQ5IUmG$-Xb@Vq2aDgX$ccw>D5^kJGE_JB%A)XZfw}&6fu*4V z@?kYWpQF`R+~HAy2mJl~8vILfwOH0*eCsf^ng(f%(4q>GM;Y z-e{M6_S(4Xi&K+)M+0r)-TPHoN#_So1u6tPhgOHrMqX2nYBZc(w}l&7o#9qVBknrO zaHF{U_+~;cv9Ht__6hqOA!&s4o^(>`AoUZ^!zocQ!Qv#y)+n|;vz_h(H+bHJJ5tYB zRm|f0m (1L3{lEfGO+sL!bb)PqVBxmNg#;Ev!cAtvmC-Dk;28CjK2DxCHxoDi=z zCK(NlxyBXq26Z0B=o0T0pA{>K-9^!{(zVlb8qO8E#xIV4DE`6tsR=(NWfVSFWJr;( z3$;re>0RY+=TsqMe-gYbZ)W{AFa9JYU(aY?s%B z(*kMm!=hC;+Fx&e{f!%!Q(uQ&!HK~0!R0|FxZXd&7w`Mrch-MjFeT)W+o+H0*Wny! zFT6cBDG$8`PWYS9^BIF3$fpbarB;ryj(Z(nOLs{VMMc;ttPrL{j{3Inp)glyDy-o@ z;kL7Gb~^Ju-H7_mJZcC=l3rX}qXyx`=dAW3+_##itdQ47-V5&xbql=}suW%dKkQ!> zSt!4!ELWe`yn1uJjDA&1*7`uM^Pts&F2`=>JiOkgw%yTO22T=lI5RBffP)g7GD3Usk)p*-m#=me+=h2PgSWLJJez31MVmOZJ|2c&9a0&!e(KK&{Mcy zXbkyjXJNL$iX+4?#YCx?R2t4EK4N~Ro`m>Z60(=?tc~=e%qqGrRma?;J+6EJZ`5i= zLXp$*v&x&wbmb-GMWsFDohkBh`8&BR+z++XYB0a%ns30)DMGUe;f%HH|#8)A(BG?(;J-@1qg?-LxbtUA=_0+ZMdsOf*kK=xW(}el(p1B;nL6qn{bZxjjve{~7 zjM8SP_o)x5)6{R^PG=kS3pm%Uqr9TjRnMx$v}+E-w!&+y~wAN5*a3kP^c_*BH6f(;h#kHPt>riF?%=E5l#nMOl`Ug*h z8F^!*1kATzeC;z{O@BW9YWnvXHT|aovqDLcner)RtvXx%OxZ10ksHZ(C?CS^csbl` ztiLLU)cSA$`0as!~4FkghFuJufMoT7zgXu3%pyH${%1?(HE^# zkk_5D(&$GadTiwDv(2q%w1^xpKP=Z&7O0oCclG1?Z~A$-Z}+UeUz?&Hl>0^=jJzUm zSNj-6sY=YxOk<`6y@+a0O^5q1_p>aV9xV_*l74Yib{%mKj;rg9_kI)iecbT4RCmbv zz2igpEOfMWj&wKjHcObAaM(N6-5O4OS5SAG{o&o>ThzU9(|}>-(nV0jvk;ojmgxRW-R+sajkeHJ4y!eM?b|0%zj zZ^BRFK8G8WLzrc7g*=(+Nz=?&W;E=TW>H~tl+jS{qxn?{?gr~{)3XY^X}hXz)rM%i zHVNLStWtu?IW-Q>rMs9d;5QN){Py6m^%ymgKFi!-CvqltlJ^Pc#BEZtW47yt`*Dxc zbH-f{_Lq%3va6Z%XGxGwK%9Em*~#;4{LX~(@ejD47LPNNTyJwp2EQt9@^#mrAEHcKMD4eha+~5uumT z67FZH@)5b2yf!iivfOEqqm(sRYckajZtjkRdvQ(R7YWCx9S{}9!m8Gho5}5fQ-&qn zShxvylzW>i&h2EsWp(x}+m&6!{0295y>uL1lYRoQYt#MUEbM3Fcl~Mo8GXHeRzIWf zhI_4Z^;!Btc#hUh?FsEL+_yRe=i-kT=S_iH0OwmYH4N^Em!WFHz5fPmAFdYP6W+;I z6Bdf)9iyGkyHZ`>yQaBDyPkq`iW`n{j*e0_@loNr(ATlmy~5idVPkw}&wlX?{haZ* zc0hZ{9La3qS#h+mj5|YLGuP|gG*LAoUxfw+>jjnIs&Je#OnY1R>OU*5gv$kd8KW{v z`yTgugH^-7N8XixfVb^)m1mV>a(VfkNTW#i$S}EsI#lmq9*3JRL#bb2SM`wPgxIB?0B90#%!<|Q6@4L6VsySK--MDYr zncV9_#L+XZYGSD*!~3J7ExX$6t^2hkx?s-M9*;~7oX+?<{rQY#{x;xGot1ahXS7yY9rcL3CbBDhDKr9dmGsC_ zbsgNSngzdJ84T|?%bB0+o%CwPTc%}op${=7xO1Gwt>sE`li@^WG0d$cjK$1hOL6aT zZoWLfmivjV!X9ASGVj9O*=lrexaa&9+!5FUzcJYjw}T5=AHuEZ{l*viUTq}YK(DR0 z(7V9?eWN~A?+W)|7wd=NbTtIt)>lu~OPNjJhG#>##pq=_!tJBu^zY0TwhK3(e?S~4 zosk+jPCCXoQ=Nh<%~3)8j=e?~VrH{<3XeONc^f93PuvpsfwYL(VU*PdYVl?|{S7}t zN|A<$_w#+&Iq(DEYjB4}2`>!I2u+EU(k{Vib&zgGy`~?IEDeiuhY=*W@bLb_EK5)W( z7=G8(i8@EUL05ranG}Jw!L?Nj*_GV!|~zN@GPa3!O>5% zqu7&FKYeJVdEiRM*BRUWUxzlxAHiM24Y2mK)m_@N%13ZY)G>G{a6Y&wa-X&mZb$Zq zyEJ925=Kp}zIs6IsVA6&t!32D^sh`G_6_*OObhrG!+u(V`-~=)MmK~vOd3~+Kg8X^ zJqWke=fK;}ci~q>6_{V)p7c>_7gZMSkoSdKqK{B-THl$~;CBBhBhkFa^ci)HHu`q$ zLl~Ey`c-|bu>o#QJ*0Qh($!kfmZ6_EW|(KqE3o5P4fof5aASEDtS}ehwon)52(y|E zbK`_}#PX2umXT^o6{YvZ>4FPZ;QQg%Jg@LCNQv&E-s17?;wm`>eg^fM@v`x_^)hpm zFD3b;UeeD(Iv3A2rR!Q7bxFNTPL7OHI_Yby{>*FaK*nXgs5S|&4-^j+3*LbLz{@42 zzV;p5@%S1>vyAqc@^a*%(3L>Z;BTS-A?hsPtgN2L{pQVGI;6X#yOeGvMUW6d0TBVE zRU`x?RTPv)KqN(^K^jQ`0qO3JWtZK(_rCpq&fcH@FZZ*s?A|yrXU?2CGtcadWwI@I zExA{+_oscrJZ}*1N(@fasX+$eA?CUXBQim;S#8~*eJJzniPL$DGy9TxXH9-MQ@C zC)=a5bI$H(zixN2H`-O5gH9`VwR?ixn9sTI|HUmvCSnWeywroUY;_{sva7SzLg>%| zdP(0kvKQI~_6Ek{MenSaP-l@flTJeN{ov-r%0zeFNf_$iB7f~%v-a6*yw&Qb{;k1( zf)3Aprj(F>VMqGIT4xN8eHMFQth9?s#nd|5H_C@@bz@Ijlb0o4s%g2S@0jcCq3m4e zEX5jaCSftZjBX`r^vm=Kk(5|NyO&o*E-ruOnf7$^VQdj6u@d%Fw*eU$pUYF&``XEk zh$(y_^^y*F6WI65%3HZPPSW!0OSA>*$I5(SW$(*9$z558{IyVC%BQ#w>#O{NxBd=U z9izD6=}taYIr7zdc=^2DF8i1}kj$AnZf5r!`44_)o;||eZdV|)=l~fr`N$`F?Cf{W z@!hBHN%uAMV_WGV@retG<-H^4R4OPRC?(Xf+Fe%eQh${|l|Uu`2l`<3ANiORk&Y;q zzBc$Y;YOxKnKp+X`0mLy-Q~nGwU!EMZ}=Ys6h<(Y@2vVj9xVOsPP1E@no-v<%}nlE zxg8pOj55Q$VJt|`$qjnmbUV7voMpe^MC|7F39GSH##|Ds6D=9(klrBuNaT*u(|O|E zA}+9`JIs2`Xp8rHxOu~F>0OcDCLX`KTm#8#!fH&EyE1|oiHbQXH^EnbP~W0&(mJYz zl=sNJIU#?mv?v2Is(Am4pxOF8zLU9_Q z=Z-itIdM(puKr8wZR@;s-2RQMfVbWDZovJPJc`QBXvc77lgqTpD=nRqHpqR*aJiy9 zRj!fivP$u(f0JSKfzR-Jfx^KPf$@P9e{Y|u-XI%ij_gz0=u-oQ6IN$ho#~hG7d};v z+U2d~mgH`bm+74X+XD&yueH~eFQg>=@Z+qj#-&(V>?1Sa)Rq*rhGr=rc|V$oks7I2 zUfxN2BevcOxT<&1o#*)MO=iUS&IlN9#D0x_6>SnLWj;d6`^ih>PoxI!R%^SF%TR%B zw0C<+d*s^W;#?&oVu4&mUQCAbWO8c8dsC#s%0;!3zEiKM-z3hpDp^dQkX<@i?ueGU zK~JYDomkb^@Jx_rL}uWt$Y67C2|2M($;j!*Xts23kQ2GfnNH@(HT!S-ft}y^kodG5 z`1wk@3!JNVH@gQp7daW}X0Gk_AosL8IZhvVACv928A~|g^_42hd6Xy0Wc9A```M=akdV9YWsfE1WWpT1$|h zpnbufi^uYS^D`M??_eMP=sYIYyoI}w+vd;6a;_znG!LV;V6ceXYUHXWl_Fa|%h7-JRBQV|`3Dx|#0~k6j-d|1CL%Jnr|%e0xHl-gEwP zcDp&G59LuxCG6S1lx^IMOUX8T1D*K;8M(*sNSq@&wuh^`8=a9(C$h)7up3F_XSOHHw=lqqBhF9G zZ0EF7l>FD-uEU7FNmfxiv`A-W=`>or0v?2e(rxLPl#>(A_h_2U}`>VG3tJ5WX0 zWc-mbKRqWp%xuacfy znd)A(o|}JI{hU_bKhj2`0|qPA)b_*>y`_)Tjw!n&(|ygo=N^(8tCP9)Tj1-e?^b&# zpVRv`WW*I!@?yvC!B6o6E9hIbuey$0jp5SwUPUx-K9~Z<+I6{VME%zk5!VqVmGuWBoTycohX6==L4sZ>k!fHk=w|9?h`L?X6rawv+$-le$#>j$ZtveyP5pR#UsF8;D>3k~`1FdM~}4 z{yW!DdDU9vbbUq!Qfqa+c3S_)*V#8#Kc~(ka-fD=jJwLl($Aa)R+67_Q0W1_BAN9* z*m-8Jwl~?bGu3H9>(0TC=-_2`zp;y3`OFPQ4kB>AvS(sVm3D7CeVwy*EBmpvn@HF{ ztzFhV>jS$czxx|4(a1C0F76-ByUy2+?aXmsr=RVm$6N7w5$+xzxo3%AwurL|ldB!z#Pd4_qq2W_ny^=QE!fXEP-#44kx4tOpf9ZByy3t@dW$pCS;eY(jcf6 zr|}2QXdEhGr22IlKkX>J;0vWM5|Zv+ojw;ehOpY9rWi` zatUjZjoMUJ<=@c|Mc4;J^r?$9G9%OQy7Yp~=BJF>Sble!7R`s>Q5m|&yIx<$r8hi@_WZOb`$0`I6ta0T zdawjPnT|wnVW?E$+sc zbZ1n*gA8$4+D#_nIHKN~l2h0ZdtxS|`yJ2g$Jlh?c^&Y^Rf5x!%!&RE>=MCN6x7ih z-e0s}AGX8+{#^xwU|TSm@`U*n zGry1dTl(W z=T%~~%JTIp5>b%x4wH2pXF1;Iy;XWDNWp#xMNjF+zx3!-27Bl!1fMu*S`c;O+%G{# zk{Frnyi;k`XI(7hTD&eX1!+kD85L|*nePPG>KU&-!z*7hibWWaGOSXYcRs3MeMlR$sSya1;g(@p0r>;3I^AI1Vq82N<^XrAuTg)Ol4*s^ANn_ z|A^#*$0o)$&Zv5U{D{^#^j*;Z9%hW~V?IexF2%D1mFxi;gq#{lX7Q{f7yYL}#u-UoPQ1wv`^8Wt|I|;ii{Wc$hVMnRykQzc_1FP+A4sQ_%ae z(u<DZ}||}c|gw%)=)9lM;%&T7(IEGPhAOz zW+Qqi!fK7rL1tvy;8PzUZ^voX5p=;bMzaL#Sm?tN%v+pNEx4N58OwU;=#D&E^SOdM zCRSN#)@mId_4rxK40)_d%L*{l*=eibunMZ&vkZ+S^veszORT+nv}G?l?F!npmKpmS znZNdb>*W^u=n}0F+Us9*j37kDS>p=Q#RViS7t$!Wnu5eCIFR`nox*%-d|wl!OFcus z7ey*_@tOyWg3!RXk!**Rl?9m;M9{c4JjyKm&1VTcDp-p`|2<$#exrR`n8}x3HZ)Ov zB%~tmDpt-tBrn4I6l08=A~zkFiRu}0C@7+ZGiIzTqm!Re(3!(3Jn|#;e)w}2k&1`V zei~%>GhQMgQ?NYxVP)*#J;nOXMc-^@Q?y_%`|AiE)0o4v><;h10Bb<|&LZuru(`%F ziZ&TY?HT`?d~QB^_K458mLcoec(>Qst@`kIo3>`cE|!sL-T>n<)0wtBju5!)~JSLiD60eJg@=Mv&dVS(7)ISs5)*ig^&s(LB65 zAMYWwej1W3cz>_(3bBjlp@nM3{|h2z6&TrK^f-)U+h`KOHx=w^QENl6D+}^YS?I5@ zNRJ~kN9fyq+A2t*5~KMtW5>Hp8xA1nn^}dId9Kh%aR%WPo-Ztu+sxV%dJ?6bf=6o6 z4?%gBGvr59q7Vd0mG=}xVIjG>GWrl-e+BrBAm9ovwctA@Ffu~ogjFDRhQ~cHQLFf{GdBb%OMmjj_nfGklExW5)0fpCDMMd6_k_iW2F! zpdt%$VVn>d-zjqOn|KWfLC%g_ce&{CE4)U~J5|P95P$_;TJZG*)h<7u7~(gA{VQw~ z(T@}~jTi+%m=)ypBw8sXTToF`GhQnw(Sj0q5qZ1F7z({EG?U;k3qq;b%Y<$5knhr2 zIXRfG;ym*4EQeQ$UE&4vDn_#~(ou>r6_nka^j-8JP74=%L(Ys>mOw^?btmQ}zT?DM zk7BnKWK>a6MeGn_KNDO_q0t4uQdAd+bL+)VpYkQF2~n*?@NETCSnSD3^jJ{1MTHtc zQWZO-%kM-b1o19D<|HR=FTe~4*^Tq?g;w_1orF{up>IX`*N>g>fN^<{F{6T?nT1yf z3pB>(Jfhck8JT;0AFpyF_EkZrewi`P=aIDK|>bxT?Ers?1bV(ai1O} z)35)CIrf?+K7&EDiJ!-7#fUS2AkD@r3H-0^LUP1@7$>_5-f_I5L%d>$VAPAA z3tbwoMk0vdf+sGB&GCN)g*aYUK-gl!J{4<4yiU~j5!8NR4aVzU30}XLM=@3^e~Uly zQ4?!V5L-nRhj<+ju^z?P$16SvnH8E-tXLuMqE-LZ;}A4`L7$g-x41nmo+UJ1yyAeU zNg$pr=0LF1#f*tLwOLPMRs~^Se5T-t+q7K#G){?*S5SycjUYLTswHC9P@Fm*tUmY1Sf^qt{u(#uN0EDdk@0=jG%)<5(GaybD@wJ-5&*C;?F+~U=u zO+v@SM?G#IiK+pV!V(fF{<&34`QwbDP8Q_i5cS=*S7I7j#rTqcASu| z_}Ikh)uO@!*9jR9ArWGJ;{1M@PZhjs@!9d#$45@|H(ql=Xp=bQTD+t9typ8?dpBc@ z-ILeXn6N@9Pym!aX4d6sx)G9x4`Bw-`P zDcNF-Ma_o@vliFkLc)ZWk5~2)egfg05IR-pJF%O`HL;K@L17oVEZ+Bcr5Lf7iBS}? zBHmr>J%V5V->MOP5%m%TeLg;ZVm-twH2qgGNz9QLk$4p{v0lXpi}R8=J&Ln^oNq6P z$D$SgX<N#U7YTO&KKSyA$c4NM%^0r|B6Pl(P2uGf@0`f! zh*d0RQ84b~>s4^^#d-|z9%B89QU9;Ho~W%5XJ!lCEi{1`AJI=S5<&(<&xNduwG^*_ zD4rMBw?fMZX%rGGJQr~-E%a>MY7*Kw?zxCpFA|?BR<7`L#CVVR8i-4!Xyt#ELvm!; zd4i5FG)-Jq#P@M8T)g^#Sbg!`KDC|tC)YW8;E^L=&bnKh>tc?w`#N{VvhExi< z5^GUZ&&f(_@?j+j@1&TI_(|n|6*)wo;;T>eQOsSu&dDP*#$B{ST+<3KkMLt%qhu=L_I9gX0dLC+zMMKUZF*JJ>$Ex z@QjF8i`I*ML)axkQ$EVjYe^Z}NW4~friAtq7PqMIB)d+ zF-X)F64f!pS`p(f_E2%M6V(bz;&Ca*d0L!D#G22|IEs@?UVc)76Kf%udMHF(zqk^V3IlB>8m8pa*d2e9V{k|EWfzdzx|=>u5H1BvMv!B4tz z>(mtLdKn_Z@?;R$oAMJunqG|;;UPYq2HeJdijTh&UcSoot|I?_3^n@EiXGnciZpEI#kPE>c?^u?IpW{-!#8gm6+QFauEoTo4xGrJ!=uUgc~ALBd*62jUqXCj8Fd74v@7r~iRk$ld7hhzXzEXHZg+V&bj8oO`M!h3+u@dSmRKK{ z6AaaO5^H3*M$8P_C5WIs>~$qZu&*|StgI=%7QXNFi4bnzRtCyzkmrr~q`t?i_{ggd znW7bU(3fG#mzBSgmV1lcABk)zXz#bavRYZCc(jE(CEKg)m5u?+@RnR$tq9Myj-H?o z(8j65m5=0)q$%DlxbySeTW)>)URROY=e+-W+$m;d9zVyodzi0JJq=dGP2y3yI@6qF zX9Tpl_2l7fCt5~C#t1sV5^l%qK)UEE?IdcVpBp1iAsR(s{E19?@i4WZ5Rpj=t z9+7@mWlhNf9e*`rqr*}@#l7NoX{EG?duVYVJqminWl19z_BQO(ZmgNbM7b2@MzbNL zdO^|cg4F$pq?ec0N%iF|a*F&?J^+*6;5IOYJH`IobB@Mqy@c6l0bhSUu^3a_Q*H%b zmEzUpp0E|GCm%LMdAx!x@aA>lb6Vpy%$ngFx`xkgKkH&WzVA_dYK(Y~iA1YRmUzM^ zaRXPMm06wD-H9Ihi3sWltF;u-=s-0bj{Bcs*53vPe5_4!UM=U-y!pA+?d z!R%m~#&e^dnQR(XE%**+y_ob|UPI2&BCXS z?>M!cmPFS)aGEgRbKEb9X1z_UNH^yr_~sR;y3mN5l5E^n4B|%Pd!i=lQr{srQSP&d zX&+BS;tIJu@m=H5asQwnJ@0+CbqF#iJR3|xObQ!T_XaosGNgnh%>SO zV_lXYBD4r!Z=(^edc}xyxg&KUR=b7rC*15cYF@JPCP1XVsg;Jz&{OZNPu0)r`F*eZ zn)rJA_LAAy+uzCmn*V+ON&g$fZB`*dJ8S5EpsAkSs~ru#SpG2UovAl--Cp)!Zqm}o zGyAwSkQ@+K>h1mIR+f&bJp!c@(i4A$!0}Vys`jZo3EypX&4V;GYtDEumJz z&QP1cT)nC~mrSNv@PO-UqxBXrDEOnFCwr%pQW=JHbt-opl??Z5`=C)gnkD^G>H=5+ z7ipsvxL>A(A)`?e7gnnQn}UVtcko>=b`xgt8~AQ8puiTW;} z+(uff$v;RNh_-ywId8pTK8_jD1<`e6*?&VOTYIyM)!iQG{OX#J3416x;o%Neo2vI< z@vf8W5leH9DjA;;opD)e#+u0o-)t-~R8NSc?g+(puDjQ{V&}L2v68Gt_5xdVejrxw zg}dAv4wZGDvP^BI4WMSkW2oNQ)j`TFSRl>hOGGi;!b-V-%;{+K4$>0o7KG?g#O3H- z1-BC%`}SnpG|Y&ED#=drIrH!}S#mvhyeQnjTCpyL9raJOsG80}S zDzv72nEp1#&S^(0i_@aU-gsg=b=veJ*>Qs$4NmMRw~d>c5iP%qJcGM-MQ4)p(CO|z zcBgoi$ZDA>*F=*(S7gY>iKPQ|Rsh?3-;jUUnn+H4f zj^5e#t1loJ_<`cVk0E3A2`&tp!A_xrp#fnlTr<4Ue@pr{TK9SPyG^dnym0lx&({V$ z7@lI7-^yYAZ@s;?N510?mJX}40;dzQXSOo^m2f$rXk)!S_F^(K{!uRa%E4|LkoZaB z;)GV=twGy=L${PN-g5J0`tp=UNwuFHefsya%}IBYpT9hw_FLp&tf|%9-79y~C&H-> zhtq?9_-|-+m41-LW=n&Kea_^c6Q~fpMV$IR-x5gbuV`PW%aktiNYCdqGJk-is;A9K zHB(d5nv(5Z4=&Al%e9-hd%bt$v&su{#(u^+{7julzWQ)-7w#&#waR*wOtYtYNWTV$ zcrWz@=3rqr_sY0y>=$MOBPm)rT0HtsG&Ap(*KXs~p_0%i+{E9_(5vORX?+K~bqMxJ zfSie4#4Nr~K1mtk`MZ*5G*lhV-*wfyRQFiL4z~)LRy}n6WcP{t0XLwc%3dNec~4r8 zRE%ctxeb^8oRXjvkh}4loLJ?8gjAL|xWj0%K1f_DuUt;ejS}86A_LbEp|}^SWnQVT z+@4AzJ6YX_u@iO?_arJbog>$MQVoS;c-{F*{eeiOl@qv-#O7Fu}3^dm*$2O+uj~#pSSxuKHByx zbc15#|4noH6F2#_v(Q=2*BBza>!7{Q!5$n7@v#Yfo@(fxdt|(L>=*a3AlfadzmoEn=&r53b zJoZdYDxDlm{V?*86kQHT2XT09F~hNDaD=y{@1*GTM*imkid*X@k)61Id#~ z=Dz+OIUC&^&F*R*jID*3Iwo2>*4p?Kw!t{7wH35-TPq+vraLXYfl^iZYpm#7*k}qT z>B*cgMWw2m@836;b7f;)X(v>S3x&#=zKw8-JqDldDdj7^#FvT)k9^tRC+FvN)j-naJkIiAXT|UG(i(f-%~-VvHj9vntg{Ji8US4sT&$9VdqUzWakWR_aN{vra95 z;$*!lWK)j9HZ3kEVY$|Zo%fbE(p~6OAQpR#Q=16zC0=V{Y*RSnufcZhBNr!==8CH8 z#bB5z{w&nz8G?1yHt;y`eXv>RS*U#YR;U%3_a6n%1_}i>`;Yo#{>A>nzOYJ_vuKW# z*-wt%e{}cD`}ZI3e6cqDnAyp_NTlWnvW})XquhSdOXX9&g}+qbwtoV-)MZt2?zEeF z;lP`rE#dv)4xvkaN9(ARl0I{@JD05e<{uEfT1RI^7DOsVlcLLG&5gCj8lx9%ndZhr zqlop)PICW{9?Pqhg4i+_&;;Z3wZ8rSVS(=gw*LvcRC}@=&&$6^gT1=0WAC+oFjw;0 zZ;eXka&wNE$LwiLiY<+1iM|)zA3I_0ghjf`O>^(MYuvG%4ElS&Ntvm|(Te&z?_o$bTIt{DTJ=z#5)f9(G zQpbP7-y>iJJ`Mg5oEN+o>=oJ;x`rnGFg!M#C0s1@GO!*QxTU?O+0i?GM)qjMw_gufrEgu-`TB#CAkaMcP3)Ss4u&jm)4`z#3)_H8zvUxHMMEc-=f^ zwRGNK1U7rerRvHB^&7p4e^Fpo@CfA2N&eG%J1wW`k$==xTIn5f7d!9RwP0YpXU?Pw z%s&uJ3YcFQdt+r{Rnr@<$ZF@63H@NkB{p|&Jh#wb(n4uqFKI|=D?snL>-qG+F&>x7kqo6a-Bvl zUkOcxjV1LTc}RKqh7t=Qr!JQ8wnM zl2O~}u-JOzsJV}Pf@6>mnvwHz#-8K!V|Up?e2+|C{AuzIXOWK-MuLCzMxtTXafba- zE+nt!j94BYq>NwXhBR01r?gOWQW+|XK1e^T7hpGA;9n7F9qb-70u2IX{Smz?C$5it zl>%);jS_}JD_oFpIdm`(_LuRUgs=FC+CX~SdYRTCsorDt;me0dpB_qiCpOU$^~vkH zL#)%WbdPcKB|7K z|LgnJKiHe?xH#|Q2;z;^7vkU~BJ8llAnN`yq zV-B^)dUcika3NZ2x7FHsNa~90(ZF}mnXYDr%^bCwuzOWEI=e5;;5dTlRDEJcP$D6>sJlBzYKeTZxR^ z6!oI^E9||E`UL$Sy{qq{?=8RKUlQ;FzTok|r-6=vhk-DZg-^rF!uP@}!XJjV1*k~p zuk6dLt&wWl*CVAeP2(m~*vlGjZNo=A zEVe6J22#cT$Qw};2Kt#;2cwYrCe-|!aPC(t`L#Uy2YM=*p3~IIssrI>4>?s?mDlA? zWVL%uTCdN`xI1-pOvPnt8T|bP**>v)z{Ww?-Wo{rG;K4 zce~xlQq4Ms6)Rx82eoP!bb^ZJXXZNdl3Bo-Z580$G@S}}>+Ks5`eo`PCQ+ZuhR#$| zUM%~RR-EG6ut!aTV9-Rt<|RinJDK%k)XiFT=nL<^6(H1(hNB}4qHtw-b%PWNd2l&w!+f7Jic+-EgYj~NTy zD){I7dc&;d(UWO%`e)IYS=A*L6|b{N4WO;im_mB5KoWf2U_$xu`C#Wjs_%Eb2NkIr z%iX=fPQac(Mp+Yl6CIrF&K(FA4`Wqg=b|g3$D`F^!(y#s$n#}JtMJ=&qWVxnxmAYuwVJopk?r}^?%HA;BGhFNBY2m6 zz8tK=n?|xx#asYKcoiO@-7r#eavIJ}246Q$sXs$e{)TFbKa@T+#PHl z9EPN}pfX}+t)i6A+L@j^<^J>j&u%?i`C@$9O=Frf&i&bGV;kmM#)0U}=osTyyE2}| zC?~K&oWMGeTYXeJ=x-Ss4CQ+=l=i5ooxab_MGoE{RO{X6l;VB*SPjj; zV|}8lBFiK9BH5$8qM2jS*wzfsb#7R2%iIolSBnx$Tuj=5C-)tEL3b5TJ+C#@eFVXL zhPN@3^e^#=Rfs~?vB8q9oaR@t>r|TQZ4R>UV-q*PSGR{ygk#j?SpyIB5Br|8)=j5& z@Ms9T-Q0szR?9XdXJEuAot5z5Z#;>tptY&l=Yy5cnv-F{n z+0jA93Tvjb-+dR2mPSnVAnuPYcyqZwyD1Olc49cE&vjH``V0=)Aw^a4$d#l9UMV*P zBE%W0A$)ASZp^@r%?qWZ5Y>f0wjP+%py>62$2Q)oY5!_pg+VjKIm>BhtJ{V<;)QV7 zufsu|tL(tfyc}&jkv#C>%0;s4bLriD{Dn#wMFoc3DcvPl`iiWxd2L$^0>-tV<#nry@ zbG$yOZYlByhml3N)P2X+1xB*7Bb-yTGi|wc0TTK65K{)Oc&rzqb-bpCfso5QVJ=Jm3R320si6%$~JgZ z{j@s1@BK~KTT+61gRcLIzC!D(O=cXI`F;sBhMWEwMC{{m@9zY61iuP43FgPAIE89B z&-{&iKP&51?@=uT2w~SiRFVYL9e;Fxg9JA&-OWmeq zO%|s~h2@l_y;5F!aM*;=> zwe>k_dF7?_Ccg5UcuMva>m@ zAd2SW@t*S(M))2tnOYR*I0tm$hTxF8i&b4z-Hcys z?7DV#`v&>aWAU$jXHGFSYlGFo-ia)Zz@J%;8{Z>jfEOSt;YX~f>C^zu3&q7&0PZMd z)r0B^?F*O{)BH~0TyQLV#~1z$@ZpQXle=he#cHx_8Jb8eNz=?`5^L9?^|vV`mS< z&D!o|yMq0e(^;ynZS_|PO%4AO&KmwK_@2L`eir|8L8YeL8|j-N6-R#;;goyK>*Efl zR&8>uKGl|*P$_9uY+Gz*?Csc_vAwY)MlEZzeb(vfw#KLHbDG%_)tt{cpLvOLFQp5T zu!BnH-zcS&L?vDRN}eZ;_lCOzo%ifH)+DQ`m5E^PDlln2U9K z*F0^VvNu6XnuRr<1fOOs_cNJbEkvbJ@>BRN$CZ}qZ|ZZkHq}_S=sy2fu&?unZUid? z69b?6?ok!`h@R%(75q6A3+1M+$DZJ35vjv74!r zUJQK}dwL+LU|L!8fm=jAA&qxkvtYDfTH{nVZAi>-PjR~>V{Sw)TLdG>4eCF>I_X3j9jnI<D+{q@e8aZ9fn_4?uEM& zKT#E%>Y~z0U4}=hrdCuR?)wHmnG~oW*b-P1Sn2QP^ZPts2kw2Y1Y3nGC)UffCvkAX z$Kms#vZ0p2(eRHK`1AWceYjfGJ7jE1Ta$e3`A^TXB#nMKD7L^EMP>AQ-Us%B*vIJ? zURHXUoLWEnC9J9H?m_PjnaZMScI}M59gB2P@ZI2dff@eas06rQo32h!jza`E!5wia zSQk(5q%M*i_Yvo~EX2{gh^&rWi!|r1WpZo~d+L2^G4)`r4THgP?UV9lj@MmW+7QiEWB;O&A2z(Xz+*etdYHyAV zN-6bx@so2;N+%smJ!!n}j_1bc2Y0{KKQ4Nvl-zPnX$i4r zjqpI_<0he)yqB1%((bo*F-tdJGd9E;$C9E)@cvAXPLAfmcV?SE**@&e)A&~Fc!OYS z-NpCS28wrScu4c*1)O0TbGN6dGdZD^lWRzYJWAa;K{#2LIFrn`3gRR0?rd^CcWy$7 z`;EA(3($BgTT897cqcw#F8aBdiL>j?4a7HcIb|j!#DA6C@DU?wH|l2>(#Pr-^aj3X zzDxd1+$%H-RtuVeuLHRQ#qc&x5B3bT4wp_ClHi433x9@$<_mZ(b z?dFS-+_H90>XVw&nCqkwV|C1JX?HLlM{-26MN1mBt)GZ3s|QPHKQ$FYQWYgpcl~)n zDWNN&PNC265Z$K2z$DoqlA;y&(3!YN`W7H_^F^?{$um-8e&(PF;54q1?L! zVs5OuIoUdFZ-;YJ-HlT7@fVnRFOl$#NaBakDzc-txW_uj>4g*=$e>k_C#&D7HVuO7lwS%d>4Qd#2G#5sv=6JJeu z5Ip8@O{J{&1Dkw~a>FsB1z*1Z{K1nipEi3@DLs>Q-3?34ybjJRb7gd6`l9qU(Z7td zR+3%UX@X|j;B;^gd2N;9P|-$)?uQp9bV-PWwgv*ej;bb4fU?n(%CCROTd=X3aU%QB z``t;jFPde|E9{3AjOnq%(IU|ck=v1y(ZkW?*a-8SwZm@dY(_qgIsK?~aS%F9L%1xr ziP0)2k5oROdem?=8)xNW%4qo{@iz-0rxb9rP^adI6~?RZAzs)?RG4i{?WU7F8)hxl{w zo4{jg-R$=F58Mte5BuGo3Ehe2at+YR1I8Tp1x$$ge zN~dTIdx~dZb+mUL7}KNIB4eWpA+`JLX-*qwiJg;Zj@O){UN<$Xze#9C!o|c9iGPOQ z;!aD~K9|>fkKLo3M8EZ>N&SfnEF?FTDnd~{X6yDS>!w-C?9bTs#Fm_!elC4yBr&!c zd-A?*!LQlo_IA$_tCbs8UOx8JPu=MdmZl+Z)0NRwT`HhB@^Pxc7na9Jqlf}Yvcuc~ zKeJZbOPwLqHM>Y`mqnb{3|nPH55ax9PZhnD+^C**UUS#FRfsUF&TaZ=dARZuRgDMh zf9fmoymrwGQ=@i*zT4Lz@GkK{`#4`T2v!PCh7#R1JS3qlHFriO9!}U99v6Bu_)*|5 z|8ieH&6WPO^Th(GLz1pNZS!ovi-)PBVsG0QxljArZDIdoNU@Ko`j{EJc7e4D(qv^P zFMYb{24qY9#Q%HfZo==0#S^~_KL}jZW6E)9IJco`?uYn{KV?trC3ldaS$Xw%w|>qo zPH-V3f2?iv+lU-7(q~2{;oEO*bT{`~Wt>;2i#Px#RcH82K}c1Xv2u5DZrxA)4Nppe z0GUnAr2c~(_mdk*0WY0h`LMm5xRhH&4or6r@rpad#vR5F^NRBnTJkacGB=>*jzR-G zbxIH;5G2Mjhul*6M!luQ^gh0VzL|PneJ^zfis;RK6Z|a#JGn_&%$U{Vocnv|M)=c& zFA_dUXrJ&;_+)5h@Ias|mdtwpF};G)*->IUUsg$4@HG7Fix-R2P8oZhHAEqgb*`Iz zVh1B%Qi0$vVVe;uFUa-fR&eRJ;U!t%{9w1V6qw;tqP-*A(odzYiG*WoshYCM-skj&O;pky zz*?Jc?J}+4;m)2TzF`X7s>j4~Y=omV!F~^tw8b8=*ojbA z?g!TE38I>YI7O&wx|&$G`a~5jabiwu*6V9f$#M|u^RueyPpBlk#CON{xv#a}S39Pa z@^zzn%@^zu(}Tr=Z&LqzaKH;*r@naa#GHu-5*m=8Q7w4M-`T&{cTQ^~U$o1|&ZTxp zZkNOvG22$J&J7@+#c%KF%y}hH_p1F;I`_ zoYLWs8MmFjW!ff1kxy_-R@VE%%Z;a~Cl%(;<8d3q8RG|-c)cB>5zKS38_{CXIg$SO zs(*|gfcZGdT4{gg7}zJ5;ZCKqBR;ZoIW3SP!mRE*r6pF@X#Ug}FG?q!P0I0dapVrkV1ua<(AyqmG>w*xG>mMF<~JMIez55l=HuS}2cG3}vITMIM3_ z)^NK!hwL})pRGmaC}Tiuax@yTB8#J|Viyg`ddh9)IJ>W1(Z0ahv>&nDcezPCVSn!o zayz1zu1cAR7F|t@vBs&aB%b=C?r^uFTga_R73RN)&@S!e^s*r9E~|S1RIT4&rhNcs za4@l!V_Q^~YT;WV%`WE|h2Qm|l)gd4U zM+9#K4}~6tyCx)sdxQ&xuZD_*{tCS3`&K#b)G#`w`(HkI(JT3{)LOA$tgorX@~-Qr zou8v=zoua1>7yX;nb&sr05o`#|j1I^4N^1#5DfS=l%q{WX#^@=m05G+(R+ws1}SD$9|O zoX!_mxKGS?&1U8??whY;r}Tv?_5)tpOXPHohS4~j2$2$UKjilxc$N#PH#Ljc(f-79 zmnV{Y4(z2FR_JnQE1tda!3g!Qn)zN)8+m1{+mXDfxl;P3 zj7gmzsciOiqG$-+X==?k>cwtGFUE$MYuS}T_E>8t-m(Se8mpeu-z%j2NjEjI;@kI5l!~Ut3ecyqI}N%LOPt|pQY*E7PqTg4z}^DPERTURDp@B#u`N* zN2)V!<%~pV)Sp<-t&n}&I&LYPqhfYDr#H4)HK!w^at-pF>t6A`#JBY;^s{fJp~U~n z(n&H$=6K_Xr!zp;L)}9|S9`9Uh%y$XXNpt^X47)slFc zjrwSAHV$hCxFepTH}#G3U#5~!q2LG93n_{P=L`H6xE9#TK_ zcQ|jE)YeNsmD(=t??{T#13yD$_lz^08=k#JH>w#-Hji6d?6uT5$c(q_p^H2 zUdWlX+j_dMnm_E{<;(6%(&nqZxZh}shiw)&Ub@s1Us+DHcT3_})>FHwhW8Tdv#QJO zuD!!-XH$Jr{}&*}a2o!@W712h1d(&Q@pcX-{y#=+ z=QgT@UDG=1zfkl2JY2_^)?XV2AMyk06vzDI0;dDZA$9Na@AU_%;BzyOFL<8&p^yC2 zd?&PY`652p(dMbx&(Uqs3Pyf(@^Yu7n~(T{i?(eAtj^{@D1w`aD|^LCC{KizR z=60I1)f*)jpjLSe{V)BN-d3-nWmWSlCFK&*Ft069+%vH+3levjSuQ~I_-Xt*Dc)cr zskXQc-QTEDcf=Y(J?g2kuCeiWOy(QC7_$mg3K+p%l3~@iXF}xNV}FeYq!^y{i}>Sq zVfP!@a!=jPWTYG*8>R}Kyk7?cXWa@p~^>y`c@gMUq^1n;8Rt0}${%+y# z=O68_=Wpwqr*&2$-a2QYm4NRtlR3b;VZS7@@o%i{qxfL6*cYvw_7LtBKf${F4Qljr z^Nd;CidaP<(T^cMYMlIqQiJ@0bW$@=h4K&5@-jnFFiH4S5e8@;-Tb%Qz{$ z2?2UAaVR5*xe2?E?S)o1^K+w|(bYI%yoVR)6KffFU#sy^KDBDtGl(0!K-}MWyD|2x z-|mQiqrNi_R(Ubvfxf`o_6l+N3N*fN(Uw)n8r@BnRs|$^H232T88Hj4;c$7M98y|x zim$6)Q(JQ{cVDYUJVrBY+h_Ch|EA3-#j&?_@MFr{a^#}S;-+f=uFZ+|I&N9~5 z&{v$wHAkp*SVa3sX(lyv_t=N5?hyJP+CAK%*rgB2IoQOA<)G@p5&IQqA{6>g&JMc~ zw*7hR?UFD?Utu2idlR`Yc`o-?e&fFNEhR$k%L5`w8hAHgMBe2YwTa8yMTXkXWSljD z1}O-Tqxh;rs7lDMdpPjd@=%?MnMAG#jBKH>OoEOeAP6K~B zc_3tFCe!E~bw>n=swDb86LWlt2#Ar4M=~*GW3U6hBClcvH$ZE6{&;TrzT>oHxXs8; zT8O@`=UwMLlbu!Um6x0%L>$j_my!iG8E^LpY=!5X2EJi!e?o4}eKdMi*9YG@i(7^q zmO4Zg=i|<;EVjmLymBt%w-_qxXm^;~FT=i=$}L!uTL_73j-CCNmxB>p#pre8EH*~& z19QF=F`nbeje95;Vvice&DcoT`4^R}_*%YDH{w;g#^btrR^6xmNyPzi60Xjf#87T4 zM~R}ihF|c!vKU#>l!HXlOp(X(wSqg2mE2b5Cui(;cBqCKR2;#0d&+FC!vgymzTz}8 zQpR)Z(vYm2Q;fN<8!@R9jH-Bwgghl!lb&rsh>)ryzSmb|))m zrqXz0I#Ne#I86L?)NII#-(?*8%w;lGN|R%-3{T~BqBcg61D2aR?M9II-&Te~Z`Rb_ z$eTfYe=Dj<4WVMo9_@*iU9Y9LK|42~&QxV+vjwP(eOLQk>kf5xs+vdL3a$SQ-lsG- z1o^p*Pf#pkY$HU6CK2WOIs4KEGT?5aA?gqVTau`A?hT1PYK)HWNPFJn(GJq6jU_qC zecg39=Y3Ah_ZytP2VseC#6zw8-^kQK3%!d)-W0q1nX|{4!!rjuL$S$5WO#TxvlctE z4u9fzr^pffgFLIwPDwl<4>Mw9TBA@l=g#aX)-|fY7aC=3lhDXTQ9BG*E{Kb z@f~&1t8tFMsjb%rQrG1)H)1vMFi%7)mSlut_=wYGoArK+?84DRxW>?(Euk$g#R@Fz zr6E0sh>1PH--p@3ue%qJmR005&7_UJpcLof9P^YOE~Br%qIE72|B;!WcV>LrBTwyE zEkha4uiWX_eB-H^ASl3jS!?%@!JT+;Rys?a-;k-3cqINpzQ!<8HJw6E0{2)UWGNSR zZVo4llZk)JGauv85NYh}O{oy@KKYK**(WWx71mhH>mlvOvgyI?{tLN?^19LifABOU z>M}Vx?~*f;qElf| zxFgOAPILp2rPfXd?nNfEg4WaHWaiw*tx9QhbQ||A#_cW6&fC|jVLgI!Iak(D}EK0qgGo1Opp^{R0e8@ZG@8rQ$ZE1;L>MGXpE7Dr> z@@}F-Cu0l#K;GI!G-(fdT8i39+30Oqq(Y&#%WAmu9kIwu;X7@?ZZ-h@@fE9M0n)X_ z`4{N|22a1lDfuvu3(hmV3aO0HE^PRLytWNF8lyQ)ui_OyB29genYR4ABY(fa9Y8Io zD7vZ$@_h^+2LNx{zU092qd^;|=EwHxx(FBx8`D z22OqYQ3>xsH*S^2V3E&Z4eeqLJw~2#qD81(Np|uLPBjl(i+&mYRy zBJMShI>(XB4cyXwh-9|s{R&W(V&tF((HK_gb0>sPrEP}(zKKU;#Q!7e z9N_E9zPEpTZ&JIR+MIf7Yo<(X+qP{RQ)_BZZQGq9waw(-d-#5L^8bC_o=?*x4enWI z@3j}6^*nSE{P>9}Fid}!(#X~E9s6ZZuBpss70Jx14^;o=T>GwO*BY=&rZKOyLp!D2 zBhq@u+DQx2tTMK00Ly(XJ)`~}&5|ZerJqzss=3r#{FGKoR`65%@k)E)YQtYD(M7bi*y&h2FQ;7C>mAU5{O3s%J{JaOxoXI+_dYa-rz20P|7HNDr4 zMeVLGCt+WvRh!|Xs>Ymo3D6>Nu+<4_FY~bGB4ViN*lMmb+G&GINlyGw9L~EC%2ki- zJM@!I5YyiRsg=Sh$tvAM4L?4pj!{%4e9X~pW(Kr8_PI>m@;CHnhRD0+_jE=^Dc6ag z>Z?mR|7~Uq8Z(=+o(@SQRxya-ljyndMGcr;Sq(4#R((D3eSJLBcC9BWW>?S(vvdP=bin0%~ba27;HMv zS*f-b`*rpzd$qkC8%g->W>m8N1JTxy7%U15$PCy#eusH` zC;hfC`hV@oZ@zt$Uyh%Y1ii2K_E+NeqVz@P@wKm= zWSnRNnLddF@5FiLuImsTour?Z1oruUWHL$F6RU{IGlJcmkK&C4KD)2B3!RDN`tN#0 zc2aLV&oF%nS?oh}6t3z=^uNK({-)pJOpDOsvwEhfHHqP$GE>V z!Pc>jN>FKHvm~sblX&U&oL!0WK0moWaK{_*HO1&%pWwMJn*_qpjt4`y~uCfx>VbM-}S1D%EOLE1&Es9kt zQ>mK78TN$!PeD%62}ETfw>C9h!x8fy_ToRP+;^Q3ky!U5)WvGucrC*D+_FSh^XZBwBfFkKew3Z5_O+lI!r4)+K{y`cd@oI> z=s$X~b-^^>Pz|jh3=0$RCs(y+oaCCGj)=OmK2=|Z!sbc+5*4eVoc39CRX?(j@b7>23$DlPxw!Ze5zUn1)b28?|Gb1-JG_pyrF#NA3XRo=I)XaQxu>cIM==E`oa7y0ZpBk z3DCJzSX{8lo$(0|)~-O68q#PKbr=FvEa~tMy}Ha{ermO zJL)StiR}loq6=|Wt>u&|iw_QG2Id-G^O(H>yUel|+H0`QaS&QN(dyicrN-Jr?HR12 zy>#M_V70qUT70oJEL#WvGm-T(A_iSjms77M5p*-IrZHD5EYp|0xQKK96!v>UO&~ib z;8fO4Hgeaaa21pzMms^xBrALt!{p<#BNrr_I!dfljoj*nnwZ&zA=(!04pDPFvabmI z%5Z%-D`t&8T_1zrsYA{YUw5=8c;XRSc}>yJmJCQMR|$SH0KR>dytOrN_#rC*-lsLFmKn{ z^RP%qkne4|K;+SXn$1pIi*+s&zkIV3660kcE>6oimxBG4jT5RkyR@N`&d}Qu754lP&>I0GVlZTMe$E8Lx8>_q}tIy4D+8}=dFVLP7DhlLXGmv*z$Wb%m zS%*>eSWQmxl(<;ev$1M=GDRzVaUUY*3{WIJ)Yfr+m)GKGXR&8{>Sc*w3%H@2rXtWp zNv_<68>0}cIdiFZgfr#86})76*e#+sskX4AMv`mgBx72Ow=BqNdCzXzj14w0!8DKw zkr8z3HnU<5aqYl6&jOX-3cS@&>b2v!ma=Xx;Hh0Z4c}h@k1NjWT=ZXyf>6jy4$%;7 zVFymI#rT@L#7JrBurvUpx|>z<3*>AU*6ub?}Y33h`G%45_p z3*&v~k&S*=Q)?AKs*Ynme>1uJBl3tWM0_=<5_JL1(3EOr5%Twtc9F=qmX?UvcnPOk z0j%;349^@+@4U=a&u03<=C^f#2_q8k+X8N!uhjk~%nKH^7*Cgp+&5pxvZNR_~dE!-*mw@;g2rkb3W0bREUU@asBpx z>n0=nvLJP}8rWqJ-gzUDk;&Xh6Hdlsa28}HLtYA3hmSb8A6D6pB5_W#svXoETaqc< zLCLrn9=GI>EUPN8;q7!lJ9C0B1x9-2Tu&v`V6wc=74 zI!+YbS_PL59(Xj}{%|Tm!-xmI^7}GL52>>DVDH%E<$HWDy6q|bNNa|ge)vrv?6(t59MbG>gF|bM&o?Fka|EYIi?{sFp)MXkyE*aD& zyhL`BY5X>?;**}ZGJ;o)II>HXl0_x&6t7RfFaB+5z z?4F4^i;8kif93wxa<|>>PE_Upu#2I6)ddC24(z2a?3~72wd^un5m>7(R~L5DGFHqH zbhm#H(Nb#R3a2uWnwnQ`tlbv>JDzjuJaKale&-;(S)`koesVLSmjAqj)IB4JcsDX5 zETg!yn0z3w(gDTJ?O>%mB`>PYLs3P#uUcvX=A0U9Q}Ly@v>=mDxydZc>$R~)P4cCh zOci?CW%7n0OzXtezOho4vrY=AaXF=z@-vH4``X4Cmko^B7)~Jr2A!#B=H%rJdO&Sr z1imhX`;@3+EaycE$7SN>U+%CEYo&%=5d3X%FvEqhOewplor}IjMmwb)*Nz9yB{!d~ zgnc@(ie}=8&v9~pz#?&-u$YRC$Sd;TV;XYqjKgCcC4=}tbX$>X<6N?%0N$iNI-L8N zY{`ut!ctD;FVwc0!v1rPcqO0Gnflf_s-N-5wA-UM^{@JrxFu(drxkwoE*U{Gvh94F z#dWCX*CCfI%zpZzUB}-H)&9~la{l}W^FnXVuPoFi_A}302`Ta8oXiM<7<^@S| z0L7q&WK2)V21fGCGT>vEb2j8~Ed0W1EHcP$fh|&j8Gdg)u)BXNfw;(lu< z{fZlK6nsGqFe_hI1N#l<6xzyJ{tT}YVvZ*tao%6}s8Q4;w&1VsQN2h+HeHr1e`?IG zk*PYiqz`+Zjz$qIvJ(GlgYBzA@Afnmy0p}f=Q8j1l*(u>?x-_1*{j~73mZ=>tku>! zus4=!yUCR9l3ho`@D`@W;nexYX?zAB+>O&aD|5J4m;srJk1haL)dS*{&Prj>L%U$C z$|C=u>)8>`A(w8{V5-`NcblGFE20#eT&52hj32zx61+qQyM&$CcF>5sXl=DNqQAS= zTFkW!H04xlHrj}rt-V<1z2(qr&47Ml3(lxTL^Cfzh$O(a6^KiEkrk{WR(pyy;*x_! z(6OI`QtvxAIhFe^#B1m9BDv`NuVj6EW@5CFJd|q5Rc4+F<6ozPFuba~MEf%rtPah| ziKy%7GB-&rN=>65gAk?uI1nI3pH&)vl;X-!5QO+~vOsC*H*{l`ht6aP_~ zp4l^0um7{2p<#Lo^!;vY2OX_7;3xlPrCjEJ?ptpxzx_L&xGksBA@Ttq{`5~GT4;G1lN%IjLR|}|_r-(tet)P-plxpQ`{K;sd zt2|)U9`n4{fD7u3|E$5z$ZDsxGx0V(dnv7*#mzjs22{-BJZ> zOe0G?gDnK6rWpIO7u}0}ROf>3Z>-Jw)G^nyTi$_hstC{Gc$kn*NiT`(Q^MO+Tkb*R zun#t|*Tk`@SuN$28cJ(wZeyu?Pk>8k3GvEqqT9;d3x%f9D zcw!Yq@go#i4=}AbhtszUbBslljO5HOTJ+r}ZwL|LDpto0)`x{fij)1dB9fm@j3yMmER+TRfXA#e zQT=>k?IU2B-Vm`RL9@Lguez^1o|@)%`7qw)3fQnns{dc$`$+&cDJ@l#;?#r7P@$}c z-)TxL)`h6IB^GSSSz8HfR=}nil%z_0yvH+q_P=zb7V%XQ$@=4G<#m3xagY9V#bMr0%9s8acf{j=aOxYCA;ZGR9uHi>_T{utn{4XP??Ly`uAX% z+YRT|ENL`nPcxoQ1y)Q3_L7WZ%oC>HkHJawH?MO7u}f!I-|CUImgZ#0K~*?0sCSRT zcNG5dDT;#k=*wKges}qMox8ruTDZgKpV4Q1M`!a#jQXI0;$T8}>9TvjbLB%TuXM~+ z8EwVpJcnNVrm?UL3eK<1@Istp?R;Q*&}Pmu5v-9ycd#&3#TsNn&A@H+AbJ_c9W17Y zy8>>$O;lmF@SG1(r#eZdbb)nt3lzf*DiHT!LAlA_Tl5+(g7&zC-x6PQjQ;aB&fnFX z`}6o&GhmOL42R$__D~n*tQ%AJ5}Iulh#w2Ul$#BvGr@8!w4DSyv``Zf485;-me*0T zImL<>UC*W9C>G);=i`^=bCyma!Wiuh=MD!^tsX#Czc=^W6F=UazrDaB^yTWqXS!nT zF8tew)BFDn->pjqkN~dQ z%tRC=@JH2n{X%W717}w^X2%DDg&EHMjUW;m%hMmpdn0*oGIu_MYbMuJeArm7F- zvD6Fj5Rc)@71~Gl$l$JkMmz-O_W)>stvvP3C?zci-vlBO|1pJY8kMBk{GAHIVlv&w z5m;g*{EB0+$LN@U$I@Y+2Fh$P>t;PU$X0gt0eFMxiV!w7Oy$&g1gz($J;O z&FdAqSyfs44X{s3&eqoaZNb%=)zu!0b>qJKl1&X@Uk=4)Ls@YH__!CgY|q!UV}-Qj zdz
    hN=Fq75ZfrNkvP{c`a)8=S#uxl(a*Ct>9XPIaMjA^4qX<8V1}8prbK3;uY) zbuHNYzhSNCy!QX_RM%Krf;m`dQ=Vsy3GKoCSnUveX$P^~Cf33#?tV4@Zs1yv6<5=F zU%}_r^8T8bYaL9e+hS~UlpgL`&hV@J%m=XYJ%@GeJ-$dVs7HbR5nRa$d97*Kb6H?W z7Rp=&Vt7-Fv!+UMkL9?^^W23x+h44)>Ri=$Pkba4vMTYvWnq0P0oQ8L7|zu~SVZig z?EJheWQ(y@NgcD7gd&5`+ew6VVtMBUzjrMAyZF3NL5cke!Ri(_<_cqV31(%X`XSi! z#cLPqOeng%q{j7_9r?diCREBUbH5j`-Wejwvs|ZHd9l|qR>~19c?6#)K68q%6UvI$ zV>q23;tij(zlFMh&U@3abe@z0&a$h2D$cpBDOk!uyDolr-kwB)k>t zNigLLj(uS*p~fWG_J!ht&}H}^@3zovh~=6W+~2}-NbDy53T?8R zF;=+Fze4Hl2J7$Y|6NyNEOd)id4vBI>Wa6y?*HHJ78VmfP1sGasS7@D!N4yRA;fbM zEb<|2DB(lZ|9gGV^YDuQcL(AQlXAytxqG4NBz91&T{Ga>1m|k57>fzp<=}mx1}ZeR z^7B?$HrAH^vwzl@uMkRQS@`ZOF_*Bcu(i;4%MfE_VPV03F6IX89OM}Qo<6#Vq&+7^>&_1thjT$752LHf7eC+PuTQkjP1m~xA+P7 zu%58I@Q*L}*+L;nXjH{2dg#B*t zvG9Ab>rH&-e|EYX^Y!SY$JpyJEA}ZrS?GQWb*|5>vj4A0606UV5E}_C0I`O|uFS&j z689P2wh|v@!;TqZ)`Zx5Vm%1Hd*Pd6^)to(6Fyw*wAghb{FCtLu}XkK z3&6+6;wywYhR_WWiYj6qc|1qKiyy1XBzC4ygo#zcu=v;GDMw*9!RjBY&-4NNiM95I zI~4c$miL6(rckF8Z^hny8gq%g`;gTrbWWeLF2(K>N@uYuRzk^1?7G-X_%ERYAoL+( z*OE{W5zkL(m&E#Bq1!6FOCp|i%9u5f8Ve-ld>8vfoMcI3ypZ_cRD4$0B-TI2`Mq4AwLM=mR$Hc0@h?OEN@juNNp^Rc+GeC#Dr{L9N-wIs>p@$(x4p%_zt0cAy$mAj8H@n%8gnl2)C6Q2<(8RBUOJt%Rui4#Yt$;7HE#Ogx{Z!Xr7@Tx)` z=@)nQk$a1MEACw=M0}3%Bx0qA|BKc3d&!#k-KMMNV)RYvId34PnxlTDnuB7zcs#7Yvn7@xR@_q=AI z026!Ci8D^D51~dV^OZr~f5BY}^*`a2zVe+ypW$oF-M`@Oh0@1s?p7#Rz2|+wM}HK* z{gTgli%t&yCs5dK?S*|C(!H9X?_H2A4(SVpMl-Xfkki=TYM{f6;1 zX|asWor-lWbbf?q5IT&}d@K}QUUA>TXFlh3CgJB4;MO$MaO>PdtR|$;Fc$eqA#6~9?@bo7b_{;A;0h42ldwt->{g8bPtR+J$6X60(|5cE zu@d8O$FW~06dy&bD)e^4*t{?C@ zp>i9=S`nv!P=paWT;eB&v-*T8wm93rG0&0#TbCi0{+-ty&C~kIU8TSxm10&#HeQ!l z-zkWqMXuYD{Gu426FQ?&e0S=YwUL`uRh?)%A5T9yYx5fx7n-3$(N3HsLKXZs{!b{w zeq{BgX7z}8APqlT#IFut{heo;iq93`|H8Rnp-20O@6E*TE5he<#;n0)*h2h?)$fy} z7sN1^IceVUy2TwvqF}KW8)YE}YKu-rRd|f*dYSA97$~oqGu%qbF0C${oqsCi^Yl;+ zr-55edLmB**$`iT=zXB3HUgBjOugeYo$xAhV`;GWiwZ(kGCKtv!9^-YKl#Z6u~|Y` z<%C*oMQTdD$wV{o@e8aP&U+#bOv@U5!ks)~6=%Sv*;rr6vC}~2V)D?>{Fm(M25aLB z&rc|@T<0#nvzGTV@qB^Zod65Pp>K1Ly6?gm{9Q?`q0`~I8{;>HrlruQi#XEl&yvti&Q$l`w3ijDyzG5#cCsE8!_2UIZrX#dv4{?Wwv3E;yrbIli zqO8iJWWYC=!uVTSLSFfUui4IQ%)j`VveE)@T&cjUFJ)J?B_l0_KX}CidS5Ib2Tq)A ztfq2QN2;@P|K+1YtGXwzNa6QAB3C?)Psj&mdj+|q##(E_ z{ibI{ou@ug6RR|$A~lq=?F~u*75Sehc#ZvJp|`MAN%o3RMQu*qY7+OfmMX^*Y+_O` zAA+{RW_;Kb@CL=m+aL3}65OTmL1l=xo|3O0!j3}aIfe8e?_a~VA+QmXsMl42m7xZ` zh*5m!H16OfTwJ}0sLx7UsCSl@c2j{gm}VS9#S8Wn_QrQQeX`Woi%%tKuG9qldnEQ5 zz!XSHuOz*{`cf9}Z}%@|@Ft`2&{i%eJ)~B=#pM}LCE9_KiqN`E&p9)P8NQG13~wYT zgg@kcaHYSahj!n+=UrruO{l+AA%~nz6)oDUK+Prr-ZP5NJi{xuGWI&YeRq;+nfsx`-Z6Q3FAxMSG3n1AwOb& z4dJzZ<@8A5r3F*kLAp+lWt7wb)cIpCj@(6-q!UzksYxo8)a>#bDtVcx1{LrY(|^z8 zEtfZ{ziSJXmR@DMo|Vc;EyV%lcb3fmG81|Cy^T!$t#j&1?dkMQmODtx;8fbfOszPL zKGCzODMc!i)dKQzXPb4$PAuJ1(yGnmFlu(Qo{d?yl+eVxKIgU$%frj+gXhc2k#}@8y=) zE0vWgUKjh6mBKZp!XTyFGSihtKI?*2b$>FmS_@B^kMHQi?|kPT_EyNl6u*3vPJTz} zuslRM<5UEhFxXR-#cED?mJ)g?oo{wAZ=7-$4CNJNfm_&|5d3V8@t!J&K__QWn<#yyYHm3Yd&}J~ULtVr zfAKuld(BvV0kD#fyruF^C7}wWK%V8%*MxVfrh7v^2N&`VIhq=5UHo5h=`^*&K2mCB zw_L(itzvdExspat!PU`2sI7#9nnBMpvD?h)=BAK~sh596FDPA{{IS>JgeXVced z3FV~j4!Cp=fv?>ntpne2PW}w{ZMfXSEl-zxhV#vRBfS8d_}v=;CsBlcK))s}G8+fa zTJPmOdPVJ^SIQ~LYVWF)bF-V7%rWj*?U4V3zq+=`=@Zlg^+U%TSRz3}{GkTvSR|Ks zco(fCp-3yETGIbn-{mGW-&>2M(#lmY3z)czQbz5Do={&d*RdJAWX+0;HEjfeXxh`PxVZ@b)5Eh3M%G6&yS9n^8g0p%RX*K_Ro0n!6lJCobB zBtt)F{H~RSkK_wJ_Nje2cq}-=&1)PD+ha74-qIOe>5TA3FqhDm`HjY~26geK!1?*p z87kGJ8nlYUHRH)ojTinDzUgWfshX3(T5LYCdr0j_WOB*L>6~`@c@@AwaCHQiuP3k(Uh^b+ewj1t-dJW5xmk9E+T;v827!SwcAO(>6W zuUSt*mCQuW0O__8O^lf)>@AUS=JzbSG(ZyY4k8w=+hepDHa7Wsr z<dUOsN7XKuW;9Ht#s($h&Qtt62C zhOy(L(?_}>7f`RE1@g`7Wwkcf+o{Qg^58G7cyW}`S}!!GI?1zKpIy+r7pi0>bS-(Y zu|2G||B&KyI+|BQ4N;eB?7h*S`WqTEMMUr-!TQIUuH)Nc(bfd%%rY#BsH}2*v zgP=O>jt?FUfbD~o^ROaI<>YWOyfgLMkMhmnHSyiFQp|7q^G_PUL| zEp~e|jk8b78s}A5dU;XsYhb*)67)lVuacF{8tfiamS{oQvH!F(c!Sk?%0KW`6j1iU zr7;iwt=z#{qvXIz@8392k}{9Rs8onIMWr_KD{H+zF*_btlBUC8sojR*Un+rc0Wr^I0-Al`&ZU! zW*xKYc+ItqzWl!N>Ty`?#)fj43#~(TXE%j%$I!zD8vW&>?n!X1U#)spR(HB`Kz-q* zvs{x|NBH!1OBvj6UJlfN?lDE1S!yIX_7K?rin^Eex&GDKNOzANS59M`(hl2p)Xe~h zG-H9DPzg%c z=oaU9slNJ659t-vMP4Vnlv&k$;?z{n=uMR7b}e&?J6elpG*a@oKb`H;L%D_b$tr8j za!N`o(UGX8Y{DNWSJtRs!bjmDpQ7uME~w`i2b*cGHvl#_`JI%A;V_9&Gis(|E^~ zi~1_#sg_#)!!8(X9Ng+`Qxj^(-7jV}_pshREQJx}O}A6SxO>UTVBU@n4{mpV8mrQGs$DEO0m_DZj`nwaQhneq!R<_v<~AE*L%u3=Y90ypIf7CrviFAz5PSpoTUppes6nW2`@n#oD+ zZ7?0Lb6!f7%74ty)R#Gmuw(3n%LSVUmNmNd-$&NlK+`L2Gjc)sDBGZH2==ecp@I&-r?4 zCA<&TB{P9}DwNz_E!Xgs3rp<#Tg}Ev)YdK&Iv%(aJZ;VQHmkRd{=TVtCiNbej#6G8 zCzoy5W2}%l+jgW4x@WZ3c1c~m1o9r`Pq~DX-P~t_`;mGo|ES}%R9aT0g7=>_GFUe- z*8CzBFw*&6Xa^M&1j##Ti5GCv+H2AOm~3r!+Dmg`PErjm2JU+u$Wt`pI)ylJIy^2itTxxVIl8hO2w9h_boC$sy+?ddg;Mxj%e zMIEhe(Hj$|Y&BcLi1N|wWY;6NwY4bUWq(4Wtn|UW7;0~ibLTtrL9RXFM4Snm?Rj;9 zQQnt8`@>xx+7#O8{6!vL+AHNYA*y}rb!Q6ZFX^Xx-f;B9@<8iL2yHR2GiBU{_GM?U zR2x*0kNoqM*HumiyN9Dxb-$S;ryvInU`Fc+z zPul37hm&Ei`w32>^G3=S#z>e_fZKDsAK)P6IQk+0QYrQ+v=z)dZ>L)_x6K>&Eh5j-!axZ@80wZDx=U8 zP2`5z^PNr719`DD6oy4d9tgs}1DL&oUMk|#$!0^idX9U^wOzg^zJ0_WiM+nHi+C}NbtZ_Seq4JM%P}=PDvlduKowU;L@?BzsJj65aygp1o z9h9oN^PJ~iLA9Y)S-A|8Qv#G?M#E}$)LL%$m+I*keRB;D>?dVe*{%43r(PE z&MS+1lN*4;4o4rb4Eu7qnoZgP5^s~U8y5Jc=08>vcRWg{1JxeP*S&yszMXnUZtKl< zvNNAlm3dX>Dq)#R<`~`_xxH$tS;3a8xkyc~2IV+XergE;_)Yh6-2h4ahtthI znL{`1z0v@D;~bcHH#2{-Qm!S9f?1_I>!cPl zC;7eSOb9Jv=CdkQghikQA1d9L=B=f)aGzR@?bhx#&@fk+5zIjCp@FncX%Ctn~qKq4OMCHm&FutV4kTlkt3D5++p3bc*7`CRWPn0Xa#q0F$vKPD%5A+_)}I34jO za~;1_f@!Io%01?A{itH^mEM9PtSsFi+sRCgW(BpKoSOfClfp36$p5vtiZGDl*<4@{s*`?W>!XBA( z8a&26PjO2)AKf+bUgoy*!uz+KS;`txCG@pw+AC1fS;9<8dAB_|?hLTn@s$%)$^Vej zgG9X`8?w;ZKF(yy7I;dpIGsETZ&**uu4c#1FXdNgA>C(6t{sz1)14-;W1?~dyF)y6 zIqJQACDXmZyoK(jg_&*<^4i| z_al|*bfD=rlCjkX&sbI-L}l_n=H}YMaUZ0sFrT@e+VU1MrY6dJ=@uBcD#U-Coq(Ov z%_sGgi4~YcU*pAv>9C^u0iMpD^oLfvW$m%>>V=&2@&+n?qgb&j=z5c=&!awGiwbIg zX*8MhdobRu;gC?Mz-~beD?K`31DLoAC>`XS-dHB!&NDlmjGdjD3i48_bA?b%^(z~h zOD#f;d^_s8U%+)1=K0KL-+pwvQ&ZeR?QFPo(gU{xHuEVfJOQ}d-BjuSrB=1n8SKuY z0=-SD&s=(9Wte=D2yT;i(7nmDW-Wf!UNY1)FkvmD|B;?NYZ{2ixm5XDQ#H;+9egdl zm0sLQepnOFv&sh1pL-^q=ef*b5@(6L01cn)?gCKCqq(=m%!Fp8f6$EeGnE<1hVnhC z%_HEZxlB(b0e;$JUtNafXB!=?GGKCB!wi!O{@Jv03MrR&*nP`+Is@$cF1*_Tccj;q zo{j?7$4DiK(vEs~X*xnLsMf~CqS;UZe&TNRTEt)}H^UD#idsTl`8W|!g{wV9e@IOh;uN8e+8r2gRaE{xxhpKEDW9-7eJD>%bFqgli3bkUDf(YxDK}K%jlV)0|-{>o@%6zitG5x!=Hz zE~mnN2H&@Yj>k=Y(gUYIex#AZ4ySJw#oY`ch8@9E{pvLb+jo<@n@2RW8hh4dKJvDc z9oyFdVVE1%&U1M3?kLyJ0#zJNzn~q+yKwqwIe8^_rOxQAuVYR+9TRo&(PePBpI3Bq zD)H5M;ouoa6+Nl^M4Bh}VH#vDKKVA^vk$!ZX0Vp);4ujCe526^sV=+pffj%UE(RO& zFY=fl-0vak0vSOor-(t8wx!?k4xN&j#OxoK@Cm|;G7`3iA51g+!M`?)Lw_?5m5Jy6 z9^86HPMzB@q-ABw`m(#u8Ev1lj$0ATLu_$UGrRT5Ex;--0wYZh7-{md3f?dSdzk6@ zny@bn1o4}S&sV@t=LLiLfj$446*`g0gt6FgEbrfACoBU2-&C%Jx>jFQc22X;_9-9b z--v$pF`ITwF3z;kIZp34M9B%51lh?{z;q(>>gr7O8TGDr%n=n=bC8yCGsY_ zXPI{of@u%f0_UEbY1R2mA6{pcWH&PcO%+=(uTXU6WN}?`PBj;nd z1ZFd-RSVy_fS>XgGxjx^OA9ie_6DSUeX1dQ-0E1N7U!6s-(CY-&!VfEf@fcduE=}X zfiFsREq8)>q8n2W+mtdy70a~<{jr|VxW%;M zY4qoZGF{V2|EMQ0cIokSDx^%6FV+nsJ|Cyhhic*4P3$>Cov5By|Ik`!FVsj_;?rT7 zJ<=dN$~*dVMe*7*z2WXe=0+ZIcj@hIRCJ~>J2MqlvEMDv++}7nN1^ayp&?i47B06ts#ut5y{!`y$bn>nCHTAtT z#=1p zjhSsZNryBs9m0}I33?r$;aSK>jWC{8P3_Or!w@A0dnPqgt3$NExv#&8nFlhld6PN4 zaOU#n={}+*ke`z@FY^=K_|5+jBV@wQH|H!C$erInYcHg8yMun- zA`}qv(bt`eV%mBp7f+)^k^es zHJD)Q$khF0`fz3F1P+o@$%!N?)67uSa}L_ytyWf17z>kHz04`0C&BH()6_2d1gr9Q zU+{czRj^+$BB-OccQ(3ebfM@$(NCf)pz)PCxEWp8e4*l@9-$|p_U2799V~m#t*%Vx zd}M;UzulWD>!4kMS^6+IjN&nebcfut1m{l|qK4TZ`Ula`t^kfE2RWP!9v}|qc5m{- zI((d*j($#5Ejpr9P?M>~yI5<7a*cSW08vj#@g*O;@x zs`=9TvccWh6-|rNzK^~v{sC}cHVWGn_HS6%u;0QGhvi27=dEw1(VKbmnas)#RiDEX z_7w$#4C)*rjk>T_UFDUG_J+6nEc!9BdE-=7EEL1UuT z1Ndxlwk(A4&ZA%KQ|qbO)OmEv#!2#D_^$fO z!>j5KtBfX+<6p*_I_;ksHZ{CKob7QY#Cea_&nSP;*sQ;1YVxs`1+KIR_%24{vrDTB zl@Q&k=U_Xch&MGagR41)-PpQnrZXFaPNEO6Gq@wzF8DpLF|aG}E?`h&KNeUP7!#-# zcor?M=;4>oOxLTj*Ick zHKiw4$wqAGW98&vMU5irs47nQ`d4B(v*Xv~lR5?B+b} zEf1#~oK*VcK7g4ZKK;2?=HbvtGy%4U28aA1q2!u8_y#?ci-9xv>>XIEUBHeW82vtK zSX8U1ZBgZ-@8YW>(JQ?d)IwpQRG}uJd!aFA9t$>QR#jytjUU^&nXujkCwpE{70HN# zBB}Q+Km|i*%E~V%XQq0*yaju;X9g`?*2zcS68DV4Uo`|Pl2W=u$A24m5fyaMI-<@k zM8$&aXy8Y3(t(U?+!hi)(U@~1vJ7fy_2!hsA^Qw&rqijI)q_p zcA$MkMqJ;0!CAM`jAQ;o?=CBzr)8)&-sdJtgSCQfg5!dtf)!94Jjh8`Ij{?s`{7a5 zqk2U>jv5(V0IkU0tgKq0$#`_tY-^q}lUhxw4V||vt1Ju<4`J{6lL_qmaIQZhc7I7m zwlij~I1V}Ced&dyGUwKYskQ0McUFc|U;){7Ezn)H!9^7Sv6P7ON1%LPgR?pdqG=v~ zzkxA$C3T@=-5Z9=By-*PBkB-iWQtOzYpYMxn&NF|Rajl=kPSu&$Ez7+2E4wU~T0jMA7P)9i_qn?i{hHg< zb=s2Y-=d#+3#FfS*l8Lo?3la^%WcDVMa0aW4ki}Ph2Nip1>2DABqSp#L(YAb_$qs23T*E5RY5AEA<{rfx&SD4YnhFT1fRj1kvZT>-lgGu)405#8;!@$$ptRfyU` zNv0orQtK=XJ}fhS=LGy@oA43wnWsLD9X7&~ah*K#JvnG|u%iN%m!5wUgJnHMmN=K3 z@HqX?NOV}+DraF!TLX7$N7!fvDudA){H%0=HKGq*zY&Z@mpC2M(@hB&i+m;g*HNl? zi;8u*@MmG;!bXIx<6NBR|I7EMaR5e%6=XLDPzG71&o=%cDzmk6+A6BJ%jCJB&!X|5 zMZH39YNwbz%lc&IMDtf7vKkq>9=ea+x`$GPwgk%r-v{=hO*AdgKTtGqE;>*2w5ViJ zQdGC7ve88Y>4Wc3n^nv#W;mLj@xai$F`HXQtd#Jx+_t}Cv-@@)*bqj702&Q`Z=F;b zmWIPHaP?(fZDxkF9hhI;GM%fPeZgm(Fhr5eMkM{ z!XAaa3HudRFnkoMiP^))gsEXS{Nw#gd}-0X>i{>_6#X;jL>i-x(bBlB&(t*aIj^u4 z{tI<>#hN9|n%GzQ+3XKm94-E@-4Rr|h;%)hm6I>Zg8tf5x6TK~Zcl5#NmC?6pV_l8r3 z9QrWz{hMeMj*z#qrUsJbW?-Iq3^v>=uOhqahc_$7x_iyMEudWa4smKvd|C~VRY|~f zJ_aj%m;Jbmx`9TOy)55nQ5h)AL~})WD-&>)<@S!#Zo?<#ykqad_9-VCAre(RIjfc7vN-W5s<9?g~yu#qMTcK%f~M?4!^D zyc*poIzhA!AYXU2~CD9L9?0c3S!f7o5Vx zr`MT+9zoS=05QXCqKCif`t744GMG5xs#FpSHk8BQ=X{30xQ-{wORnruS@^=tYZ0#? zvBe>J(-o+_eFT#*8FcPzBD3r;Fo+B13 zAVMt|2oG$Dt`S`X_2W!|UxB;9c_G8hY<^{p#zSZRpWv%tKh!15TZv$Au!zQ%Qj>iR zUv?I^CsWmbg3A3)x2P$#qw09{Y*cwJQ$^|pBgb%J(i}tZ`gUL z6^spZ1!wy{kOvh-8>Tkh=jA9M7emF@1=7Aa>>=8oUkn@0!;>(*H`WWXlk59(`4$@& z^ds~i{7NKMkD|=gHUy2|6JG7s=m#Zr^4QH$biH9dCaYO(b~1~Yin%HDTc{^$CX30Y zHxgys3VaAW49o~*4ZI?Dt%ln93U;T9T2Es$5ULy6NB*=SSTf|puN}7f+i~G0ctEA$ z2RscKVKkfO9w)PI3NAZ}$SMig^)Tuk{pe@gQVQa;L@)!Sp>}i)i%g(ySdI$zC05u% zD!liY8+ZU3^#Bvei2;0%#z^vR$EfRD!CtN4AM0P~U+N!*^6@a@|9$?~==VK@J93)-3l6-Q+FJdT zk<2&Fn5mzF6=a;6RjDXFWsd$P=%)T4&62{#+JnARM*ERjfv#N*>Ij>y_*M_|9p~rH zVBVk;qfu8nm@gO|SQBU-s7V$O6SAb z2$tHVu#TmpUK)hYpb}g`mpMn*)5q>lefW3q<|Z~ABz@vkEyFHL3qo)_`S&`!{$8vl z=JY=@EwhX0{~B57aU$Cz#A>N|?pweKw`F&BmH&+S&Twp=ozo>RjAJcf9Ip+N+dZl{ zqhXIp4lC7GEhko~j^$>PIUVt>@$Dc6`RG&7hJWpk2+N6*;$dGt-(Dl3QI}OVkebIG zvaW|%eK#CUVfsL=o0?qtN%WYFs$f34LwnsLV4OXeQU};R`?~cI6~1@YEc8c5QQ>-p z)^PIB!eA*B{#pfB1eXwpJPsTWybWXzb`BmSuN+U!t08EQ&L~^-3^hPar39;Pnw1cK zo$vNQ_G$)tPGw<>s{yCDjI1LxnzivurGc20-EM0zgVJDNOOdVmjnPv!Oo`1ix|EYR9FVBC36 z|FnquUfHTF1Hsl;ZKQS6I~s3{d&VqOjMktZPzr^yr2dlrQvL{kM}Ki_S01lc($^dt zjxsvx{j@^b6x0O&)>><8>4@JayLf`~V-DpDIcFL=>P5gLmj`R?!ESLGzTe|^YI^~? zakZ^JRu@EBTcSZakKC$xs3KQ2s)SF1!-K_wg|ObqV6M={P+?Fv7f`s!3NCOtnb?7l z9qMQraL{bDi-2K03Ys^oYf>@k06X9Xry-mfGw|;&tLiW|>I)md5ppGyDr#YTa4zu6 zkEjMs--gXW*8r*(wg=``1Im>BoKO!yxs?n3mu*T?YW)q-&(A4*6msb;jN%9w+R_1Z099A3&TP~ocw$4@dwx(kAG@1+ic`{x##1T!ng+;qpgNU9dB#wx7E^4M`d z+)0_?hu?wXz;GC2m%(&%5k|c>Fiel42G9r0!6+?}Zo*mpLLCjprZucm#i&~5K?B5w zukfB$Mt`dhGA4j_sf>z9GT52(=<~F%@K4P{31zU_4sC}~oXn&2Ou&gMv_vQaul3{!drQlo|WZpBIz${ga`sDN&CANI)am!-4^-Rt@!hU<{W_5z^WD^~@wCviF#LPMAqg^9nnNOUOm-w(R-L|K6 z;OI-Frx(sXosr{oA#5Z4)rpX1A2;~RaNLuhQS)?}JJvf4Yxq=_60vMks^dV=#m-H`u z<{9mEXp3E@%Kd~6lLj;7LYT}l*_-H{NLG}Y2z8^uAT91%H?3_T_7C7CS`$s*wd2G8 zI1&uv1GJAP;+31zKW@$y=}bq*A}>5KIZ?764TIVr^n*RO80YgMkPeGc-MH&blfQwk zAEOlGf1|yQQWQPLVp2A5CH1TH@D1IkV%L!F;v2Lu(qth>o7tP}bk=4Nd8C$hc^BQ3Xrv{U*w5CHlVqftvLAHveC!uNcl5ry()$~n6TtkP<=ni0=)7b(}}N^(mnuQ!&HuoPL& zGbXE+k@wJ72Fo;4X)V=b&o<+?T!l|6F$l7Jpqyr@-9To4qneRSa@|Lqr|NPRf#tdBm97h>>Jd=6t++9?;_Ji7L=(vnjHlstB+q)nYp;E9&e&#iG zH?Z2rxo?O`laM>a$9qJ&^?B|S@eI%9rqstLp!@817Tf)tBHjxrLM|g+grT;Dw})u; z6z5nw>ipB?wN!yJN@#^RKKF0$AeGpQJW&|DVb4~)FH$z;E_JkS@L&#+GfAhZ9?x(p zy6?P7bWPu~w-&SRpD^`wS0L-%G|E=cStV4#ZRzk+8`@W`qaX}Nxr06W-D*YsAL_1? z(5X$2cU$63ackpEFF0Mi0`eFoDg169P+k~I4=E*kd-XV1c6cwH zb+Cipbv`p;xZK+)Jygo-5k?h#t8(01?mV$OJN?kstHn;b!g*E9tAZZ=ZBRhfVMsnD zH<9{ys&}2We;Q7&o%rf{;0N-N6`hgR%YT44k(8!9oncM{im~V z806kow}n&*WY-z_yjP7KEzvEWMx~_^7`BJbN%x?%MrolIRJM9YLE-K6KEjjsQyNd7 z;jWa&lbL{d<4ge6bwc`!3QPqmTDM`ATh02NfiKzM{lsI=cH^OU_{1J${c=J|SL2f& zspLRmt*^9(Xd|)LhjVY9bKm=iECK|MlAFk+tg_j88_H>}a&M^r>2b6GHK$Qv{ik~~ zouAfwyS~&D{=#m`R+N4+%T?V));Vi~yAUi>L1hxB*D9FX>PvIo!tg-X2Bq3p@i6gzO2Sn@Y&gklXtqXdt1Zp z-R>Vuag3(k_?0fsD(|8bA{y=PRFO3Gqc&OZqaBfZx-YEv=5lK`c4#aAkn7_I?kF$t z7%iP$ZiqVg8MiR=X`}VG>L+i#{l-cU&Z{N(nK;sOsRHL>Ul2t7rTj3O=LCV?pFTq? zCj2H@1Q`ZgG)(QK6kz7j#*3pD&CJwxmNN$mnoze=!oFt2qI8@E*H0C8?lm2-jo=)kO^AGA>&Jm)axW{bivD}g_& zqaM;MwXmGTJ#0sVpDoPqdJfW~xl>K5r?gSZ$>*iyN-gb^mP5(!j0-IdZLyO`g_P8E z7PiO(yhulOE5hk;jUBySI<8dKHZw;shKb#ZZb7`=4tJ8%jIQG~_oI@+m|~>RJE&vi z<8IK3Yc*$<dK=3$WB zXRUtdK3?YeSC%VkagAzfH76@|o6=quR7HC-6`DsHq~_N1s#o3GR-_qiZ^83DhtYh8 z5>KnFS@I%RhH$yM8p4Mu25|ymW-e~ZGZ<&?u=Z^CZEB9c{Pph1V)A16x$giN}_o;?~+}O$o8Fmf!V6XuuZ0sb#e`{JEpm3>>N%vrgAgjy^6R4nR(hO|I&9D`PISh z8ta^y-25ZtH=i*fc9%GNs+=E>(OjQt6wo5P9OgDUix&dAn zY_D&g^0)KEIt^3lJ+pNvhn-q^NB1hdw1?kg>M49*)UEDPbAM>QWl)dkPps9Es!MM< z4>3wLr2&|cWlAmSEqv4+oVGBbhB<@4=e_VANZr8?H&+LvT-F`m)rC2{^X9Zr5p#?^ z!>gqf*9PlZjWv1`^`5ucPGqHpSvO$MLC19{Q@hLcS6Ve?1hK|*COb32PrTb}tTt9> zd9Tg0!98XTZ>l;*KSrG0Q7a&CweN?vn-849Xh8LrdV}F7b4v72Ymy@QQ-+WC zUmzn&Z`497cZB7O`tsvKRC?>aw^doFeK#_O?ey2wD!G@;z1CeIVIi(bkxxMapr!q4p7ToO#dM>-+{r-^EuPR`)Y&<0_RT8=aK~OuVP{zB%P> z)tYYYbi1m$uZ_>APgT~_6Zqv|$hSoQPf0Dk6BB`W^RG@KsezXOZ2ME`kyc5ctW+hA>Bh-8 z#%>z?9BqXfNo9>{{#iygEv5QNF6f>QMn*Lc_Hdi1owc|sohx$eU5d}!Y3(yp+5Oyp zV9hmR^}56yhTIS=MrmdQHhF2B99DMwU$3w_P@AacM7O3n{rb{!59?D@rl{WLVdaPa zaaeAnmOKn>a}T$Za~wt1|JUA|z}r~8fB*Nir*jY)GKUPIQi@7MB}0i)Dntqm6jF(j z6f&lX22zQVOp!4e%1|V8hLTxiigTQ^_r9n7yw_f>XYV8WHhllT=l6fTI{S6@zVCIf zb*;6o`&!qUuIsZ_dspfvwj%wo`TvFS-xRIA9!kXQ_VGUWTy_Y|w{A!G*2aRor*XMe z(>$zAVzzgQpJiVfYaie3Ul0g|j|6|VwlZS9(cIx&lKuX#<|)ftXzd9N4J{5<3iSzP zS!4ay(No!@bLY6z^&@yn?+15dJZGl1hl`(R&-stItDQHz_q5_hKdrg=BJFwpBuI+Tg{!n%=Zgy{tJ{{YZs2FaT?_@?Wc!-w& zZBFK?teh-+xmG^VH`FWKAbfkUzcI=)@l=dP*Sj5zN`c~5OT8C!nF`nh4#t;bIvRUq zqCEQdDCe~{^)5+#t=W1xvk)lkx0%I_h1zESRj?Q?b-U9iHe|F~U;muhZ$aZxY}vj| zh!e_&fMVO3b?^_gMj&%PU`)bR_W}?`Iwl%CzKlCU^Yv!lN7ybcbjN!y`QY&zg{*nzd)in= z`w!}!&0X4dr&auf^SWLj_*F31+>jWBPw3OmBW_9mQ|&71eiEzW1)zdN!P0mhPl%iR zhumWBC4PQ=9_J2D!gg{TYtj|8HGa&^b*gw}wHcf;^O8O{anx@}kNu-I8(ZA`dSAb* zyTW~yvoh88FvEAgKG zx;cur@Uzwk#EHfFu*A&x)SN-FMcSg!*6{6t73?Y8WRx^+^skN0Jk=#yDp4>vF*MA& zfpL2wW4b=c?|}{2S}#|-*qEkYsz1Sg-{s6S3`VStILW9OC?u=(x#nQ2zgbS-@6YCh zgD2emPIY&V_ncP7x+=6N^r^KvQQuwe)MkzT7m%%&c~@v9%?{R`W?xQFepfGMyrd2C z8e@6!F|*1Kz=+SMO$_eNI38IXaP=jLQQk6p0aj(NIPdzsK{4&aO4>N%c`Qb&>-)Td ziTlizf$Pk@-hucv@h|K_?#~`J^4h0HCbpE91}`&*B|hL3u7UV$l*LxWb!&ne5yqFf zrN%jOfv$`{Z)AQEcTdKPvis~h4<&N+qvqRz3xfl!6IxI27I&W)Vs>owwU)ZYJoM!QtW4G8p`;)CZu!Y95XlcLZm@tP3SzUqgOb$TUHZj``#jIXS&<^+)+E?dZ9{t?gA1Ir#HT121C+CIy$gar@ zR&;Co3-IE57c{PJdR4FuMlo->I+Vg~dIr^t3t7D@QN0{IIYLD>>80`b= z$YHep80)=1`d2xvqqjvjxf88hBaepPv+iVtv4lA^aWr`86R&|6jVCyRZYJ}l&uB;Ix}ds&hW@?3#<|Je zln9ud%b-0a@ZGg8>=4~-xQUPOhFZ(%8X7A$)mc9)jeqX0L^<8l8yYtInBQt2>Fvn3y9_(bT(Z6Aaw?8q=9TyA5 z4!Vo1x*6p&W(FQ*9AemuVpZe4op1aT`qNg!;Jd-kt;%|sUjGU_7fXBVk-Sd+5;H4! zGVrR=3yLlM8WF5#jn;S2j*i*yICcFm^+EwNbbYXqF~FS^ z9hNgZ_ZfSURwv|TEXddudfeKoO?MB*x<`w|KXcn^eU1B#33wF^O9YK+R^7mt#z=p? zQ_pks+XETqjcy=XH@4It&FK_FwW;pY-eLXvz?0V1dJp=3A8Wl2ytm^^qu0mFcp?2! z^DS#!;5Dqu3tQc^WA0k}22dPU+SfDJ-J%r4^!^ zeVP;OAO18H#jbw3HB6iAY{BB~5qqpt#ygb2Pt}UEHvXAa-B{x-wjXdV^}8iDdYhe9 z?sfVd!D`{rfhKx!cGoY~I(y&8YDTYc8X1}FhL<-V0;vtZUws1H3k|zR?nPDeQ9Y0Qcr+a8?>dDhFF= zjh&#~$bFv^&YEIpzhC#ww#H?6&Rq?PMJ0U)do<639&!bi50~l}`kU~9Y3IG3c$Af* z9*G9tH~tK3Y{q4oR|VR-^K;6b`XINk-QC^f*EJV~M`pH&so!MVzcZpr#Z@>%KF)V9#AR5?dhV?p$ntssBN6-J9Q^A?$cGU$YMfXs1 zYq&PU=^K44y3i?)UvZAU-OR*ed75@J{qvjtWrk;T*Y0EGQBS-FX9wUxUD2!-_{jQR z%d$Vtoflo=9W;&L6f2Wa;wsk9F2)1%N3W{$5LP@_c%D|rGJ-n;<*b8xM=Z!enNHMm z_r~6cPLA*K&Nq4n=7sJL9}FHahim!0((%JNRdY)?O^v3Zk3zews>V9JLKALLJd2*! zuC@kR+x4BuYXwf8Sn1v7Z^mPOH6!pM+NIdk-mi7F>fsH3E0#!g^&P>E!ABCnFD8Ss;b{5ZoWy9T=&VwAbnge89;`pBhhuy9bwh-LWC>rn<9w^N4i1St5-A?~$Q+m$?R1EbjlbsH=xh24 z`t~+jNA|>qY7NZI@S}h}#tU%@;R1gWxbCm8r&xniUwW~E{((Q#Xdi44+^4^dx9A7j zV%CZ8af7kVxmj^9@p$0X&_QeoI|tgE&-jC4&2u_MH+X%R?bfosOceAFpby{DJ0!01 zhXB5diMgKP^|nj7`?Rs_zKqtZByQsr0|(JxQj%6{DdZ;f-A z^SnF7KcIbU_6n_voC+<~pR`Nm7Rg-|YvJCet+tAUjqpyZqh1Q^q37c#qdB&wHxJAW z^t3+1I(uY-wK3;8cLtUw58{7#Nus8{E^vFslE^$G7JodaPi{WDuXu-61h15Gfq;KJ z+9SHmHOK0u$3 z$9O_N;LVRUjc#=M8?61SB;}>U){i{vw{^xD3CH4EE~^B5k#diF$u#vK{fTzC?S`ebmYF#0Lq@Uj1t6{!31MDp3?sHbfq@9X`piS^oHEM$KGedA&Gp#Poms|7BU{%N9t zKgIpQE@wA%2kFg26Cz83Vf_s^=xkv05O6kl_ZroMHA1fi3Yb^38yoer-Kx$BI|F~7 zPV8{_`eHPz1>VL3+C=vea5&y~uJN8_uC~hh*xZqbusXU-JH_dBrS(dQ6`V?1-k;3g z-~jyGJ0^O%lbns-5v>c@hu5-__b&TXci%{?w7Lc(#@$Z+*fy|@>X|k>J*DxF&oHmmOZ&IE#R1G-&TjAL-lKj! z)^|PYTVr9OhksY%X)Qmy7F)21y1_FNW5IWu9N1^|G$ym={~~9#RlrK+62By#zqRqn z3Yn|TN6dlxv)IzlXPG;&igE^G z0i%W1nf=Dw*{N=WRpdbJ9(IS`!}j(OJP4lFUt(RqF6alZ<2(BqHj0x#H9KM46B-&$ z1fJ6G1?yss^8>zDSF;nJo5(h&2Le_=ABUAzU%e3seBZ_w#22`|wE6f`-G$}FZdP)( z_`BWfk}Ip@u%Y=Ggo4gSef>B#K!e!F+JGH;i9`$bw?5YbMsdSHCrt#i_S3{5*59f- zcleX&W7o0H^nrP~v6-1{3HzmZC1upUO z1x0Wc7!ef%w}K_rz&Xb*?M_PE$*IJ}j1KJk9>yQ{an`O5VQtjVe#U!UKQ}Nt*a|!A z!{GO9@pjqk@jv_2F5!38pER$;GEAJ2dA`{@QN}$E0@*QFoQB%czgr&!f?>(P_eN!H zpm(R!+g`wWYCYpB{Nw7I1z0bi0|rn-Y;fAKs@mOLgvIwa)>OvlK0CV)xtBW++Q;oK zUPUD7DLh#@b=@eSmrD%v`eMto5KVolzS`KseE&Ip5eO-VyosCzSPUGC1IC)b^TA2h zWBTKanOCp^zBx9?-sC&x&7n6!KL^&BbM>}~<8Ec=344ugu@|~NF+;zP8P@AoWwQaR zhTr%(?o4|{{2Awh#8#tbU~OQBwHnRyw)dLzlU>ujCGnb3%lgJ_i6z|k>}pR#i@o6A zs=dr=-*mj2CxCWj85huZukucEBGxCIc0VI=qj8gUul0zrC-F4)EjNNayNnS}DL)?; zD4BX?tp2XUzM{49nKr^N$=Q#`yb+1Qc)@>&1GtamN;DEELg@d{R@E3ol<7ki*Z_&QE!PrEK_gj2Au z{{@S|efS9N#VU0Ut!fjt0S#E=twB3~9(;!T{Hgf(M&RaAZK=M1)y}Kwl>`1JCSW8a4$mzLz{oUB-Wa#^`cCNr4;ZiIsKj7r8AaW7GGssQU#{cD0cy|xE z4aaAF2wZxW{}I?kzX2U#ZP|-=`5~5;-_sxV#kQjt@-+)Ygty6kFzN2ZqOcP>>{s60 z!&tvvf;8L*X6G2}G2g@D=oq#qS22$eNbnb9nK1>cqaU=d@vof0^=H_%A7MqHGhX1u z>AeaXUtqx%0;8=m{!XLuPFcl?XAkJtVGA?}NqQDr>>t2k7>y@eXKWLX@jf2HgD%2; z>D78+eHpk8i?G(8f$i0L#xfh2b6yUPce{kc32hzyh<}K4%RBn7V8OT9&&JliFDJk4 zX4Q8Qo*psI`@0gGt(w>a+1`bm2|1J%$^!oPoPpN|JHco1XRnEcL(H$hdP;YHx@WuZ zV1ro~ZSXGsxMjigd5yi1?)@j^pk41|A?SIoEnR7J=-azxjH9Iwu0Jpe0$Hd3%sG2Mb%8!pQL;Y$F9u z{}t>je5M8Q+&rSU!msKIcFjt%Y90k=s+bYv{MlcuTRDe!Ha?#_IH&g~^91NYL;CT@YG{Di*k2F8^yLp_vY@; zsm&o%t#a;Qjy^A5!dcDFlk`^=tZE~}*l@#M%bJ6ab7 z4LpME$dSmn$fNk_9gVz|aa-oPOg&%4e9z@8kpJcU3-dpfe@(tqnJqG}%3PfJcD@$* zJLJDFU+s)4p;hL5t+ns5pY$R&OV6MSUj{j=oii@}Q}n9btW#H=+L_%qdvjLNtO+L< zoNSy`D%(7@{ZyZvW%w9(%DFCQbj}00&qrs+4#Zu1E0)}g-TbW4-sHcSsHz_~`Y|Id z88m|Z1BbB7yOrJgb3k(_5Lyu07L81YmAlow{a(ax&1i4I31lb zj0P59-Lp1vQZo&WmbQ<5y*?o$63nn8(eP}Jt7#q@9=xDrZxZUaIJP2ON1Ux$q#J&Qj;?~?pau4R-DOxu^m1FP| zT#x^0sn}KVyY1TOh81{$55a!-fb*1lD>M5MSbmPwpEO#U1wr6w5vUs+7>b2&&bT!5 znaqnb`)16HSdsU_tHO&ScVr&Rw=aKz0*mtBoPTq^JMwMM?3Z~R2!s9}vgIUbB+WGUHG4Xb>J7N#S*V=EfDp1+JA$BllRJNY=>d8RX`mATOS7ndM zE}Z>hR->$8S%b50&gmV!8~vPt{qQO0Vf^n#f>O6O;c44g>F>gM=bg+~EGzh0$cltA z8fPqu%n6SP%?nly{u*!sweVdXjAeeeKo=~jIvMX`#kL=BJx*W3f93_Zl~cnm60aJY z8l4|K56ppkVx?j~M5ltta7FZJ?)=<|xzlsM$vvK1H@YplEcSi;xLv?4hb3-1tY}}x ze)D_QT~~u76=vtN3%+KL;59V>kCQ6F+~9Yi5#d6Sha&SL@koJ;Un3vm=ko-pBwa#7 zLWRO+q;AHoncrqk&a9m|62CKaS*SOwreC7hTZh|*mxi7T&afJQXj#R5HGU}C82pS) zu{%NVt>k{=^aTAqBe(Xc8?&!ueRbfe3v>GB^vk&uWQ0$0=H|AKHDY$qiWziQP7dzF zTKinaN%Qn!Mgj0)8et{Al0AT(f%`-A!;kTX`iHBB<^`U!=3*h!7POw#;68AIJR_A1 zy(@?$;~D?xiRS(d-Z6Z$taw)R0oG>?{K5ytzr@q%()eC{iaw0J7JD+*3Xl4RvCgrD zvAg5t?W6WAuo0JgF_44@aMsDESRUR925U=joit_vRg975see z4!wnk+54e|^mn5|mxs3Ccjj<9`#$T+K+oW1;nk5P8L^BH(DFZr*M+iz1B1^7=g~eM z0X^W7(0QQ6_tzivA9PN|I!D7%GnO4c>=g8>dOh6IPQ!TRXoH-hr}kwJIQ3Lco!n1y z&q0UW72Auy;(hj1=ZO0ycp8sk+g_13`wG?w8`;g7Wb6cMx}5o(Sroj}b%ABU)}b4~ z;(aL4#Cp)&02WIX5O>z$H`@Wb=35x^Uy>NfXuF43%-in1g?)T0rW+#A^!t`&ZrvBk{L4dE}s(eO^Zsdg|^u4U9tT@AR7YB{bm$L-=3r_}c_E8{mQfavvt zAMoE{HSigCiL=i>0CLLXv6o^MsJa$s0KR-6Wa4qeqQ#eWOCm;Dl>72WCY_|E;T z$JD`Ab{4v{7`{@kv(|VQa|3ZQ+lAQKPh+%Rg89nz%xQL@;VRG)T7yv1k~0-bB1cDp z7lkecU8#BSS;l6MS?2}b3O*D*7+IN7G&7hv4}690kuUHXZ4mAl9v+?%-Vk0AJ~#Y) zFuzrp{lIok$9QwR7PD!mI~^00mi2BMrvbaMyG}ioy*I0L_VMgsPI)|L1Fryy`aa4tc}THNAFa8pcD(NNiMNfljMa}%vUfOL-6rhyw6bT$^yud~ zWpd6(yZxL~Ik!P>=iJ%3)uLZU$6zgYrPJ4a&32JQ z@%?@*-V4O5AMuzkV>h#h!ZpjOgKg0;c5}c2W|wR^r#{u;Ef2)nzYLP!1vHOJcv2L_ zTjmaYySC#YcR4-IUhsI@(S}E}wt;P}9x^5x*PCnb#2INFvHAz@2woieB=j;n9d@8v zU+uGTj&ss=;QX2KxUgt977Quvf5KuwrmUpaT|=&8!9B*c}7GZ61k8f^T+PN`QPfl{xg+oNB$Ceq$*s0Bx~(za3n?m&_`7 z)K(A700ZTdpb@GN(nE9cVVoVfAW$w)Huyv6>BzkqZ)FV4=#UY~7#KN+F5N4g zyD}cmxGypzR5M^2ANtdrVew~T&oII+h6mj_&H=lz-4oyS%Iv&;oST#LUe5D5cjsK5 zb6<|Z=;^!YTd`ZfoJiOe-Da$}-k#{AeXegYhM7z8vMg>5*o(X2- zH$F1B3g4iPSdeTmyRm!S#CS%3lM|@Q(KqP+5bp|4^LDs%-KSYe{>Z6{J>+$GH17mq zjh#L$wa23&qVeYTR6EPA;M~hd?UZvF_@#$Iy&aA(&!x=1+jC}FAx>hOhTp?O%tC*q z_3qGW>8-H_x*0upJ*y4R>nreXd=<;)b!I=SJh&dG@PwZeye!lzv^Q8N_+a2V;k6xn zCp13X6~vwD8I?0)k&Thfk(1ys9FBY*c`i~rvLHMwv@~$Ycqj3k>&2VK`bQ^V0s0tY z$dl-i>GlS6&C}85x!rTB&|WL$uFbt8`Z=S78nL@rckLXXU|;KQ!}|IqGOdsB_iJNTFeibOyIGr^7=!P{J6Pop zcb<19IlG*Yo8!EWhgomzSPHN=(HNYbd*I@Qb|E_(9KQlc-Us;P*KszX;hM0YdMDUM zOIWkG4nLWttj2xKNkPKHy8xJ;Bk=m!M&ES=gqHwlUZ3GtI|ww#D)@f>fLHeicx7J* z_QK1-!l6j$vEcYXu|RQ9`>qb=3zZ2sLB?(Yv1nwZN@P*ES=bNd18ME?NbQW88HdAd zgFhJwzb*Tx=R|XI{pd&W#!f3xgfd;%el?yMTbp|U_(Rn|(#Zrb<}rHT@A2Dy90Z;c zAOzHPHn}tXx3#N{dszdiV(rH=^h;KgcIb!nhmE>sRd&o?2)q)gf~RCPD{gK8DX5mY z1%K9+dL?`m4&fzx71m`%+@|yZ)zD#wom#AIRCnhxQy2|G#vZ(I_b_WJVc%{~=8fh9 z2ciV+^-<=!qumF<&zj1bep@`bJ7U?{1X-Jlk5)_i)F<%*+oheW*GA@^(fvuM_9fuO2ZjHx2V~V<{tmn06&daSM#G-~%mZ z1TYU@i--7hvF^4mwAQm)^$FnC+ot= zNM9gntyp8tVXv?a_^R*?;R@jmaP8I50nTSx9nOfv!hNy9s1yuhtJ&QD+9_-|!vFdlRuQU$3);eM z>p1b(V{Ps#Gtn*Q4+l|rx}IU|15={_ z$jzIyGQ8zGjq|ad?q$ujX0ZD((CUYEK@axa8(CTAcD*zV`^@AD4h%RJtl z$x6~m=5KGgAZTJ!eifcLQ|w1Teftsg%`I_(=u;0|%5U%=80pl-Q+XwN_D!(uo?yN4 z4e%S{jLGi+{bL5}OeI+NTZEqbjMISX7;TN0u~{sGH}P2fkM=Phe#qKs-3PW#Z;%6u z;^+QGFccgScqWh)_z1n%8w`deq1o78UlXbtY8)CA`ZlD83x|t@t1=Sahh6qstBtWH zF~HmI*u2d!^Wy?;UA&OifZ$&~zB_h+QI*Y@yPY8Uz?*dZ7Qe$R;Rr$D1%R&ZwMrtk>HaAm_kz`+rW=R1a0 zV+md&@>Jx($kcEt#&kCsUngDyx0{_(KP@m6l8y_opPzmIkA48M?H!LI{Sd0BR5N??7w#cASv z&-~#=yydsYzhR~5OIq!e_-;@voEl}dKG%^WiWh;nCeWM#hSx9(hMg*KJoXnx_cA*!?!cK zi@Jln0<1xd_gCWW8cAHA_&8CM*+ffy11qNEjW}!7qs&#NXWn4FVf}1fgNJE(R(f{^ zONZ))YJBgNDnr% zS{jYDK7LvJ)#`%1Sq7AYoo-qD3Z`%--pBD;@vX6Ou|fFP)r}pFPDJCq!}w%dG{VYn zF?v4BDT*Zk9tM7xvpuVG?!!KKP>da@hIpW_K;zBDF8=}$+V8?^YXe5{W>%sjKP zxr$wl5&8!F`xmnB|28wHuh^Mc#7@_7_NnHBxv&WIfV%K+K0RuAXN&!Y-QDg4`pRQy zyovTMH1l&{3vUDe?I5GPqMUp2HTF6iy=v^wJmpV9_dST!)FXI>K7l{)O~yOS4Lf4X z^fc(ftplIKw;{nDXu6uL7*>XB)kBYkehM`Wk7A8{X?QI&{H@_h;dbGY;a|a^`6x6X z^aSfA*N0XFw+Dt;w$Td<;cF73@UlCJ&R7UK#By+6&v*KOEAbt8C;j5r#sKOA2Xzm5^=Vi1e6m__zx*LWkCMJ4I)e)fm4KQ#wWsDAohy*Y>w zne?n9Sz(HqCOaR4*c0k+_;>@}3(i$p`dc6L!%sn_(%2oY%Kq;V|5}i`hkq zr@eF1UdVVo8y$Nk^Ras1&|c$IVQx{wX~7!dBv4WdySLKI9cHg)u(!*rOAnI8+|0#N z@ErVQi-34{u{qnUiOlWgWWBc;nRE_L1Q{?9tcEU|8!F5kb$Zyr;<9Jtd2qFcMfygX zMvjM{3hUu{q4}X-!Sg&8x}O!gW`Rv+ZR0COrWM)yG+D_%#a!l~m&H72J{U4L#)I)} zFoRdbhJvcR5VWzAVByAdtANkB2%FvSV^88`H`sRUr<`0``*8ZnZ`m0cEAI&YX)w15%W<>zRx@WUU(-nzd3_7|K0e3zlI;X@Fm>^9^lh@WqRqSI1^$C z=RquHcdvuDky8U3Vr5X@t>NnEmgk*jU|L_}bauo!H1FYC+l@W47o3k7CmXchw_FW; z*}YyzkjWlJ?j8VF;Z1DC=CgA*1eBh0*oT{96=ZekSfCZVQ<>n3eHluC-1%^LWw=b_ zdPZ(lB9$T)A{mig;fdi6;fmpmaK5mKmTMoH5PX3>t7kZcvmv|NkK(cL3cDbjCg=C? z=CBLW#`%_h?F*21HnSqTCptKKADFl|M5{$Fj5d#sVfAEiEPs4BsGLtS{&GOwDa>f% zDX=E%f{xoAO#6MTVV{SsK@9)E4U~I;@g?5ZAvhKTh4eM>4sQkRWsvb5`0EwT0_ILo zq3;AcY!jFq_2J$vc%`3{c#7U*r?pcwC(h+bOhk!KL+wFwCOcv|q4am17^4AAs zi=Uhv?At1^DzMXS1Lu1CLGa!7anA4-?GAmleg(L9pBp(wYjcm;18d?Tf%Cwt{t+Cz zo}sm&YG49>AI^khwIhuqjUv?|T4W0-sBeZBg$qX-M1FyLhl2|PFX9)|#`sbn$XjlY zpK~eg{KV~G2z2odp>bC_S39rUyW$PwTadSgu_(N%9X-U}$gbRq(O0nd9L4V51@W6% z+jt%9*zcHGG-GCdgV-H(!QdSKtuy6H~;DKF3KldE#QSTYEu(A0b zy?qIG6+_I|SP#9`EWvp-pRs0@Lz!H#Om^avT_RzzVtfp5`-i|d*hpX6m2+(NGv9x} zJ=b04ybI3PM)*|)9QqsGJKYySyetFy>>lqP*3@ri1)v#dmSxcj!$BY1K~K99KfiL; zH&$DEQ#)``uy61fm__SC=Z9N`p9l{FgZQoRmLqER3?(|XkG zZ5&{A_FdZ2#mt8mvZquA&&w6=EwqP~P7mi0W6xLOan@!-v2oyxRby250P~79QJ2y1 z3$fj?y7YG+F)yDHpUY^q6#nfOg1Yq*{qrnP?M8E^$_Mmrv%t1`lrsOQ`|S5$Y}Dm! zx(AK78DEuWbUKRucOxG4-+-?)$h-r|n~3#Nf9wIi!iMEJ{MoL-l4TQXAQyw;Fo|*7 zh3w~l1j=)9Fh6F1sxs6a#*X}A_mEqJwWrqJ)8wAX4(bm7T2L1YVk_`5ehlTn?f8<_ z^)amY4=@dDkd6CrWubKHH;(r+l;GAfTVH++mYU2@@a5x3KkvL zql>3wpAhyJf_U*fy})RE-lidiBS7X@z=*gxXZ@T6OXe{wKXzbYaRG}wXs#FU$++}jye50}QM;uxp0Vj&?sm5uJ}CMIFuRdea9$3U| z#h&_YEd(ONY>*mif-^IgzV;jDl1JFNm}fkTH=&PAZUi-A9u`Jz=xg`0sy3B1$sSlZ zS@dAd5(lxvdJ@mD7I;w9WBySUja(1E%V$78`3eiBW1P)#8+J2CKtmk|zEDMQokpSC z$|GkPpofoUO{WRibyGm8>`6QQKCqqsAwmCICD@jIxbeX+gL}Xl>mJMr3=HUjR@O{X zRWXk;n(4qP-@EZjnv31Y1nix1ux4rDukfy?@45|Su?o&A))af$E$v$Prk_BTzK`#S zZ)An+Gc?)z@sWHcFqS_Azdo=_)5EQGiZB}elo50d?-?{pE9!6#BfC1Fy7tB$SRYW1hZ}_g=(kWOM_UdaN;w(p+Lhv2J<=iI}2)2nJHaB&zf}`1KsJcB^J`&PXSE z{cQO16(ihdv54sk@2-bqow@(c-;Whd@kBi=o%(`Gwhgq);f!sr#a>3i#`Fc6nh5g<8z9 zuvH8MiqEiddLR3r>R1#^p>@vlF7sx(m!oBSalS)gXFVu?JsE92!S_RUYr8)CCda^n z{Ukn*Qx3}5H!%kNi1FKvU|a8}2Ym~B(3)Ofu)(S#XY+XLMLDDA7Ie}&u$TsGhro4x z22HvUe1i;5D{08=`+lQ2eg(%FeY}rEyv1iQSe|XMWV;X_wmsS!P>K6uX_lW|g?ZRv zJ%)8xJ#b$NVyhLvHl#X8JFSrA_V`Y}0wTj6=J&U0&%o^&__>zFj%K-Dh#vY)ko}8- z8vY7ie9f3M&$Z_8`4Zf)^#b97m65Sv`i}%5_G-|?KDKIF6U_@azk4{Nr(*0i>8v9@ zq%X!k=}p>BKBR0vGvf~6adc#_<_32YW1#w=f9=9ja0j1l_KzUHPG(K9h@Az7Za(`W zB(M({Y;y@eWfx~Q{;?Bb&hsu-2G@BLKa{cmZj}8He|M)gXhm3XtsyY zr2~+-U$FzKhRj!DzCRys^#)&eERyyPefuNq>pTGWYB3sK#cp*s_WkP6N}FO0Sedon z)!63@c_d3%m$+;o#!n^&fmMmu-;yP8^*6w+bWxjB&`-U3L@uHd^g?`*Zf2w%Uj7 zTsuEfIgVYgrku~Rhu!qn-g{V@UQVld6_0`)=(S3;&t0q&k7XscGN?+8v18-}as3o% zXVtJ;JO+~7LS|&!8J$EJwfXvPM#w9{4WCSDdvS_cP5m5BklY8>WF}T(f!!Ia zyOW%a)q++3S=dn(g>M_M{&)r6b)rwa6Un=nc}xLToQ{CSxu5@&Sk{+emeZLNY__uJ z)CQidVx)E%{zh}LLnzD2Mi*#*$y~iWnr15db=NQko22d33bJR{2F*2swmKb&TcCdd z4_DI%{KWq8A$>nw+lfcK;M#jw9gbv<)(uRu8^NS21^>eA{+FUQw;+ja_2$@-*2dOU zoNzWAtIs(|?Gnb;KjU>$m=WSVjH$aaN_>Z1q($r|onWkc7|XwGdZ2IN>0G)+UZ&(OVpg#SU1jE@bCKW52EzyLJM1xhYudt=Q4;&TerxTCVs! z3`bvrU*q-H(SmK@aaAlc8!;O1Lv7xLH(gi&-Z zF!Okh9&5Syjd%Pm|Y)Ct)Iv(sK1T| zD2-H=z%q0o-}Cyb*u#E7d)~zgTaF&rE#o{|{gwEA+`tanE%XAN z;m>pIk>A70Z*ltR{q)`^(018iDNO|lvM)1{$7#_wvg*2-e&=FFhB;VG?*PsBar&B{ z8C$$V{a*4%f~nlaug(hpr_8xqF-Ixn74SlwfBTdB9UPqFe$LEfKPy@JSplm7UoYY` zy;kh`J_ml?YvuNKA)*)9i^JoCSS{Sz*cOh}Na@`#4`X?AQyui%& zG5Bd1ThIz0(PvLX3oM3ruR`Z?H0N?qeFw5XaTgwH)j0+7J8y4(^R`;YYY=ymZ zS$q!4V~Jf49@XQ{VWs3Sx-TCy;tHfH!*2=Nb!pOFfv3RLaJe!1xEr;4m)XK5^y7AR z<98yj=OwlONOa_Ub`vJk<4uMayOQ&_OO5MjeO0j+I2ZiLi?HLpivM!7%{BT5^xFOT zAC3;|L(kq2X*7e6xI`UW4UMc#bc@JHBV&p^X3gkxL4r-;)cGg-|J@?D-4v38t>I3Jx~iuKuM z@U9c>a{#-)Qxl6>?LEv|S0+5D&PxAzj8qNEaT%Dc?HTJog*>$&Jj~3*M)w85%sqzP zLY!-Zc|alfR|W27at8(kmL(U#xi(n7KaO-h!Yr*P@;Du<_B|j;<>LPkpcNOTbzgxE zdqXr~3#9Q;v}Auq&tuV)LRXH*#%By8Uok3dPao5PnSE>IR`e!=Nzro%#jC!<<|vEu>+P{ zz3`3h=Yv|vIP6iLbp}(kH5_}8xy^9muV8gZ!@r;gEwv@@r5|$lCMU0a&Z@&YR&6(< z<#sd2@z~$2jAeggR)d-_FRzJjb$#w`WW045(&fYFy@`W(Fl18FN=RLC+Ic>B$dWns zM!4F-`!L=kCE>S_!fP0(wd5^yWR~6&9WW9pd54zv5&iWPdY{dl+Hn%DoJT=fUf@|MIE^t)v^*|apC73Ja0d2slA_*|WJh^mB? zz^c0#J$tv|ar?b+u_s8G{n2`F(S|=k4yW=xiO&??-4Zyv3Z(w8 z*>7KuE?LRS_-t_SrsJ=%4jvv)sB^HZn~av7%DZ?M3a_%qGXkrfm)SSzh3!s5dcBL$H?^3Sj+66-Tls@CMv|l6B5|@gC`d zwtE3v`4?EN=*N!cYpl6_%u2zV-~heAdwGrC<722y=WV@-?7up{4j1$U3~e~MNgLo!Z) z>z)h0L+FVr)Uhs7e+jZv2K{*fvM%g3+c1J|%jaHXw-;J;1fK!S(0XIhISQ_QitJ6p z|Kn{q){iHn;pc3^Ch|5$vd`TQn=mDlB{aWb1z;hevx%`7zAm8W!Adqs;Tz=iTll#&$=m7VHjO;y@R;+@3;Y)PV<+X$fwxgOoJ(^(2g$uGsXJ~)m)uId+cFAx7#Z%4 z6hDhJjzTKmfp>2qspF8q_u$(!dXZUtPl1yk@cfOWR13)*0?(g>!mV(xHk50?!%NXH zwfL@t7CHxRy5t_E4Dn>U-%Ht6Q`#kbmQi-0=Qi@$Ot@%o8we4WFte%MEO@bu`U?)M zAnq!Dzk%;tkfA-u&oNr*4&KCyWbKzG>8(jp{2m$GNcd;)e=OV{muwFoFm`y8U9{Km zetR?d4#p(E-{JYY{J+hUm$7tx3mKn7ZrhO7{p4|koPMSBLJt(Cx37UzUPJ4z%}4a+ zEs@AhoO1C5ecIE=*Ne$EI|!M40`5G=-P`c-1AJjeqZ1!NQ*@wT=?c#uK?C1TE3S)% zyb7+>q>mHQejb*4h0!?$7+oilZ!e3safJPkJ-pLBl<7DvC5z8VN+x>Ela%iiEeK!{ zbUsdYlos3aWSnf?z3>+dBzpvh&|^?KNUB_DXF>NDDDH=s8{zJEaBv+wUx92bL=tDi z3nAYN`27@}@&WQZiFY%P`>9;N2{+#+bOsXp^>5Pp1!-6FPJg7G|G@8eaC0@(cT)?E zT9rVDmZhFTk5)_Svy17OF68;X$sp(PEb) zkIQJ2YkrgFFOb8j$sTB4GJGk#oCjxT(I<%>YG#tdUnSe_rsO+V35{=&^S!(mL04$a zo#b&M*^*-D${6L)DRIeU*^8jJfTyK|=TejM)VMOA3zE-D6LLP+Rp3ZNCuD0Q+CXsnYvk*D?spL?+P#q94RCKKGA-o%02D;8BSuq4X(dtK z+>vDX0r>kXyc8|Qhoh$`h0yoE@+(>rCNGTt-Q=(6p=_>YT%pZ!2oa$Uslld5N{AeD ziTg~>05}&(5;7H_{)OS3;L8Q@qZqPv4qOqvS|$F)JV8ihIe2#g+`JTBa0TBN(JI8~ zvo!w|l4(WE63KChcn>9@RG3`OO}?-5_!gsOpuUqI;p6I1z8vILlo51I%A1wc7uj5i znh6~t#t!@VKMeP?;SPp*$y7q){6eVEFY^Czl4}Q({i2Y|{cv_au>`+_cG?AxxAA?5 z_(D7H;~j{Qom`(JrxTtV+mf2{=;?IlGwes(h;Pk&<39DT(Fas^F{qRD`=#lM-K=^kO_$Jo#G$ zsu9{xChtXj3h>7ACFK*REZ$*&wlDZ6Mu$Sv=I{~PR&Y^igrjg^Z&K!dN!CKt=LkIb ziI3>7#7O5?YQ7f^2x;BVbryBaBHd3(IscjXC-@wN?}85}k~xX?AbOyzB(H=7+DVRy zk+djBl=o;NefcP-#tc+^gw_gCqX=~ntxP=4q<*1f9rIJef=Nz_FcGI9oDiDgJR~z; zk`obr3&MG!DGDZ2=l|_q_DzKeFOrl#(Nl?Wlf}QtGZU%L&v%esNJyg3+Z57gCQFyY zn-`oBb(1nEq%D^_F-8%xfQ#dApKN$6d$^-X4hWeM{hN?uQTI44Q}lFEDE7}4B-$J!h-Nga8J}R3^#;~ z^p<3P}*UTFRTa z6KzvSmlzod9Vj@XLd4if%r~UeMU(RJE7EhAf1%H^l1~I@MSmdT$+j-qzmQ2Gktcqm zD&LEcTp?Yemk@HP_$G1`rIf8etZfJmik6saD}sxWWZetG3n5#APv<7vpJ;(n?-k%l zVYHqYAF6gLs3=Jj;~Du5#J7A)7F-jfJn`;D%MhcP05TzZJ5k5fcu{am>JCwM*>i}# zL)2SKme@qQh|#=|7NMENx`KGyq7N4mCRTFPii2qT968FrsJrY_L|WOxh2E0wJePFp zBU-5Fd4;4U_!j+w>>(r-vf=H^k8BsRjfavo5}cK7OK>xk)L(^=rUJ;CkWs-8sShJu zbKE;0(S8M|1O;(#kb}ru)K5Ma(kAZ3pU@CubxO*X;DV^Xq$?-?RkVEZM9H3zKGCw}pLl;Fjff%g z*Jw+!ZAeWb%Oq+jo`^DwcPZkDf2pg)`<3OCb(Sg9^`(d*bc-mPY;}@X;th$K%RB{_ z1SLUB@Ii1&JeT)UenbqJyBHS=O)I2S_Wv?mzAwQsk&`H`NF!5;yhP~fe=<+;E%_{U zhT=o2u2N@+QcI~4v1NV4TM{`*{)x9E-?4Z%g0p$^7xE!$Dq4OtDZ4f)?Ka!Wf-Ajp;+!ApVw?w%_DP%guIVnZrnfMc-;v@MalHkgnny{dj45bJeI&+CqL&kC#GmSA zMK33FQ13DQ4TzY6tBRT|N%}jNwU*K$Taf7c)jJTJkgZd2UGYq4S)nP?xi3e(B2<(k z!RSHgXQ@rZI}sdL?@YFj)V<7Id`sz2IVp)&zoL9nx|Br8+DR^nF!`srEch(AC*On6 z;OW|1j7MdN(4%6dOnwAM)kjLUq#>_mUQ(Bd+>(tmSz~!EC0n&P+3sYmMC~Q#${`6cf~E%Nd~)JWtkpQye-rctr;azKWrBvi_W z;)ZxCJ}T!_|0Z$~d5iqg>nuwk-?a!&|4ZkktY1n((&MJn6Y0q$nUBgz(v&3=?@yIN zlv4i7oKk6%1b+KcJX1B5b(MGWnQWu#TC^S&SMft}C6${XE;%KxP<+=lA$suK_S&6t9Xizh@)uB_~KjELDgHb){m- z+R5-g`j+%W48bk=z9jv0Z6iWtnbY5);!=u+s)Yo=j>(8ApvHLpm4~FD=qZjUx_NVwv}GAZiqw_7R?qX&mN}-{ zf=ZPhE0uqW->EPeQ+$hh%DT!s8KPqTK1|j_rjhAX4MiFmU!_ikC~nHs={!j1r+WIw zzam8{hxEAVp`ujkK3$SUm`tOt#ILONnQ5u`DS9G>{1Yi;c@!^1c#6J^C7y{ed8dBm z-S59s&n2BReT!5gT*-&H7GddpR-6?&Oa6&iBA)#IEs&pN@NZwK&=f5drqU^TGF)*$ z+^Orl{8aJeuZ$<+s+<-7Rah#XN+}DM9xg-DOG`~s%!aF+{yGRT;59_i4ur6or)_7`e+RG6Zv z?!~VR6E#hLn=+;3PbyBT{^=CbuN6mC8dYwUQ>yeTMCC8;We=_5C>rWl##G}3#TQkl zy!Vp2_!g<RI2n^srVv~bPlR9isY>1uHvVNt76M1s+8(U zDyA&8yq9rRh@v3Mrg$cw2`aLT;+do=zs0@!OE0;KlX@mX)SdX1bDj}xyg|9 z^m${-JN2DPp9)b|sb3LG@=}JWJk*_vDdVX-@hi9{%byBWy5RS*CEdK#e_sHg~_g6fZ@kHG8lrpV&p8hA}Dk)UIGKPF6u2tI8X{O?dxaxh& zbg2+=mHJDkm!4i;r@mF5sgP8?MVPotl{Zzg^e2*r$U8+vUZu*DdX@@1J$CwiDt>yX z;&pnMq$fiZZS`E-ix#Nv6_4}AOWnyUm5VBadaj1dmWp}yD?uYYpS&?;xlgBf_V{^Ii#thQhD&Ox@6$u&y)2K+L*=B>D0-=T zkw)@HhN(M6Oa96jdBf80R6Zh1$(DSsQl`fcPgJ;!rS3(jiYd#Jil^>n92rkaTZ)E| zh!ibJDLtLcITa$WWQtU1UJ9}V>Z#0E<|yS)(v;zOW2w6og}nJIDyiopg^DAe=FLxq zNiNISGDV7(qL7L!u4JfuH!6k7Ej^}smN)EljhEuPpdtQLIptmIThd97k)kYPse5%N zXo=RCSB_K-MC=rGNmqr)XX;MTlk`;yRSFeLK2_hpPotiser23=KBZEnQNS^%S%PwiMWcM zN+(jKU(366S~8Uik?Cca`c6+HX{EZRSx%y6(Mue!C>S^9Id7p|q6)#=y zrAjBCrsAoqR60dpgvfvOOvFw7seEKCb(e~p3K40GH->wA8Q4BlUZF{Jd0Td1V>%#!TJGtGx9PRAgH5^z>))Xw0k2mUv6 z;D4Lm`!nVFGjRmZMZEO5>i*CCs&}T+|Cu!ZGjU`utNOt|pXb@qsqhrPBuy25w%i_dk|7v|ieDz-cYT7f^?yu7LtMSj2rwCJ$rRb?& z6<^(}Ulsm8_51%S-@jKs#mzsTTBZ1ZRZk_uf3C!;w0|!4|AtuqiLa_g>A!!r+iV ze*bFxvr&~L{p0*oasD{o+44A3cwUNCe{Qu^&^gPd2%Jew@ zDQ^|`KgIjA&lNrO`)AYrH{+d+FMlVGzgiC!U;O@^{QlpkN!8$NW%>Va-DHja+vWeO z^!}4%{!@y)Z|bkc&zt)6yZ=N@JePl`r~JG3ieBE|KTqwyTN>F1rROf_r{DkY zy3Wfrb@xA8MwM&&@1HM$Or_$BJ9YiP<2Sulsq6o#vZ);ZTlook|BO~%3jgi${j;+D zlhmpvdFyv}is|wHD2?I>!0_BXv2GELqRq(47fEl-b=m%^Vd$v=&E zw$lAmx_>48?>X_GN~Kc#aV|2}AIJHpPtW$&R0;F`o;|m-(K&kx@kCJn;~42rMchA* zpSQGs99PXd)6=BqcIInYhE$p}$5OP<_Ed(asQjmrrs(|nn5i`BS1Nrf@6*eo%ASfL zuF`3wU!VO+daS>Gou2z2r9M6X)9?Q{t<2?YaZ+VS=gFC4r{bnxojI-u73ECN{jZce zo$B9Br)bFZsWPX+Q(>oHsW@l)Rpm*q+nM5tus;*$Y-#^$xGI-Qm!9|O^~-y&Qv7#+ zQ+b@3ZtA(X5^?f|ocZqev{Y)9{`WD?6mn+jsn9c}Ne@%Grc(TS^)Cnh<-orj_?H9! ma^PPM{L6uVIq)wB{^h{G9Qc<5|8n484*bi3e>w1b4*Va)0e1!f literal 0 HcmV?d00001 diff --git a/api/__init__.py b/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/api/__pycache__/__init__.cpython-310.pyc b/api/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e004caccd5375a180e1c21867da9fae3a72381f2 GIT binary patch literal 162 zcmd1j<>g`k0+q$t=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vNKO;XkRX-)Q zEHx*;Ahk$8pfWilu_!m7C_gJTxujS>u^=-(Gp{7IC@(QbzqBMXr#QaM2qdZ>4;0TV ciI3MSsJz8tlbfGXnv-e=GQOAzNU$&f00=B682|tP literal 0 HcmV?d00001 diff --git a/api/__pycache__/async_quart.cpython-310.pyc b/api/__pycache__/async_quart.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a349bff0891906229961d681a4b0a95793ad7e20 GIT binary patch literal 32358 zcmeHw3ve9gec$cg-V=uhLGUSxT2UfFNF=DYDO#3w0znZX3DCe%57_eMaJv8xJluhM z3(`0rY|2zZI0;?1ZYND_CSc?wqqccAnKntM=`?M}O=p_4ahi5B$z+-|9d$ZWCu-_g z530Z4|J&Vr0DQMK_xxrg@<+UA{o90# zXYi?gLyttP$aKWgEWNBP=+pW_bUM0VOdAWa>6pg*(QZ@N#eljThd{nPz&o+@u%7?>WA^K^O3!q(}n3)`l* z$#qwG`}B6y*Hzvzy#wEw^3H|3rtk8f?V7$@p6#CAjqmRAJqzZv=|8)7`d)dqXL^r( z-#2}qeBVEPzkKhV-YehxruWJB;Pjw;@1Nc;-$T>qYA>`!Me8vhIE@HvOcv+qwtoj##F3FTOu&y=2{I-H(!< zO6^VUL;9DkLHlF&)6Yh%{q|w|<2xd=hBah8fV|IG4_XJ1CyN&N|JJm1&>BYWXH#AN zKg;-}b;$m>^$b0o~yWqr!}h;PvP@1e4fVV<9<7zX|{K^&&pcQqTEqy#5#($9Vh{;oL#D&EtJjE=2W#>v216)q#hp4=0;o6 z9dk-nVfldhNX0UWt)YHX%}kC=EcIY z>EgES%vPNR)3FzAx8#;C*rr>kovWFpig|vi;JCx8)XC9fqm!fKBcoF-%@{wF^_w^G z;`qsl?9mM$j!)#;ay|6$uzC9AXm)DUJcG}kNxQaKt<>yORm(2#F|$)?fQWl>z3M z^6%*A$i!qeH!(Sd?z~ARGh}!P$3DMg*Iciwxa2r?#myHM7d>sx>s~0Fv-6JMtT!|- zcF`#;)`m3Cn6FhU_)b{`*Ur181sfOXTA_lGtJ_X(NcXy?+=9DQ8$oAkUh25(F3Ks= zb)oSmt8>y#Tz0qh8#(*4wdG0?Dducvq*`(9&$wQn+&fjR%vIHcapX*nS1WdId6AVH zCrdTA$R4%+fnh4vIe-&8GObyWX&vlC2T@0@=oGuZJG0PunBT_`}m== z)dl;IWnZw%RS@2x)62!P1!v*3Q=PYqZtYNEv6L^N<4&beKD6YbVfhP>@a`c{Y^9i2 z1i85ECGz>2>*Vv7*&cS*(CYhc-JfAU%Q(88%;zhG1v{Vj()s*C)mkd^JdXKiz~WS6a)S)DZt zrd2As=Ebvi#Vl4U7i`BZRpvOW3+D4v6XTfFYGw_a$8EPv6W)9hTX6|Pj513_; z=>gMri^D@~;EWx#*tS|4jF*ZQwUt?^=4*?EqJ6}ivR$+Sl_P)7SpuV~qTLHsuq<@P zv_ZMG8ahyN(Q;;~nX^uHL0T@u;g@bs6)xb}Orc_3ELrZ^w(8De!sd&Zys8VwbGg%I zO=dJ24EDKPT>|T@pe0off@NMTf$BLp!4UezIkvmxR8%Rf{a^_%&I(hRwWT8S71*a+ zjr2kRGXfvmQU$+(`5%nQc)brSt6VA;IAafS_}|V5>!`Q~g+Uk&DbPvc;H6v)r3|o_ zIBORmU22#Msqm#acT1{p1iWO>rH(1!Z4w4qbx?$D}=?3#`Vb2$ScWD=_}C{qhU0( zM)ax3`Au$YEq*HAY-<^0<~jw;I=(fbdY{UK5pp{DQiTE(v{*a~Zs&-!En%t_YJnj3U#CBF zN|l-FQpJMM5s{?GCMZd$qzHzEGCQa%t60GPVs)u(aaP$2i|+DJFkv|Z5BaTZEv1!e zr9xHg_)yX_3eH^3OMq55alLe@R;pkEfD3qr+=*d+Ez}%xT`xIjyYl`$gD7Gs;q`X( z#LEOX*cLCv8JU+Vv~!+z!M{Ng@=saLI(lQ?ykzyqjNB}!WKX@wMLT!=V#llFE*=8?kH*P`l* zG;^Kl^+t47rz9+Vf}jpa!yHxgQ8OpTN5QMhVAuf@>LigtkPdo#kiAnc;Kl6ZIDpI% z6PO7IXk_BlDWDyIpkou0=E>~jbED?5v6G`y!{$_Oa%?1b@@0Wgd^&Y1d-9}u3Z#_H znJ-R^59Z8~$?Vi|flgB+lVhiIKK&?u9lV-0s_SfJTMl+8f6iW31d5Y@(xj(CVyzs~ zpDcb60ZYu9?h?R8YgP;eKNF zjvM?4Uz^3rtHRTKIwFtL8ya}o-j%4Ut>L^8-4R)f3I&0)tr?bXMX&2CF?D`j(*O^c zW*&DMG5MWDWYwOrr6p4fke*`CFYXtl*nAe(4ae5g{3@i?8%K{nU zOat*5*EL)dcdF}{T*t!exLn7>>x5h6*o*nhUJv;}Z2Ap)4qI3%NI29lkkDtG7K_DAj=LsNe=lj9CIo zt`O<^<7Sd&0YWa6YLII_(i}T=dSWt{9nT#xN6t*;CQgk_kAh{6O$pnjGCDpwdUT4a zCG^cn^Yr8dRqQs#7!X1mE4_sPR}468m%PuAsS@Y|7?P7#Yz2_d0<#iQ5Oz?}>R_ok z-1eC*(zj}2Dq$PPBAHMMPT?a$w1k)cN(NYq1fs3M*mhlW$f@+N=;z66w7UM%L1=Vo zAOYwh#Jq1rJ$?8g=Mc(p9^xU?^F&SZ(ob>9QmuSCgO@E@ni;9@_up{a1Q>p*TrC#L zwWo)hnd+%YV0+g-ICk1Ij#r_k$0wZ9T&Yq|pQ+i-!R#Dnq_Z0}*LwoUd(y7Vxo5{Q zqdDarlZPQ3ye{eq(AW!><#+J5pM*VsZMfwwapf?@u113@bNg$M@)}t9wCxozQk5#S)TPD6YE4lrz-VQuT<#!Lnl99>H!XBf7<9{6 zb`Vi-v4HmF!})w)KuO7@^8&KBku?X6Du@i+BRFwE)|a(;4R9adJ~xcc8x7nCw~JZP zt5I@Ah}I|+5d!{L;rj#5bW{l&a1_qDunC-m%E&Qnj=904Q;8@ah-$*b5J={XQ?h5x z1?Z-QIa^66s03;zgM>?tEiaW?g*{U!o*Onn-?K|)Vnft4vor^ypKDeN6&KU5x};PP z7)usPFqaIQFN0esHNeJm=p5xLYyoIGw78`*5WK5&1(Yg^YspphRwWUPGNx-ohle_i z1Z2IKWfw|N{>!Cvw)r9$QZ2i{(Dt?3>{X?E9^N61qZ7Z#k3aaI)OOP zp;aQ#C6WD^#WED!j&WAyuY18n?&Mot2DIB+TRpjCBy_JISN&GNOzt` zGB1v1<=vSUI-?~AEQ(eMVNp-xt-nPA8i>^Q`7on}?phdBm<1NQ*o8uQ35e948Hzet z78zZr%{iaO*-%_=INNdVyv#?b@C|!?g#87#N!MO?J|8~L=TUSNP4<#(x3s2XUi7bT z;=`O8bf_e|;@VCv{+Intmtcz z2H?RC0S?f1h);D3@L(m5`|%wSD{)SDh8oeesFiHQz8bMo*P=wP=Y!{IJbzN2cWwAQ zgXd%NynDmvJ$U}IJn!A`c^{saXnczD=HQ zZ^Y5d9oH}h(o6PyXGc!W`Dp+k;P>lbCt}LGtI1MEpshe}0aG9qkyB88p@=bU$HBz( zxrA?0IK6CP)|QIExF9rG{Ds5MLMkmeJ`?rL2jR3kVzy*@A(FAC;)q#vE$)qGAp>fte8S zmBus59g#Hi)l!8FZUIcHM2WO<#eR_i3(1B<7$!&cN-&~zXHlY$qAr5Tnin0I&{Yxj zn0fHv)8$i%jF zm}1m(-bH?|OT8VHdsFaK-Q@G`*>V+JDaap|FSn%tm?Fc+{Xqe=*u!PP1igYm^I&f? zCCjoa^&Yv=Y+)B#v;@XVdaMsf^O{s`TPUL*9W?j9tqnE1Ct2_WDqLJL*5HQ$(Kr(r zG%pSdDD1E>J*C1~fSW?!5CZn1mkeHu7nAJHSq`?0cn4bzN$+Ma@HsMBVoswg6WtCS z&20PMrwzae1>@&uk>pKUnT}ERECM)sJ)y~5>24Hc!5_^BWXn-}YE+FHFmNtKoVW!h zvI^va^UPf2ix6~REi^qDz%+&nECX}tU0}@AxYWJ4n{bnEYL-v-RvMBn?RL4DS(;W) zu11^@S6_{|$;*1}@G86yha+E%T!~!K;Pr+7;k9JL5KYmjeA_|n;4PGwwz}3fsq5>!&RmP3{Jm0s z|NLguaIIm?53FrLzhYK5^2Q`zkK_XbMxNfVb$!*oty~QKf2V z=M3i;A-I6^zE_9v>feSDYZ$F z!e@qowTH=V={@s3L24E&mk8YjZAB;&Z0Ghwmq3~Hn}9xR&>aHS&L@>>>wVC#8V#A~ z0!#~VvDn4ZY^i9L>CZ!RWCURWZRQ*{ff(tYpoD{R0v77Z+wml_z#Vnc;=RF3gCF{Rh*DxC3~ zIpcTXAW$|7Ro275yJ*sb&qziWse4v2tn9bU?z}TQWmr%sp{Y@vM5IQOyGNkLy zt9TB%X;%bUJ7c(%JT3h`fqOs1esdJ!k$7BxCmHrV{$8IEf9E#+56u_#bajUQX};Nd zm-4@&G3F;7T6^EtUa5DvLgC^HtfxS)WqDqYzaoTQPnb^iB5pYiWTb zYiMYjXB4Y&X(uh)UgViGh(um8Ko4H(S!m}HG!RICYiVK8i$d(eI8KS}8I0xviC$V*8r-F5KYCHFsTXjGRdC$B{`C|#&zC|AYi2Wzob=TUMEf8#Y4p^M{M>VDE!>!SsPb}1GQ z6&>R+Wk5l#UQ|jtZ63koCgUZiK{U-`VGdv(^8v*<)up*m zC1*yA7L;jWPGLRZbz$Ye)MOGgVJ(}B05dL4m9U-EN}Pp~F@Wj_itwvftSe}X_@g0h z3dl5vrYc1qt=)i6g^e(0;k<+aS*2Mwj6@}z#c$CZ?M7B1t*>YpP8B?ogk)8AlIVC5 z3Bo^)JhT27J~a~8t6*Uaa-dll_C!F7>o78J<30T;Fn|VGg!XmqOB(zn5%_XpZM5`Q z1cKQ(j2HP70wv%LMu3Dfgp%|;%*htTb`(0<;qcjEj$yr75z%|iZL4#8(b2mgc!}4h0i0Aka{>T!k#E3Q$TP? zAWK`KIXYdGG9`m3Eaq5%gH#1&DeZ#s3TnoQSguK>wZbew-W*L&u31Fz49+;0p`+K7 z(W_J;--l2KU~yg8<}iiFX2mWK)I^cMNr$o_?Ulgyb1 z8eb%FzakzAg4Qu<8-yUYA0xGHOg~J0GgS)~7zaU{cEH__v?A5!%(}G%2vO-C%w1ms zgfsX`Y!*5xyoz@w34Q}bKoUfqZ47+7?DKjh7gl4q%ZLg{i5*aB{kxiT&^6l9QeGIi ztI|RSNLt>dB#5=8rCU>5gRdNRO5KW!yn$;I5@aKJV~D(oD|v(ZVe7PFkS|3y0oelu z*(pN4q!^nd@+C3e3~%vC-Z_XaI!AffWtB=;#Z{5b8l+sQp(((ACaA_AIO)Y7ur|uBfi1?6^RqbdqR;@nn3&bP z4E)E`;qsL5%`4!fSMiz5c$mm?>z?x5+=Ly)4(`TE;uHlyJ0PcKh9|d znzPWkrLMu|$POwul)zkZ!BEH&`ik&j=MS;ZW(}AYVP(|{FtLa^v`v^E0)-v(ptRe! zWmJRekrIXZEtQIA5U5Vf45aKAsQ8kpRBm**01zz7Q((WP*BdIeA58pzNC1K`6yU}Q zxx4RHWA_FFcRy$5Am2pWU4PyUsy8Q5fUTo~!e*<11w)32R+G@(Jd7AJ@y*s?^z;WZ z$2Tq&4Zd`6N>S-Sb+b*v2py|d`%0@2PqPW@UM?eXX?(G0iGdq8j3i`_Bqqx@Xapt# z^K7+DLszrm#6BuSkn*-*7RyjcfWQ>>pn|Y#N=Sk{pfZZ5bg(7#ez2`4e#d1hstz#( z9GX_8x&$Z)8V!WI^qF{s{Rn!&C=lfaW&LcSg%u7sK+|GonP+%!g|HjaYPeb!0CcJt zjlZ1ca~`SYO9=a4WBbSEDlnd5+Rd7S?D1fG^y!D}AJ~@amhb6enEkC&JY$s;~KvaZ_o@bP=Gb$ z%|{5*p|y}E7$~kxiDBr1m=0~STR69UGJ}Q5E;1Vaql#6LjDtt43(cNofUXqPLNXi`B$sL^?8Dt-`yl*Sl8Z&T*uE zx+Qg7r4B3!m9*sPxcg$HvfGHb(d9V}hJP(m?+4C=T>>cY6{hDIT?bm^#mLLBNvs&3 zGb%CleNnp@abpaVTa8(@QZW#FN1XLm>=cg zA2ChZZ*#t6ITv^%UR#>M)KZ3=q%xj}3FzmT=NEbSc^+tCcm5#{zraH~avp)Dv33mi ziJW&vlZLJv(Vf7|M%0As&$!eBr{KUP{rw)J2hm--5aX4M>R1h7Fp%@Tfn*21ehj0N z4_k^cZ$j!jLfHwWKis+tud^Q^-p;ZM3U9-hdboby9W+6q?xZ92$SBF!$SBDe%J9j^ zHSza9532S0I;+^jHV}nxzsLBP^XoXdsRhaTNj!z6=yRYSVY^&0C`OBkaRk3-kL5-u zWf9=<>{3a4?m4Ict{}#pnW?OlxEX&@Ba+G7;ev0ZbRM!bR$B23Lk? zJTP5SQ-)}XdrFBFN`aCCBNI_DYk=9@kLGBmWLpXZ>ryf8Oj0jQ0#1;gaHUKX zzpToYQ!0;>%sPqfLlP#XL8 zmCguPfPoN2hj>}WoNLqyGc|Z4TrRk&AQBO=bD>eAL)eQgP;56RQePjI1K2^OapIdOZmN8QTHp!49N&F>-#NhHnjqD3pOk7p-N)A@Wr@ ztA@0ph`b1KQ<3beh=_P)GlhPGk?b>4LcF~MzZDa!y5#?jdRib4z|Uphv;_e25&%eI z`O7{4*(~KGt%RE*@Yoh{)ALq-JMJ{T{o0;!k{%Jq=CY9UmVcy&3 z>|OrX9r>irTj#q7!x?*n73`0pKXl$;Jf%NaAAtT$OMm|2!}RCN+Va+pmfc~Gkn_=w zoOjeGfmbOj4S3Zh@G1p(wca6xg*R48;8j-$uTp?l2x`Q56x=>6J=8ACc_X&A={n+6 z#H*1RcZja)X+L}mI=nNF8*t+MV|+Qk%tL53tf#_ca5*&-a87kXs(vNyo2aP&_-OX% z=;Ty>Y#b}a;2_A2dc9!f*_IpP@AWcVHI_d$HpOM~Uh;&!ED?d;Hc9PE05JDFan_m1 zQRP<`wAJ-&_Go@`^b==Br*h5}G|TIKArxOyibOj(zseR5@*s#T-h#-cn5*C4fWXR! zY*mn%LS%8Tr=5{0^JiZt$MiNg<%(pWy3~3zEZp1DOzD@xv>k}Z$!dfKk^_tVMF^!;rq z+H>pg52T0|d*DAbl>hLNKq_F3JR$-=AXbby|CTT3H+lFi9{wE<|DK0-g!sc85`_?9 zkuBBly=}FDRaOdXmMv9DrA<`$+pLdZ)az+4_BGb(TV^ZHH<`jf0DH|#Bd(yVyl~3> z3bjSH3-FS7F0qVWin|GjO~Fg?ri_o5<|z!R7^@;R+~AK=hu46V$`0Oct-X@ClAKNX z7TZ)KB^Fz7g1L8@C zC8Kl#JK(6*FC+r~(cq!H6to*MrU!8~v>L03$CmssZ~LJFFeqc|2mi%MYt8)#1i4MT zqtKrJ{@6{$pwug@$r9+AIT-dIo|+lBf?A68dl+oZ&~y$3eQtZHw+($naWrnC!VjSe z&_*Mwzyml5RRP9)M6MY0fRU$ONzJBjZA0uwZWbjr#9^>!*bp@pJ@gu2y9J=j&}8xd za)BzAwOVmn*YJ&Hsf%~{fM2s@IV$d^R`HZT?kU1(Ky$3Yj;Q>LJVr5K6q!QqHWdOi8x%@p^WCdG}LD5L8=)To3@wtRp4e?E@A?j|o(J3XR z+K5)-Zc5;Hx7BkM_E0y|h>F$linJt!UPklXa*l9koMT(Bm88|Tl7i>_=fl)LjP)t7 z?;+GOxss}ElKXwI`@PmY&B(Vg0(S;5lQ3Ig-@p5=Wd=K z_$uz;dken1+)X&!I=>B;*bI6Nt116qj;yAfZ>^@F6y3AZZS~`O=Soj~v%4KNX^kGJ zT-{U?B&>7uHH^QyN0s6HH-j?HfAjorxjU?fOA%|p-T4*G+Tz}YquM(Qhwe_QEwcf0qjLX}wQYxK>VP#b&K?!6wd z9=giSffyTyQMG)_F3S2l!Mo?Vdi%7d1ExGO?yV1uB&MqI!-&3D5eV@Lf+D$&z=c-* z0$%5NG;#`YW#h2##vPc8staDcc(#hAf7p`h&2A|(u*!RWiN)J}y z_3iF6<0r_oo@GFVSOJK|{J3(8EU!117M!Dam0n-C6I5`gCn(D&P%Nug zWs^|5g9}BlhgfD53X7K@@@0WZz?eK?zSpJNj?JS=)=*mMb*WGRkQc06G#*NEevgO$ z$OGq?OgZJJY0~8y9vmcHk~Z{9yNun4y)_U=PMw_*<~z0BTJn+}fkutHx)#5YPGk^q z&NPMwuMPY)YGDMPy=NqSpAGW%;bX{p{r#{E=r@uv^A;$dXKbG%iQQmg!=#C?{U(Sm;qguug|20)@?g3crs;H9_T&+Wb9E!n~oEh@~QNOK=1H0KuYpBS?j*QXE26KIau39Juyn>@Q^y@5yzMtZ)Xt9ijeQqorD z+Zrx^ft0-qC;FuU!-&!V*>_{BvH#t^L>yfyDmx#rzbzNkYPcf*lTC^zA3`=P|3>CvbC8 zaVp!gUaNo;kxy!&IW>PsAjS?Uiwf3xp2M_*Sz-@Dd$6aB?6rtp#<1Dl9<`x{_;G_h zc#817x@sz8TMsO`vN6{}lN_hI&on}_602+raTCZX5lm?2#j0}-OC;gW#VBE^hUyRAs%#4C+o_1{*vBBQOT~b# zTR0N<=@rF9rk= zsI$k#%I)Qu2U zp_W}qbkD$1f@*AH*h;esPt&1<#aesurJ{S%U=P?ArE)=lr053DCUTc{EcpB6DLau% zzm$#v`N5Mjpm#*yj3^6n9y(us#?A|&v-rrw<+v5*?D2888Fn{DB-q<=vR^G4j3xp6MdE%E_;!1n6`+=vC|0t&4FzN zYplmko7{K{>Mj>yffJQM0azrDh?tosTT{scoA-KWg)dS$soPj;o4xb@Gb4~ZXpnFJ zrnrm`$&dt>eIHIbnNdSWn8Q{gvUx1`5w@dWjgmcJPaAD5&5a_!bYjAEu;yk1ro(kT zQDHiEbLcgI?8?(AFsz}u%xWC==@8xssnrtWtv$aZ2-6>rzkA(l%lx1{)E=vF-K2JFMpBTx4LQ65bA3N7}gC zF~JqyB&GaUeDL?Jk7F?n?I*Gyg_o#d2{l$QdR;9JcG(-hAYoHQ8tZ~TDgwMl1(Dh_ zIJi&*Rv~%57)Q*Fj_95)>~LZriihW$a8B=mzj9Rh5Dbl58Xa&tru{7?4|V zEqYDBu+ZRx(qMugu%Av4;KP}zGtWJT7zdCJRu&!~9mf{C*^v|cS%EXB%~Sko0sMl% zsCjbi)L3rnfO+~%PHn5peRq-1%#EEIHBZA(I&lHqe__~=VH6YV-6yCbvCM_6a})SXIz5UStSjXY^%CGJQ8 z;BoL)3qhorgr#>Ro0>Dn*WqQK6Uwttrot9!F5$-{Ov2Z;ZuwJ9w52MTrN7O% zfN53%If~6@b58~vIHvYMO(g>d9Ly@q=rqPqN5%% zKZb+LL9p#Pf102<4OP>y--;}!ZC~3o)K*a#+w)gjjUbVHX|}mV7uJs8#}v3eTWEm8 zxK!~iqu3ekfWJ*9SL!Z0_AL4+We97*7z7F@24NA4pfE17H3U|Og|wpf*=#9*V;AIu zwOW3|VFsImK{st16WPOndu!!G!z@;aVW~@?F~WAupLkJ=RPYk8XYA2tuaoWMX9ZeE0VXKYd#j?*2eZL}Y%+J2Et{=OHoYXPK?@4*hDf^N182IJ-U5nT0Kke$H~eq6@tk5Xhcv5G}BUyH5i z65!em)T7qK0R6zj3yT;$G(c15dsd_HsjBB#lZ-Xe>N$g1`Fyu)U~h1EJ*@;h$57wI zgN^XRHEz0pm}OzUr{XRGnWFIhcn16J>90ztWb z?v}N!?zZ{uD09u;)3jFD%~`siB}X zJ)Cd8kH4XNmCuTrgYym#0+R{XoO^JP)jDU(r5P-vIa_$-@h80a(jpyc*xe4l|6}3X zD$Vhylz`uB_7jhJshKAp3m*X`LKyrCOC$R8VlvZPko#sLtGob(JQo^_;wKN3KQDQ9 z31OVvt33nz*pgEyWBWrahEK9~@!zF*R5ug&MH23XtIVudS)cgh{szzX@W4S=@u`_6 z`uE~uVz0^i7OzWPs6C*&RCn`OtaR2(^9Vc-ndhZdKY8wmNut|lw+zL{4h;7NRSu=R z{`FEu46fdQGf?B~zq|h&IHB9V9*aJru9ai}9 zi|AG?TehZwu)ttE7OJ+D}Sv^HSdJlbqJ9Xn3=O_}kZLm+$4L)x%REg?IurZSFF^Cp^ z64^wCg|4M=;E0UQBEACgmw*mf>W@97qkqC{^ zjH8p7QIr^f+L{9DA@o|}9-!vnoY;QF+Dc3nFoQM=wO?&J*kHv=i!IBqgZMH5coh1f za4ynd&L!kQ2mG*8Y!h9SovfwTXwHT;G*?LT48Qt?y=I9aKU5WWfCScI01$y-fVar4 zTcX$^v(a0}tuZ61N92AV2;fz%KD?2q3$Z<&a*fexH}gv!4EMQ0BoTixgjDt-Y%qvE z0|HpCX|S9i{_G>2WzbZNXgO^6iLF58j1ge;pm8~eGX?1%!4-UGxOxR($M=|FaSYl6 z4;>=T+|+y;#%8HET#yp|9O8@^MfbU=EJ*2EzT&qb)!BwGgy}9~edan(+Am?e#21Zt z4)F%ljtmn|XrEEy;cK{y00J)k$Irg>j0BXX79RW)7Q#8Hgo_xHw~U+|WAwzx$qB3m z3|B7vDpI}CYVx^{*)H&I6wweqwUYvySEP8wiQBpEkC9zGfvj-ZN7Y7O0r!j}?4S?f z1U(2S;BR-pOoT9j9xM*%iTCl&CH+SIDa8fy;k*f=W`ur}ud#*7 zTGX!@X8pkrP^0ikEJl%HrGl@sY#D-aRwdkX`^`%H3aiE^(vvp!I;WB0rd-q+#Z$QB zhi>i7Q#A#=g*p{{JX}_9T54O?aNpl>d#*cRoWi7=%(JPpeiw{WS#O%_Az{kFB1@AN z7Fc>F%&9Y{Vb+S^|SjlssnE@6UxI<2vBlwxj@q@5G(f&fK zQ1&_6plIm{%h`~rl5~~o{QnHwc8&=(wTB>(5JT4d2e|m_V9m=FpD8}t$rQ0&6*i{= zV?Kdhn&qsGF~3B{+|F!$CVjTaq}!i2qF>-f3&N1WXk!~P+M(n|d{u?Fb@0&VIm1uz z(9ZLIhtv9g4B$pQuSa;^PT)@jTwT)NsXys+2hLI;<^W)PFo&8jn|8kT+iXS1*S6!= zWCTy;Z(EP*%|zI*CL`OjVG-Y8MfgN|x?l(AkGt_lL+KpkuQTLSaOm&jIWMT0;RhfZ z_&Np!F~>gykKm7&{KgOKIlqI)Jk90!12y-uDSL3h9i-BcWSl>1il|2X6lqL;=~Q_+ zM82^p@>7o3MvS}HAo!r>ByiK~4SpweSh@EdYHePBc$bQjie{8}$W7q`SQMAAVg>q3 zdj>@74O3yOIh3br%Z0u$7oQ@8!;z@PEp4}h_(74}-uCbrk~3xsg{qjCUKT5XF_fXs z4i0XND^F@_3tOmTShHSpzRagraPZ=IiV_^6Zs$Rc+(SGtjLZ2R-s8-MZYuE&&U3u| zZQlL}&%T$>x(l^p2~mhJuVI^JQCAT<;QXQFgVBwlyzlXX8&*hQ?+sk386tkP`+4~& z4^Q!Mj0e#$b3A*22b+h_^6-N^d_NB_^YBAF`~(j_%fqkp@J$|i*ggilh?7>_EzS?{ z0hJGtokDu*M?_>kHV-0&lTTsuBSexujr91@IvkD2_I;Ts{-MWUFE=^z*M_*yZjvEH z@~wV<2uF3di{E{_^&V~uo!pkZuV=e{k8wlS(>Id)l0E6I`d-E>8t=vt@fbJK?38&F!8y`=2j}nWh>p~eR!4NCj_61o(UI{)`a60tNSS^o@_9WIT&Zv4+Z*T8 szY|APrJhQEJM#JDUCI5)2lYd(IgP&v^GRLlx6|eH|^lJ#hW4zl05#bRL6|qLN8RM~LoX4XPCti$*xJY~u5eX;ue*FC? zPXxLlF$~>sPd6k+%*bl;g`Y}Ec*#|(q#K)|K#J|dZu_v-kSdbtx-H>&PwSyEFI()C zpLN*v+M@P+O}ewuIh0K2sI$H%ZQS0t7rN_PpJ6#m**P=Dm72ABtAn>xYc!;Gr`GAV zrF~a8Z3#NJ zZPnlHI{TzN{fa_(jCVVNZ%%|qk<^%o^0JB(h>wV2o)jZ|R3v#yjPfy& z;%PC)Ga}8$MTSp^aXu*~_>`FB(_)Ixh-p46X84?#HoRvB;OiIeuO& z@eATSUltemMX}5;iHlqkm-vd1_+_!euZYY1s<^_hiL3m&xW-=**ZB?c3SSjB_^V=- z-xRO%HF1;Q5^H>2+~QfW&Toq>zawt*4RMFx6&w7XxXbU0d;B$VpFa?<@z=!z{)Tv+ zZ;Chgn_`nc6mRmk#6$i_yv5%Zk5CYA`=g~!=O{;8@#1GeY2@5y(`_}LOWn33Xs=qL z<_W1}S(P(8w;p=eTGHnnsqM5nQthDQcoGzHMUir})AhD=iY_o2Acn;XKQRWf4TxbQGOrl@wD_71NUN36;d2l;o;O)wL419Sdyau|qf@yhHc} z;g^J85q?eh4dJ(h-w{3{{GQ+w{y;l^AV?Sxztyaq^gV6c?{;gAo@KF(w=8o(&Jn^heBUjtu@t&R}RB zc|R#bQK4`1ny%Sl?@=t7HqutKg6^j@-KOc7X89R|namo96BXI86j>c8(&egZDYl96 zRnwo8Rm_s#vkg|!4VoiOWn<%iLD85$qLl5b3H4+!tfDeISJD+M(4Q*nJ1lQkm{FEB z%&hM9RTe8Fm~1Fejhc+vx>aI^pGFPZWj(JH6a*YaSjxwfJwF{Ls3%SLhts0+ih+LU zPY-4}(T#1%c}SnFGSl+YRjrp7PK&L`du1#sFe3tHE9l0SlFu{EAEjj!^s1Kkr^^g| zJa3amR#kl$p5uWKWL(}-v3tQ9gRGx~o9NAJTS}SfRV&!-f~sJtiK33YO{h#OTBVZ_ z2*a>NdBsw&hXq+tG1nBbVL>`fe;N7M!6ftucv!<$SrJ8my*72t^fQXKBdZEcyp5F1bw7$fhk|5=hH)k{c9>x^!_W^!qjC|JzmmaOG>l{}KKDrLn&mU4{cVVT%vTm2`=;}rDgbVDgB8Wnq0LuzuRV8`eB zPXIki+@Kx8@Fk5|ySlMWNkrnpjqjyoxo^W3Ygorw^G_n)6ZFUcA8%z3-KLX8$95X- zk>h16&-V{&UbEu4Po4cvJ6k)d+c@nVuT^VgyPbNYZ9m%}Z8kXZ*N>ii2}HYzcl(P# zGLncVl8I>WFW&nMr9NNQzO3o{e)9AGcqXI4N?y7n#IdT!w7eVWsAum8BJL!f4m}+{ zh~tKk5JQlXfix;&xNIe!rUGdUwvmC9hAlZ5mw{~*(sw7?&Q5 zn}IC@X*RIUK^h-;&O@4j6vkYDGzn=j@H_`;3R1YvB}mhQapxh;45SN?W(U$Tq&Y|z zgD4jv%@1ssAT2p0*U+2)l zEfA&hUPp2dq~~te!%f0_R>xIP%5~cvw^@JTkXsw1TV!Yd@T^-n3E~{M9?ZCLY)UtJ zClJn-ypoggXSOB{I)PR#GegPYILWiM;8qiST@3=U_iD|fhJz56*L85mrK|1j&}JQ@ z7$OCac#H!za!h67jS}b%?~M`CgjvEIVV-Gr!w5sKyQ6)EP1dAy9&IjYw%$GRT%pqn-IMZ5CbTb1fOA*N>C{;*<}aKa zXlJK-Kmo>rW2$#%^?r{i{8NL?_Jf5Uy=PV_(k%7D;EX8Cw9T4~pALSes%>jz==FU3 zj*(BVZn}gni1vM2mnq;>GwrexTx+}%MPCR826;G{8j186S!WD1_D}TblU^Bq+k>OW zfiL0RUIVD(jgO2+gMaZ)`6O$6IvR}BR)>Q!@DmPx+jvxc9*U(`78Lt`P3k8fhL^lY URI_a=%|v8UilwHbF>^lpUybCuzW@LL literal 0 HcmV?d00001 diff --git a/api/__pycache__/log.cpython-310.pyc b/api/__pycache__/log.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..268eff108422c4e6c1a43f7a436896ed6b15d5ad GIT binary patch literal 1778 zcmZWpTW{k;6!tZ7Zf$zM?Zt~0v_VS)6%Pn1)ND6p3vE(0X+ai}Wo4$dTiavClZxzX zdF2-%q*grf&aatQo{;zj`vT{TyV)Xa&3EQIH_yyDW7cR?HF%!>c6t8AlBWHMoGS=-kEPFB&O+bGw|MWjG z%ngGp>IQBu_;@77oVtR!BBU;-dB)P5x;agSd&XI!)SaV!cND~NzFA~F?(TJuyS?4+ z;NDVt?atj2```8s`kj~mGyVm2(t0gJR$c@-J!FK&(%y?`Oj?#SJLyC^{Y*qG4Pt2> zM7faVgGf*w#KYHy`|OS08exX}j|pT4M*h97X;g#SYo2kUQPZ=iO-n@I)@a#t)ZBo1 z#jC2hxvde)t5K-+ng)Kh;xkiTQhXM;t?Xrp#eB}4tSEbPYOg9jH{~_O=cl|5aSIm< zkf8yyMUXRha#ndRfoHLjrsB)f$T`JVrhH!U)hS<4d~F)PsQCJnFDbq;<;#jcnDQ0H zA5QtI;*WqoRy$uqKG0h0vIcE%z|M=hIU&nM8YEO2ESKge8~3D{MMPQ|VmagNf{uhV zV|FepEQ2ayWo0SIqEpJH4f=f|9T2-=5T()(kVXVhbI3J}AaO0Hc@8oA=^2xygo=<6 zX^uHG4QFFPWjUk)T#Z~>BoKkL&!U*-vO<3x!8O2-IdA(}I-wBRE_7VWm5%S@!hK&> zeLrDj9OJz1`#+3>_|7sr=pLVTkNsEu!LZjk>~j1SNfR!Nob~-6O&Kf|K9NIY8J+z8 zfY;E+QEd0vK&CzGzfSQZWXNF>zY@$k+M4CC)K82wxfuAxZ7Gz@0c4Q4W{W!6n@Zdv;_vky$u81xvgB@=r&i+ zq0P12cD|l(dv&i}s2AGBda*rGpJS0!)Lcnve_#JKgH(IxAy0= znKQ2SZ>3M1}66iM5E z+~k7$l5cYXgxWk6aU}f^b8Q~Vp5V;y$+*+-G1~Fd1S9T8Nhjq`QokK`!Uh+zl7Zb= zxw*2jQe9rz9Kp4^xHNdf+WqRCwWS;1xL94Qjh(viUd699xqtqAvG^59Syh>pzE!D| zU6o%>dVnufezVtZhhj(NZiT%DSF_7WtHq-<5gWV_%M>f6cCVGjU6DjwN;Tc!9lSH; zK?{{k)#QT_Z4dE!1WTO+GNtbJE-%wQic< z_jZjfm!v-}kaj^s?Jsd=%Vo|p2YZU?1mT1E{MdXcon#&>yfQz9d!W~>)EK>Gni;@+ zvMLI|NsuiP6R66Ln5O;=RkNs+Cx+aAy_u%nK=4m{V7BIYC)x=lhx{_xf8!2>029RE z+qK%dKiDY!xC4#Qn=0Uu3$17-OnJP+x=Gwg)r7uRf?YkSPK*MPnf&xm)<}%TudS$s z@vW^xdF#Iq^^BT4dgR9s{jlRNt*`n+aDFTYGDdO)g%ok4nfjgNaYf7%1!mNl;E0_; zFeZHCOJkDg$|QQk@tg)dP^MZIPmNtQoE9VzYJ6=-W|7xxcS+OMGfg{GM3JMlaU3#* z3nJ2DLDHtCkFiLQl&ce36%W~`_p3QgwBdd|S9X*mdF!Dl;gp!nE(~MI1O6m}X@p8W zH^lca|Ml8pGimch26NX+x?C)-??kY-ZJ_cy3n9ruYuV&rR_r8vWR;dYgtPPG2588|R{#+Y zG$0~tN}x<;J|pX4RRM?YEL*}uqd|*zs7F*D0Zgk0C>n6d?4KQZ;W1kr5pKheV3Xu% z_&3p^hwhU#fEC)ZQJe$&Giw(ZJ#xhSuC<@rHMRc*IrOX{&SBO)n$_0BstTfCIWNwk zQLZ+$Qk=y=yhhcxY1)oEk+K<&%C;t_%58_O9#?rSZd@FDr7G$9fg||?Zje)`T#ML> z-^=;jS+jq7E@ zAY;HqER0~Kxu7{ehlMVRq>g7;4vAs$h4qdWQCrY-gfjLK^{=7G3#f)ZhQY5CEc|TP zX80HQ8HeIA_>>%3aqVLe{gfx*Th>%%KkbDgeb;}`OM$5`n@O+5e6n8t<2Y?bvxsRAc$0kK)?IA|lr6|I#enobmKfOGVzReV@<_yB?q%nnT zBp{iKLZCTLPWXM12C39h9>tY`J_09qh<^}7-Ci))`tvn-EF#nBoTcm~WQl)j^L+TMN#d%aJ zpFGe(lDI}wOH^H_>Iy1Eif^Jp9QPy&(w#0>1?pwCy^spzL=VE~(J_%#1tRVf^6~$` zX-QzL&pm72@dgIodg+ez=g^a(Chr zs*ZH$$e@$h{}Dw}yz3c`1(QrB{a@bOrAa}n}JHAN^lZPulJ-9tAmS zVSQum?n>?U%Dv6t?!7y;Rg9N|8><`r!p6!ie|@QT`!X`IENfNn^=8s-#Rv=zgRuxG z9DbyA6u)bU+(w5aGSz7XGaFD;W>JbkiA)0$`FrCFi{+l#myA{XrEuH$-TY@p>g?yR z$2x$tWwWMnAFB?2d-iaKjOBZSQ}WVd$Tt0cj-mqrx2o)0E4BVvvYztt;$nNJ!r*k` zP9;j(I^ffhf|gH&0atvPKjSIs$d>ZRq(+m(Nc`#ACnEh&7~w5*|Xq}|M7 z_EXT6IeX>}q=BHCMPbu#1{6W62CXD5MeAm5ij)p1TmG53pFhBv0j0cZ|MX^tr~VsY zkORp|r7{*WT0p=?*+kJ#Xuu}?BKH~iyJ!5?`V^soem{hgUQ)J{Rk@(d;5bo=S6WEj z!G!MB4~ZId@0`(J(7d??~~3T%|x(xrp}Q3Bjyf8p=oVI93jUf1mK7(2n$f&YUql)3X*#5fH4` z#2vcGmOD~8T>w!o+#(p8x#erLID4d5LDY(2-gTy5{QyM{4y1%yZ$;w8s zymqfz)4^IMcw|77l}P<2u|cCe?`+2+>10pNhYutnkqIslTw|$h(d&%7?a;0$?@AVP zUL_6HiHu`-Z?3v@qa+8QgUDf}$V&_Y$wVlQy&;CgHntPcTw0y!ws-7#(LH0c zmUBuD2#FI{4zW1#m->XnDH4BxaDb}bb>e{NRhO%(t4m#9eKjt7y|xAG{a+6DetXNZ zen;c{^1!$aTS*YyiY;z)C$n=Wc5Kw$%+0;n%l+8TgE%lgFKgvt9Oh9R+1BS4_j&Nl z;(>6Ux^Y`{chjL;T-?s6k&3hN4RUj_9+7QP)eASs;s=W# zO~N6AA1qIwxbgM+{f*_-{~W#ml&!w4qdQEA2PGF--_`DNG1lQm zRi|aaGVR?@Ro!=VXS-%~qgEhF>F8cvS4K@R#rfreaT~V!0few(8`|hRgyzMr@PyBu zTNZcYK(s_CqC3`A3w)mOwZYdhwr}h%*gbJ!8WR}b4Bj&_Eo0AuebLyVvFBc$M_{*k z=b05>;_kN9@9N&x6iid;@y4XlB*(hRZYjyAJo*>tqq503c`V4$NEC#NLy?tLTI>;Q zfGBuXrbP`+K!)g!G6>NG60Yl3E|g+>LVKLmOt+LsfHz79S-D43uA>n^XkvATRVh6b zQUT(L4X~Xp#4>=r0$Y6#;>6kqBpX{ssO{T@4}YC~7?P{j6ML$=S1oy&dj*Wk3HsdX zx;gQl`#2n@&hy|DGqqrcy!EsH!~rcbc|S(&#NmJ@Xl>)WjT-m>(G%yy-gN-Y_VG`q zXe@jMhzPi)YJ$?ZYzPAeHwu9gDbQGwyBSjl1Tg-pVX`Jn5eSn&XqJnkQXWho#B57a zzyK6WWC!S9Hg(mQaPeIwl3GAB#?xf1;FD~x@2P5m|7yv1;l|71U{vN}FeR9fgUxX=Vlv;9pp2ET-Qg!dsA4&4YL+obw#}itWKK_-j6zw?p^%@*9(| z@ak57UWb%oos{Y}r7#*zhI*G`+H88#qLh~jr4qTRXDDSwQ3CgYz6!hsUi^}47rtlG z2WH?ZdS5dyHJvW%s?(%cy6$~h8iMsP7pLh5M~;%wzlOtp+9fW+PLx8bxZ_S zk+Za*v=5^KkcJ9PNX%5b str_limit: value_copy = value_copy[:str_limit] + "...(trunc'd)" + + # Done here: + return value_copy + + +# --------------------------------------------------------------------------------------------------------------------- + + +def set_api_version(api_version): + + """ + Use this decorator to automatically note down the API version no. and propagate it throughout the downstream + decorators. Use this as the entry point if possible. + :param api_version: The version code to assign to the API. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # set the version information in the variable. + # This makes it available to the downstream decorators too! + kwargs["api_version"] = api_version + + # we are ready to call the function that we are wrapping: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # Add the API version to the response: + if isinstance(response, ResponseModel): response.api_version = api_version + + # Done here: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def read_input( + read_headers = True, + read_data = True, + read_files = True, + sanitize_headers = True, + sanitize_data = True +): + + """ + Use this decorator to read the inputs from the incoming request and sanitize them. Sanitization makes the inputs + safe against certain threats like injections attacks. If you expect to take in inputs that you want to use to run + database commands, you could disable them manually. + PLEASE USE "ResponseModel" AS THE RETURNED VALUE OF THE API ENDPOINT IF YOU ARE USING THIS DECORATOR. + :param read_headers: Whether, or not, to read the headers of the request. + :param read_data: Whether, or not, to read the data of the request. + :param read_files: Whether, or not, to read the files of the request. + :param sanitize_headers: Whether, or not, you would like to sanitize the params coming in through the headers. + :param sanitize_data: Whether, or not, you would like to sanitize the params coming in through the body or query. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # Get the headers: + if read_headers: + kwargs["inbound_headers"] = await headers_from_request(request) + if sanitize_headers: kwargs["inbound_headers"] = sanitizers.for_mongo(kwargs["inbound_headers"]) + # else: kwargs["inbound_headers"] = None + + # Get the data: + if read_data: + kwargs["inbound_data"] = await data_from_request(request) + if sanitize_data: kwargs["inbound_data"] = sanitizers.for_mongo(kwargs["inbound_data"]) + # else: kwargs["inbound_data"] = None + + # Get small files from the request: + if read_files: kwargs["inbound_files"] = await files_from_request(request) + # else: kwargs["inbound_files"] = None + + # # We also make a provision for capturing an identifier + # # for the logs that we make through a sister decorator: + # kwargs["log_id"] = "".join(random.choice(ALPHANUMERIC_CHARS) for _ in range(8)) + # kwargs["log_chain"] = kwargs.get("inbound_headers", {}).get("X-Log-Chain") or kwargs["log_id"] + + # Now that we have unpacked the incoming data, + # we are ready to run the function that we are wrapping: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # Done here: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_session_info( + key: str, + controller: str = None, + session_func: str = None, + session_coro: str = None, + get: str = None, + mandatory: bool = False, + sensitive_keys: List[str] = None +): + + """ + To get the information about the user from the session token or some similar identifier. Use this after + 'read_input', and note that the callable func/coro should only take on parameter - the thing to identify the session + by, and it should return a dictionary with all the needed details. + PLEASE USE "ResponseModel" AS THE RETURNED VALUE OF THE API ENDPOINT IF YOU ARE USING THIS DECORATOR. + :param key: The key in either the 'inbound_data' or the 'inbound_headers' from which the session info will be + available. Examples: 'sessionToken' or 'X-Session-Token'. + :param controller: The object from which the func/coro should be called. This could be the name of the variable + holding an instance of a class. Should be available in the scope of 'current_app'. + :param session_func: The synchronous func of the controller to call. This can either be an independent function or a + class's method. Should be available in the scope of 'current_app'. + :param session_coro: The asynchronous func of the controller to call. This can either be an independent function or + a class's method. Ignored if 'func' was provided. Should be available in the scope of 'current_app'. + :param get: The field inside the dict to get. Specify this in dot notation. The whole response will be returned as + is if this is null. + :param mandatory: If set to True, the API call will enforce session checking; and if a session is not found, the + client will receive an unauthorized failure message. + :param sensitive_keys: Any keys to obscure when retrieving details about the session. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # Start by assuming failure: + session_info = None + + # Get the identifier of the session from the values extracted in the 'read_input' decorator: + session_id = kwargs["inbound_data"].get(key, kwargs["inbound_headers"].get(key)) + + # If the key is present, + # we call the function that will get the session's info for us: + if session_id is not None: + + try: + + # For synchronous functions: + if session_func: + if controller: session_info = getattr(getattr(current_app, controller), session_func)(session_id) + else: session_info = getattr(current_app, session_func)(session_id) + + # For asynchronous coroutines: + elif session_coro: + if controller: session_info = await getattr(getattr(current_app, controller), session_coro)(session_id) + else: session_info = await getattr(current_app, session_coro)(session_id) + + # If something goes wrong: + except Exception as exception: + if hasattr(current_app, "printer"): getattr(current_app, "printer")(exception) + + # We note down whatever we got: + session_info = summarize_variable(session_info, expand = True, sensitive_keys = sensitive_keys) + if session_info and isinstance(get, str): + for subkey in get.split("."): + session_info = session_info.get(subkey, {}) if isinstance(session_info, dict) else {} + kwargs["session_info"] = session_info + + # If no session info was found, but it was mandatory: + if mandatory and not session_info: + response = ResponseModel( + status_code = StatusCodes.FAILED, + http_code = HttpCodes.UNAUTHORIZED, + message = f"invalid session" + ) + + # Now we are ready to run the function that we are wrapping: + else: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # Done here: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def validate_input( + mandatory_header_keys = None, + mandatory_data_keys = None, + mandatory_file_keys = None, + header_validator = None, + data_validator = None +): + + """ + USE THIS ONLY AFTER YOU HAVE USED 'read_input'. This decorator will help you run validation on the inputs that were + extracted from the request. The mandatory keys will be checked first and the validations will be run after that. If + your validator already checks for keys, you may skip mentioning mandatory keys. DO NOTE THAT YOUR VALIDATOR + FUNCTIONS MUST RAISE AN EXCEPTION FOR THIS DECORATOR TO WORK. + :param mandatory_header_keys: The keys in 'inbound_headers' that are absolutely necessary. + :param mandatory_data_keys: The keys in 'inbound_data' that are absolutely necessary. + :param mandatory_file_keys: The keys in 'inbound_files' that are absolutely necessary. + :param header_validator: The function to use to validate the 'inbound_headers'. + :param data_validator: The function to use to validate 'inbound_data'. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # We first validate the mandatory header keys. + # Having a null value in this case is NOT allowed: + if mandatory_header_keys is not None: + for mandatory_key in mandatory_header_keys: + if kwargs["inbound_headers"].get(mandatory_key) is None: + return ResponseModel( + status_code = StatusCodes.HEADERS_INCOMPLETE, + message = f"missing: '{mandatory_key}'" + ) + + # Return with failure if any of the mandatory JSON details are missing. + # Having a null value is allowed, but is should be sent by the user on intention. + if mandatory_data_keys is not None: + for mandatory_key in mandatory_data_keys: + try: kwargs["inbound_data"][mandatory_key] + except: return ResponseModel( + status_code = StatusCodes.DATA_INCOMPLETE, + message = f"missing: '{mandatory_key}'" + ) + + # Return with failure if any of the mandatory file-keys details are missing: + if mandatory_file_keys is not None: + provided_file_keys = kwargs["inbound_files"].keys() + for mandatory_key in mandatory_file_keys: + if mandatory_key not in provided_file_keys: + return ResponseModel( + status_code = StatusCodes.FILE_MISSING, + message = f"missing: '{mandatory_key}'" + ) + + # Next we validate the headers: + if header_validator is not None: + + # Try validate the data: + try: kwargs["inbound_headers"] = header_validator(kwargs["inbound_headers"]) + + # In case some needed field is missing: + except KeyError as exception: + return ResponseModel( + status_code = StatusCodes.DATA_VALIDATION_FAILURE, + message = "missing: " + str(exception), + http_code = HttpCodes.BAD_REQUEST, + ) + + # In case some pydantic data model fails validation: + except pydantic.ValidationError as exception: + return ResponseModel( + status_code = StatusCodes.DATA_VALIDATION_FAILURE, + message = messages_from_pydantic_exception(exception), + http_code = HttpCodes.BAD_REQUEST + ) + + # In case some other exception was raised: + except Exception as exception: + return ResponseModel( + status_code = StatusCodes.DATA_VALIDATION_FAILURE, + message = str(exception), + http_code = HttpCodes.BAD_REQUEST + ) + + # Finally, we validate the incoming data: + if data_validator is not None: + + # Try validate the data: + try: kwargs["inbound_data"] = data_validator(kwargs["inbound_data"]) + + # In case some needed field is missing: + except KeyError as exception: + return ResponseModel( + status_code = StatusCodes.DATA_VALIDATION_FAILURE, + message = "missing: " + str(exception), + http_code = HttpCodes.BAD_REQUEST + ) + + # In case some pydantic data model fails validation: + except pydantic.ValidationError as exception: + return ResponseModel( + status_code = StatusCodes.DATA_VALIDATION_FAILURE, + message = messages_from_pydantic_exception(exception), + http_code = HttpCodes.BAD_REQUEST + ) + + # In case some other exception was raised: + except Exception as exception: + return ResponseModel( + status_code = StatusCodes.DATA_VALIDATION_FAILURE, + message = str(exception), + http_code = HttpCodes.BAD_REQUEST + ) + + # Now that we have unpacked the incoming data, + # we are ready to run the function that we are wrapping: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # Done here: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def log_request_to_mongo( + attr_name, + collection: str = "logs", + api_version: str = None, + project: str = None, + log_type: str = None, + operation: str = None, + log_input: bool | int = True, + log_output: bool | int = True, + sensitive_keys: list = None +): + + """ + USE THIS ONLY AFTER YOU HAVE USED 'read_input'. This decorator will log the whole process of the API call to + MongoDB. The variable that holds the instance of 'AsyncMongo' needs to be accessible in the scope of 'current_app'. + PLEASE USE "ResponseModel" AS THE RETURNED VALUE OF THE API ENDPOINT IF YOU ARE USING THIS DECORATOR. + :param attr_name: The name of the variable that holds the instance of 'AsyncMongo'. It should be accessible in the + scope of 'current_app'. + :param collection: The name of the collection to write the log into. + :param api_version: The version code of the API endpoint that is being logged. + :param project: The name of the project that the endpoint was built for. + :param log_type: A hint to identify what the log was for. + :param operation: A hint to identify what was action was being performed. + :param log_input: Set to True to capture everything that went into the function, False to capture the least + info, and set it to an integer to capture a certain depth of the input (applicable on iterables and dicts. + :param log_output: The same as 'log_input', but applicable to the response from the function. + :param sensitive_keys: The list of keys to not log. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # Create ids for getting logs: + kwargs["log_id"] = "".join(random.choice(ALPHANUMERIC_CHARS) for _ in range(8)) + kwargs["log_chain"] = kwargs.get("inbound_headers", {}).get("X-Log-Chain") or kwargs["log_id"] + + # Set the api version as needed: + kwargs["api_version"] = kwargs.get("api_version", api_version) + + # Make variables and extract available info.: + exception = None + response = None + request_ts = date_time.get_current_utc_date_time() + start_ts = time.perf_counter() + cpu_start_ts = time.process_time() + + # Execute the function that is being wrapped: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + try: response = await func(*args, **kwargs) + except Exception as exc: exception = exc + kwargs["decorator_count"] -= 1 + + # Ensure that the response is not null: + response = response if response is not None else ResponseModel( + status_code = StatusCodes.UNKNOWN_ERROR, + message = "null response for request" + ) + + # Add params to the response. + # THIS IS ONLY APPLICABLE WHEN THE TYPE OF THE RESPONSE IS 'ResponseModel': + if isinstance(response, ResponseModel): + response.api_version = kwargs.get("api_version") + response.log_id = kwargs.get("log_id") + + # Extract the response to log: + response_to_log = "not logged" + http_code_to_log = 200 + if log_output: + if isinstance(response, ResponseModel): response_to_log, http_code_to_log = response.for_quart() + elif isinstance(response, tuple): response_to_log, http_code_to_log = response + else: response_to_log, http_code_to_log = str(response), 200 + response_to_log = summarize_variable( + response_to_log, + expand = log_output, + sensitive_keys = sensitive_keys + ) + + # Try to get the information about the request. + # There will be no data in any of these if the decorator was used to catch start-up and shut-down events. + request_method = None + request_url = None + request_route = None + try: + request_method = f"{request.method}" + request_url = f"{request.url}" + request_route = str(request.url_rule.rule) + except: pass + + # Redact the sensitive keys: + if sensitive_keys: + for k in sensitive_keys: + for var in ["inbound_headers", "inbound_data"]: + try: kwargs[var][k] = f"{len(str(kwargs[var][k]))} sensitive char(s)" + except: pass + + # Construct the log: + api_log = APILogModel( + pid = PROCESS_ID, + ppid = PARENT_PROCESS_ID, + project = project, + log = log_type, + operation = operation, + apiVer = kwargs.get("api_version"), + logId = kwargs.get("log_id"), + logChain = kwargs.get("log_chain", kwargs.get("inbound_headers", {}).get("X-Log-Chain")), + ts = request_ts, + tat = time.perf_counter() - start_ts, + cpuTime = time.process_time() - cpu_start_ts, + sessionInfo = summarize_variable(kwargs.get("session_info"), expand = True), + method = request_method, + url = request_url, + route = request_route, + headers = kwargs.get("inbound_headers"), + data = summarize_variable( + kwargs.get("inbound_data"), + expand = log_input, + sensitive_keys = sensitive_keys + ), + files = { + k: { + "name": v["name"], + "size": v["size"] + } for k, v in kwargs.get("inbound_files", {}).items() + }, + exception = None if exception is None else describe_exception(exception), + response = response_to_log, + httpCode = http_code_to_log + ) + + # Write the log: + app_attr = getattr(current_app, attr_name) + inserted_id = await app_attr.insert_one( + collection = collection, + document = api_log.model_dump() + ) + + # Return the response from the wrapped function. + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def log_chain_to_mongo(attr_name): + + """ + Use this to run everything in the context of the logging decorator. Everything that is decorated with the + custom decorator will be logged if this is used. + :param attr_name: The name of the db connection (an instance of 'AsyncMongo' or 'AsyncMongoStorage') + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # Let the next in-line decorator know that it has been wrapped: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + + # Fetch the attribute and get it to log the whole chain: + async with AsyncLoggerContext.logging_context( + logger = AsyncMongoLogger(getattr(current_app, attr_name)), + log_chain = kwargs.get("log_chain") + ): + response = await func(*args, **kwargs) + + # Done here: + kwargs["decorator_count"] -= 1 + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def should_not_be_under_maintenance(attr_name): + + """ + Use this decorator to reject a request when the app is being marked as "under-maintenance". You will need to create + a boolean variable within the scope of the 'current_app' for this to work. An alternate to this is to set the value + in an environment variable named 'IS_UNDER_MAINTENANCE' to a string value of either 'True' or 'False' for + multi-worker deployments. + :param attr_name: The name of the boolean variable that will hold the information about the app being under + maintenance. If its value is True at the time of checking, the incoming request will be rejected. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # Get the attribute and check if it indicates that the app is under maintenance, + # call the wrapped function if not under maintenance: + app_attr = getattr(current_app, attr_name) + env_attr = True if os.environ.get("IS_UNDER_MAINTENANCE", "False").lower() == "true" else False + if app_attr or env_attr: + response = ResponseModel(status_code = StatusCodes.DOWN_FOR_MAINTENANCE).for_quart() + else: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # Done here: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def only_whitelisted_ips(attr_name): + + """ + Use this decorator to reject any requests coming from unauthorized IPs. The list of IP addresses to allow must be + in a list that is accessible in the context of 'current_app'. + :param attr_name: The name of the boolean variable that will hold the information about the app being under + maintenance. If its value is True at the time of checking, the incoming request will be rejected. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # Get the attribute and check if the request's IP is in the permitted list: + app_attr = getattr(current_app, attr_name) + if request.remote_addr not in app_attr: + return ResponseModel( + status_code = StatusCodes.AUTHORIZATION_FAILED, + message = "bad ip", + http_code = HttpCodes.UNAUTHORIZED + ).for_quart() + + # Now that we have checked that the IP is permitted, + # we are ready to run the function that we are wrapping: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # Done here: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def limit_rate( + attr_name, + rate_limit: int = 5, + seconds: float = 1.0, + message = None, + header_keys: list = None, + data_keys: list = None, + allow_if_exception = False, + count_for_http_codes = None +): + + """ + Use this decorator to apply rate-limiting to incoming requests. + SUGGESTION: WHEN STACKING UP MANY RATE LIMITS, PUT THE SMALLEST TIME PERIOD ON TOP AND LARGEST TIME PERIOD AT THE + BOTTOM. THIS ENSURES PROPER FUNCTIONALITY. + WARNING: TIMING STARTS WHEN THE FIRST PERMITTED REQUEST GOES THROUGH. THIS MEANS THAT, IF YOU HAVE A PER-DAY LIMIT, + AND YOU START MAKING REQUESTS AT 11:00 PM AND EXHAUST YOUR LIMIT AT 11:59 PM, YOUR LIMIT WILL BE REPLENISHED AT + 11:00 PM OF THE NEXT DAY, NOT AT 12:00 AM. + :param attr_name: The name of the variable that holds the instance of 'AsyncRedisCache'. Should be available in the + context of 'current_app'. + :param rate_limit: The number of requests per unit time. + :param seconds: The time period in which the rate limit is to be applied. + :param message: The custom message to respond with. + :param header_keys: The keys in the header to consider when apply rate limits (like 'sessionToken'). + :param data_keys: The keys in the header to consider when apply rate limits (like 'sessionToken'). + :param allow_if_exception: In case Redis is unresponsive, would you prefer allowing the request to pass through or + would you prefer the request getting blocked. + :param count_for_http_codes: If this is provided, the counter will be incremented only if the response code was one + of these values. If not provided, all requests will be counted. This can be used in cases when you want to count + only when the request was successfully served. + :return: The decorator factory. + """ + + # Param-cleaning: + rate_limit = max(1, rate_limit) + if header_keys is None: header_keys = [] + if data_keys is None: data_keys = [] + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # Note down the combination of values requested and the limits prescribed: + params = {"route": str(request.url_rule), "header": {}, "data": {}, "limit": rate_limit, "seconds": seconds} + for key in header_keys: params["header"][key] = kwargs["inbound_headers"].get(key) + for key in data_keys: params["data"][key] = kwargs["inbound_data"].get(key) + + # Now make a unique key from this combination: + params_json = json.to_string(params, no_space = True) + sha256_hash = hashlib.sha256() + sha256_hash.update(params_json.encode("utf-8")) + hashed_key = sha256_hash.digest() + base64_key = base64.b64encode(hashed_key).decode("utf-8") + + # We first get the value of the counter: + app_attr = getattr(current_app, attr_name) + counter_value = await app_attr.count(base64_key, value = 1, expiry = seconds) + + # If any exception occurred in getting the count, + # and exceptions haven't been allowed: + if counter_value is None and not allow_if_exception: + response = ResponseModel( + status_code = StatusCodes.RATE_LIMIT_EXCEEDED, + message = "Please contact admin (E)" + ) + + # If the rate-limit has already been crossed, + # or when the counter was not fetched but exceptions are allowed: + elif (counter_value or 0) > rate_limit: + response = ResponseModel( + status_code = StatusCodes.RATE_LIMIT_EXCEEDED, + message = message or ", ".join([ + f"rate limit: {rate_limit} in {humanize.naturaldelta(datetime.timedelta(seconds = seconds))}", + f"this is your {humanize.ordinal(counter_value)} request in the given period" + ]) + ) + + # If the rate-limit hasn't been crossed: + else: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # If we have been told to count only for specific status codes, + # and if the HTTP code of this response is not in the list of codes, we reduce the counter by one: + if count_for_http_codes: + http_code = 200 # ... Default assumption. + if isinstance(response, (list, tuple, set)): http_code = response[1] + elif isinstance(response, ResponseModel): http_code = response.http_code.value + if http_code not in count_for_http_codes: + await app_attr.count(base64_key, value = -1, expiry = seconds) + + # Return the response from the function call: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def handle_cancelled_request(cleanup_func = None, cleanup_coro = None): + + """ + Use this decorator to handle prematurely terminated requests. If your clean-up function needs access to variables, + consider using 'g' to hold data in the scope of the request. + :param cleanup_func: The function to call when the cancelled request needs graceful handling. + :param cleanup_coro: The coroutine to call when the cancelled request needs graceful handling. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + try: + + # we are ready to run the function that we are wrapping: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # Done here: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + # In case the client closes the connection pre-maturely: + except asyncio.CancelledError as exception: + kwargs["decorator_count"] -= 1 + if hasattr(current_app, "printer"): getattr(current_app, "printer")(exception) + if cleanup_func is not None: cleanup_func() + if cleanup_coro is not None: await cleanup_coro() + return ResponseModel( + api_version = kwargs.get("api_version"), + status_code = StatusCodes.CLIENT_CLOSED_REQUEST + ).for_quart() + + # We propagate any other kind of exception: + except Exception as exception: + kwargs["decorator_count"] -= 1 + raise + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def handle_failed_request(cleanup_func = None, cleanup_coro = None): + + """ + Use this decorator to handle requests that fail due to exceptions. If your clean-up function needs access to + variables, consider using 'g' to hold data in the scope of the request. THIS DECORATOR IS NOT MEANT TO SUPRESS + EXCEPTIONS. IT IS, INSTEAD, MEANT TO PERFORM CLEAN-UP AND PROPAGATE THE EXCEPTION. + :param cleanup_func: The function to call when the cancelled request needs graceful handling. + :param cleanup_coro: The coroutine to call when the cancelled request needs graceful handling. + :return: The decorator factory. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + try: + + # we are ready to run the function that we are wrapping: + kwargs["decorator_count"] = kwargs.get("decorator_count", 0) + 1 + response = await func(*args, **kwargs) + kwargs["decorator_count"] -= 1 + + # Done here: + if ( + kwargs["decorator_count"] == 0 and + isinstance(response, ResponseModel) + ): response = response.for_quart() + return response + + # In case the client closes the connection pre-maturely: + except Exception as exception: + kwargs["decorator_count"] -= 1 + if hasattr(current_app, "printer"): getattr(current_app, "printer")(exception) + if cleanup_func is not None: return cleanup_func() + if cleanup_coro is not None: return await cleanup_coro() + raise exception + + return wrapper + + return decorator + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/api/codes.py b/api/codes.py new file mode 100644 index 0000000..5773cc9 --- /dev/null +++ b/api/codes.py @@ -0,0 +1,164 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 12th Sept., 2024 + + OBJECTIVE: + + To maintain all status codes in one place. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +from enum import Enum, unique + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +@unique +class HttpCodes(Enum): + + """ + Commonly used standard HTTP status codes. + Can be sent after an API Call is processed. + Refer to: https://http.dev/status + NOTE: THIS LIST IS NOT EXHAUSTIVE! + """ + + # 1XX - Informational: + CONTINUE = 100 # .............. https://http.dev/102 + SWITCHING_PROTOCOLS = 101 # ... https://http.dev/101 + PROCESSING = 102 # ............ https://http.dev/102 + EARLY_HINTS = 103 # ........... https://http.dev/103 + + # 2XX - Success: + SUCCESS = 200 # .................. https://http.dev/200 + CREATED = 201 # .................. https://http.dev/201 + ACCEPTED = 202 # ................. https://http.dev/202 + NON_AUTHORITATIVE_INFO = 203 # ... https://http.dev/203 + NO_CONTENT = 204 # ............... https://http.dev/204 + RESET_CONTENT = 205 # ............ https://http.dev/205 + PARTIAL_CONTENT = 206 # .......... https://http.dev/206 + MULTI_STATUS = 207 # ............. https://http.dev/207 + ALREADY_REPORTED = 208 # ......... https://http.dev/208 + THIS_IS_FINE = 218 # ............. https://http.dev/218 + IM_USED = 226 # .................. https://http.dev/226 + + # 3XX - Redirection: + MULTIPLE_CHOICES = 300 # ..... https://http.dev/300 + MOVED_PERMANENTLY = 301 # .... https://http.dev/301 + MOVED_TEMPORARILY = 302 # .... https://http.dev/302 + SEE_OTHER = 303 # ............ https://http.dev/303 + NOT_MODIFIED = 304 # ......... https://http.dev/304 + USE_PROXY = 305 # ............ https://http.dev/305 + SWITCH_PROXY = 306 # ......... https://http.dev/306 + TEMPORARY_REDIRECT = 307 # ... https://http.dev/307 + PERMANENT_REDIRECT = 308 # ... https://http.dev/308 + + # 4XX - Client Errors: + BAD_REQUEST = 400 # ..................... https://http.dev/401 + UNAUTHORIZED = 401 # .................... https://http.dev/401 + PAYMENT_REQUIRED = 402 # ................ https://http.dev/402 + FORBIDDEN = 403 # ....................... https://http.dev/403 + NOT_FOUND = 404 # ....................... https://http.dev/404 + METHOD_NOT_ALLOWED = 405 # .............. https://http.dev/405 + NOT_ACCEPTABLE = 406 # .................. https://http.dev/406 + PROXY_AUTH_REQUIRED = 407 # ............. https://http.dev/407 + REQUEST_TIMEOUT = 408 # ................. https://http.dev/408 + CONFLICT = 409 # ........................ https://http.dev/409 + GONE = 410 # ............................ https://http.dev/410 + LENGTH_REQUIRED = 411 # ................. https://http.dev/411 + PRECONDITION_FAILED = 412 # ............. https://http.dev/412 + PAYLOAD_TOO_LARGE = 413 # ............... https://http.dev/413 + URI_TOO_LONG = 414 # .................... https://http.dev/414 + UNSUPPORTED_MEDIA_TYPE = 415 # .......... https://http.dev/415 + PAGE_EXPIRED = 419 # .................... https://http.dev/419 + TOO_MANY_REQUESTS = 429 # ............... https://http.dev/429 + UNAVAILABLE_FOR_LEGAL_REASONS = 451 # ... https://http.dev/451 + INVALID_TOKEN = 498 # ................... https://http.dev/498 + CLIENT_CLOSED_REQUEST = 499 # ........... https://http.dev/499 + + # 5XX - Server Errors: + INTERNAL_SERVER_ERROR = 500 # ........... https://http.dev/500 + NOT_IMPLEMENTED = 501 # ................. https://http.dev/501 + BAD_GATEWAY = 502 # ..................... https://http.dev/502 + SERVICE_UNAVAILABLE = 503 # ............. https://http.dev/503 + GATEWAY_TIMEOUT = 504 # ................. https://http.dev/504 + HTTP_VERSION_NOT_SUPPORTED = 505 # ...... https://http.dev/505 + VARIANT_ALSO_NEGOTIATES = 506 # ......... https://http.dev/506 + INSUFFICIENT_STORAGE = 507 # ............ https://http.dev/507 + LOOP_DETECTED = 508 # ................... https://http.dev/508 + BANDWIDTH_LIMIT_EXCEEDED = 509 # ........ https://http.dev/509 + WEB_SERVER_DOWN = 521 # ................. https://http.dev/521 + ORIGIN_IS_UNREACHABLE = 523 # ........... https://http.dev/523 + SERVICE_IS_OVERLOADED = 529 # ........... https://http.dev/529 + NETWORK_READ_TIMEOUT_ERROR = 598 # ...... https://http.dev/598 + NETWORK_CONNECT_TIMEOUT_ERROR = 599 # ... https://http.dev/599 + + +# --------------------------------------------------------------------------------------------------------------------- + + +@unique +class StatusCodes(Enum): + + """ + To be used internally within the context of your service. Customize these to match your service. + The format is: (SUCCESS_INDICATOR, INTERNAL_NUMERIC_CODE, HTTP_CODE) + Example: (True, 1, 200) + """ + + # Legacy Codes: + OK = (True, 1, HttpCodes.SUCCESS.value) + FAILED = (False, 0, HttpCodes.INTERNAL_SERVER_ERROR.value) + PARTIAL_SUCCESS = (True, 2, HttpCodes.PARTIAL_CONTENT.value) + PARTIAL_FAILURE = (False, 3, HttpCodes.PARTIAL_CONTENT.value) + + # Authentication Codes: + LOGGED_IN_SUCCESSFULLY = (True, 200, HttpCodes.SUCCESS.value) + LOGIN_FAILED = (False, 201, HttpCodes.UNAUTHORIZED.value) + INVALID_SESSION_TOKEN = (False, 202, HttpCodes.UNAUTHORIZED.value) + AUTHENTICATION_DETAILS_INCOMPLETE = (False, 203, HttpCodes.BAD_REQUEST.value) + + # Authorization Codes: + AUTHORIZED_SUCCESSFULLY = (True, 300, HttpCodes.SUCCESS.value) + NOT_ALLOWED = (False, 301, HttpCodes.FORBIDDEN.value) + AUTHORIZATION_DETAILS_INCOMPLETE = (False, 302, HttpCodes.BAD_REQUEST.value) + AUTHORIZATION_FAILED = (False, 303, HttpCodes.UNAUTHORIZED.value) + + # General failures: + DOWN_FOR_MAINTENANCE = (False, 800, HttpCodes.SERVICE_UNAVAILABLE.value) + UNKNOWN_ERROR = (False, 801, HttpCodes.INTERNAL_SERVER_ERROR.value) + DATA_INCOMPLETE = (False, 802, HttpCodes.BAD_REQUEST.value) + HEADERS_INCOMPLETE = (False, 803, HttpCodes.BAD_REQUEST.value) + FILES_MISSING = (False, 804, HttpCodes.BAD_REQUEST.value) + CLIENT_CLOSED_REQUEST = (False, 805, HttpCodes.CLIENT_CLOSED_REQUEST.value) + + # Validation failure: + DATA_VALIDATION_FAILURE = (False, 900, HttpCodes.BAD_REQUEST.value) + RATE_LIMIT_EXCEEDED = (False, 901, HttpCodes.TOO_MANY_REQUESTS.value) diff --git a/api/log.py b/api/log.py new file mode 100644 index 0000000..49ccd77 --- /dev/null +++ b/api/log.py @@ -0,0 +1,139 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 12th Sept., 2024 + + OBJECTIVE: + + To have a structure to the response sent from the API calls. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# System-level activities: +import distro +import socket +import platform + +# For data-modelling: +from pydantic import BaseModel, Field +from typing import Any, Optional, List, Literal + +# To work with date and time: +import datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# Info for logging that will stay constant during runtime: +SERVER_HOSTNAME = str(socket.gethostname()) +PLATFORM_INFO = platform.uname() +HOST_OS = str(distro.name(True)) +HOST_CPU = f"{PLATFORM_INFO.processor} ({PLATFORM_INFO.machine})" + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class APILogModel(BaseModel): + + # To identify the machine the code is running on. + # DO NOT MODIFY THESE: + hostname: str = SERVER_HOSTNAME + os: str = HOST_OS + cpu: str = HOST_CPU + # Can modify these: + pid: Optional[Any] = None + ppid: Optional[Any] = None + + # To identify the project and actions: + project: Optional[str] = None + log: str + operation: str + apiVer: Optional[str] = None + logId: Optional[str] = None + logChain: Optional[str] = None + + # Timing metrics: + ts: datetime.datetime + tat: float + cpuTime: float + + # To understand the request that came in: + sessionInfo: Optional[Any] = None + method: Optional[str] = None + url: Optional[str] = None + route: Optional[str] = None + headers: Optional[Any] = None + data: Optional[Any] = None + files: Optional[Any] = None + + # To understand the output that went out: + exception: Optional[Any] = None + response: Optional[Any] = None + httpCode: Optional[int] = None + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + my_log = APILogModel( + log = "internal" + ) + + print(my_log) diff --git a/api/response.py b/api/response.py new file mode 100644 index 0000000..7783cfe --- /dev/null +++ b/api/response.py @@ -0,0 +1,133 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 12th Sept., 2024 + + OBJECTIVE: + + To have a structure to the response sent from the API calls. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# For data-modelling: +from pydantic import BaseModel +from typing import Any, Optional, List + +# My utils: +from utils_v2.api.codes import StatusCodes, HttpCodes + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class ResponseModel(BaseModel): + + """ + A model for how the response should be when developing API endpoints. + """ + + # The fields that you want in your response: + status_code: StatusCodes + message: Optional[str | List] = None + data: Optional[Any] = None + seconds: Optional[float | int] = None + log_id: Optional[str] = None + http_code: Optional[HttpCodes] = None + api_version: Optional[str] = None + + def for_quart(self): + + """ + Call this when you are using either Flask or Quart as your framework. + :return: The output as expected by Flask and Quart. + """ + + # Figure out the HTTP code: + response_http_code = self.http_code.value if self.http_code is not None else self.status_code.value[2] + + # Construct the basic structure: + response_dict = { + "status": 1 if self.status_code.value[0] else 0, + "code": response_http_code, + "message": self.message or self.status_code.name.replace("_", " ").lower(), + "data": self.data, + "apiVer": self.api_version + } + + # Now add the additional fields: + if self.seconds is not None: response_dict["seconds"] = self.seconds + if self.log_id is not None: response_dict["logId"] = self.log_id + + # Done here: + return response_dict, response_http_code + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + my_response = ResponseModel( + status_code = StatusCodes.RATE_LIMIT_EXCEEDED + ) + my_response.log_id = "abc123" + + print(my_response.for_quart()) diff --git a/cache/__init__.py b/cache/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cache/__pycache__/__init__.cpython-310.pyc b/cache/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2d8ffcd968ba60742d96e96d273aaa1ec78c67ec GIT binary patch literal 164 zcmd1j<>g`k0+q$t=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vVKO;XkRX-)Q zEHx*;Ahk$8pfWilu_!m7C_gJTxujS>u^=-(Gp{7IC@(QbzqBMXr#QaMNIy9-IU`j+ g9w?Jp5+AQuPcJJ=#`Q(QrT9ze$ZTn*_k4=%HtVlK^Xr+}UTeg=nB-)CJ7?b97lhf49 z^tif56bD1EyfW54tQXj95(J5XP@BEzl1qSmAV9K#1LU%QK_3DH$sxW4Fmmz6oBV!N z-90@sq+>7kkN_ECs%xsNURAw%@73?UD*97X6%C&!|MbTC&tKEDf8mepCx;*B@C|-~ z#L-qXM|X^--ZEBlI`g@v*~+ivW!`KSTE&&3%;%e>R(Yi?^G36>QjzT@RwkT-PSGj7 zudhrx_d8{$g51&W< zeR$5e#?F22%pL8nj$Vvw@>@M*e^b}AO2xwG{2R+JU%9%dez4%xMmK2KP3v{*n(wzA zS8RCd<%{Q+FJ|g3H@YHl?5$aAVIgc-=R3k{&RQpqpE#+iU-|Yc7cVSdesideZ*_!! z({o(QZdJ8s-26J`4HQ(6^8-6=})Y!?K9dzQk zUAeyW+LiM!W{EA$pRZIt#foZ6RXsA<0MGrG>+S{N+N~Ge)$aPbEAHu0epA?;;L}^E zS~u7r{!lKG?`Jdk@qzY%zGiUE-Y;z%eXK_{Xa5J+f}CG&c!A}(bzj(_FRV4Yjt977 z-vA@P1+N{1cDwFc{+bmwz(UEDx?OL0?RBf(w1dDpdY*+>UB?S9;Dvh>4IQiDH=V%R z^1H%v?9gUw;m*lUFRxj)6?9hv_nofW4z0S~Y+4vc%f=#MVc1b%x7=i4u4Aor+x5`% z+iJbi3SPU@4TD+PLbyS<8IsPL8)6t}B>Wa%$xb$cZcBVO#-!fs)pps@(1DMATj#uzZv$i3C^#FlCmdYBdDD*(saV2`~Py29FQ zcy%=b*@2@N*6IeKwd#V&t}R?ArYYR8E82?MVBNxo9a?rb^jmi5k)2y=teFK+?dw?h z^h3EZ@x2e<&mKk+Y9DHM^bhn8j1RQ6oRXP4`nKNJDK$%VR7pQYzI<*Qp|O*@t8M4{xgE1_?Bt!?U7bb(zY8cg!{Sbk?*R_7(nx@OY4~@R&X?^{t`VaNwJ=#q4^Zmky zx>NWlr%HA0E!nDCTpHs5wdESVpY2Doj)A{za>hS0-hr;%(**7CJtH#ajz@Y;{*uY( zug^F9mOJmbH{GV+amD=WTlI!5TCWR#!>xzGyxs9?UKvADt6xpd_RMYIPP#h_q7 z?DKp#Ts!vsGR($4VS9mFb8pq%4)y6?F3R0-x1#(_yV-T4f)dv1WK^ov+EBq-Ey@L< zh>8t6Xf(amr~pHK;x|r3g>DCG%@*yt@8Icp>uwN6g;hInPo0d)tEWz;uORKHl3RB} zP;HBql59iEM;TH$>!@8O4&3+v=3+l~1L(JkK zj;Z{!%ySU;bX6_~P)^s%#;c%!q+rbG=KZ~gzNAArgKAEsG{pj`Qx?TM6G^+2P&ScSIF-aQCyFx|o3dP=3KL-n69NHC1*cD3IU11$2{3rTV z?hZy~cPOFlWWU%ijqMI-{bjp@;2f3yNhO>Z{z-Kd`;hzrGu%mfuPWt~7^&8B0R)|3 zV4YK|Fev&G3oZ_T;<6x~69|>5hjl^`34h<$zx0& zXYvG+YB@3kx49;sWXU&?L}fKI@(dDK+;XZ0(%>m`C;1{7L4){1 zd;^ZixLq+VbJ*lQtW56dUy()9`ieOahY3D~hZ@Ck=HviqEPsISz}z10J@wT(ODykz z?7;G#PCAJ0+lAPB>@YUMkBH~-YX~smx0c8E9KONNkht244$m!C4JQYLu0g1o=0DD@ zpbB+iQEC_nDdl7BkP&Y zQRivYyU($pE_2bo5sNlt6=)#{VJ_hN8O;N2!W}@#d-@Wfh)J-6r+zD=R$RTPbf#&y zRvr87U$P}hl(gRAk*=UOs?wf)ibb>(zsckble0{ukPamE9LoNR<>!%%QOcoEj-JEn zYa9Fm-+oMBXe?EYNEear0UVm}&YF?wwe0mhyZLL-2soK(XpmIDC?9q^O*bkM@->0U z$g$*;<=$W>Rb95+vy;C?^WEo?ti%wl%dEZ^U;b`SS`>207aAn4s-quaY8-*Z2XAsq z;zc&Thy-Bh73TNqiGb(`U*-z5;EiI}wgQj8 zlnX_7P5QR6o2L9)dbr9JLw$I!ZTMX`;jqHf4YxY*otxebdU|wD*P6b~=PJVjvuTfj z)j%I8cRY9tvuF|U0ep;<^rdhF)?zhnlDMHhf)dglt|=l4i@>Ffi>)`VzGkh#pHGVD z==y3J3UhGEF|`gxQLFo1dMYuf>9$tkmcmCC^w2S^wDpk33g;fN6gcppO)7l4?Vu~b zx^ygK{W%O`ELzta*b-eaYhjpeKb&Q#Af*;G{7rcOjCPQ2%MAh>?nUa+TZl@CaCg$R zj&Rq!TWTsQZ-wqHIZ8=ahI|-881G;}aY;}Cm!abYMI)N_+Vy7FaWDAb)GazOhifA? zsaC5uJ;+e>==hr~o1c4tjussmuZaj5*EK4_ z(Ihsl=EX@?JupThnj9KoUNR?|l#iIDBgT_HqSyAqTI~~%3?`8jW(qq0rgMk%af_W) z-_y>0me|=HUFs_Qa%sP-hIo^shO@~@z@%^zqr;h0Z)zLMi505O}F4^c@&f zC-*)KD?u{?B7n@Hz5yerpzmo7Ar%Fl8B)n3q*8DIl;e;J!LupBGeasBz9Gma%(edp z!kt=`mt2H6;mgzV!OgZ-w=6o{QlX(G^w6a}QqDRIl+t*_BdiMu5h6s@4cxVElj^@7 z(*h}|4K17Wh(LDELf9_}#?kyJpP!nHcq95@#7{-?{BDS_o_qt#6Tcd$W^A`Ou0`v7 zd&_F4_DYUbx?j?o_}!+XEHQ?LK@N?OggLI14>4Ue%~8tnjq!)I%9j%~CSRf8|_gUk*;r z=%t(r03qx%hAWc>bxu6_Fi#dsHq#wKP+dhjOA;6AXAo#d2|+wd;C-F}n3p)?$61`Q z>|3_uSak$<5uBEhahT$pu7H)6+iU|{Kd?vJ-Hg|NuJORrdAq~Dt`hrUc&_NYaL!7f-zPz-&XtB=I zcv+oGLWW~K0Mh_r#Ivk1LI?FCMo{xk2OleiD$nfp8E(lDVGMSPwNxXiA*m|UzEHQ) zBc3^H8OIuNk5c_W0=5f~Y?d%BMrnXwAs`8%7;y>h*Vts>caKeG8MegZY+z&JlM>81 z=?_s^buD zF^L;Yq%Su#mhr_H8Oy$8EOghbaey>5nP9gXLtO+_Qvs-Qsx_j?p|zNBXt1j?FH6ai zXliKE|A``LQ)gy?k;V|hP~9PH!sTHHpOC=INZ!+Xl~CJ(%d=tJm5$GK>DriDXl^~B zYumc6^(Olokb%Sm*Kr8q7~A^0FjG90Wo}d7)T(Chk5iFb_Hhgc+X3aUd8~)yv9{k0 zD4~gS5hK+^?v!&BxB}wOGWZMF^Sz(}9UZjVMI4t!7h1EHRC1kJ%WXn|F5!qHBd5zt zm#T#*Pc#ukC7$Wkx}quG00+cXBvJWda+)Dg;yoi?q4bbrbc2JxEhlpTvJo5t3FEd= zG<8!i{8u42ZB+DWy>#37W$%Ge>5bd%y)3^amxVimqjz=jOmBjDqFJ0n=`Uj=#u9<~ zSR!MqnpvV;W{Gg%h9!a@?Z_OLh;6V;&2*VAG=0Jus{LSLVndK!kS}3-(5=_uR{^-~ z&iAED%MfVhx@k^-kucRXdk>DX zbhwTOON*1+F>c&c^M-rAgDk@tX7m^@{$WRHtdv)O(MOuKgGt zK~G4=bBBUI48Nz=ZwEgp3_IFjk$bZ^XvUGkh5;`JqJSgjJUpI4zaUld;eLT{;X}z# zP+t#={oEZrENzq#K*~GD$5>G5SLN>V&=|_PUF;XH12scgD_d6}G9}p4edu+fUy?qS zDPH^@6k3W(>D?0H9)t!tX;lmM?}H_&bX>D@QttQX6gq1%wL*0^NY$Cg%US0L}93RU-a%9)j5oOX~?_bk?@x**RxO?eFve3 zyS!&XIWm8@oD=9nr06a{%@4wRS4Fl(3h ztkxKAMRd5^&P;Jh`shm9DXkD+DgG37CG?LmM+_QGNDLNx?>>tMQeVtSy_EH0JiExG zxe(uD_1y%Viq)ckKZ*p8SbJ`AL#^1Oi`W1Gc+ zF?mJ^O+4Tjlu8G3C(V9t>mWszJ+}T3Ru6Z^+^l)~Unsq)u*EoDO>ZxgyL<_;=TxR} zUq~_|BRVQFEu_JeF5fd)xLsxC`*`tv$_gbFvQnn3?2lz6HhPCfjb7Yek3`vS2wl+Q zO$Fxn@MBD1o*EMvq6~cpz`bwW<>fRQ#R7zAwx17X;VFc`svn*`e}~|$)q;wB5thE2k9!Q zPTpo{sldkZjHMcp=j=V2xRZb%>^QAyX)#)PBxX{HA&oB zwd)M%;zC9`w>TI!27sO(T-U4;l@D-O!i_{(t!q4#%7m@tZBOzgsfoL(G0O)15~j&p zxQcnaHiT&*HUtyTvm0FZl}l=?b41>6?cmle*JqsNxXTI%!|SbUgC63U{rb1B)Bs?L zO&%bGu>`~+uw)^v>oHhOHXx$lP#!RBLe#8H#2D5kgyoC|h;Nfyakqnm1kQIbp`~gm zYe|$C6TQ{N>Q;P*(G|C$#u@Wc%Ir+k{|p}6XE!0p&K9mkLLpoyDkJ(@lk2gY{lR@h zO5Y#R0;vlw(^IfO#zEa8=*mK``$w&iY>DIlC5+&b;9(D-C_NtF&r7)TeF^Vqq7d^q zC}C$*snuG(({1u9=47q*PSQZ&vU~T!}qlzcOUGO;q?o6if=QKxl7FLa(MvP zL}egW-kkV*G?qthf^mW|vW(tKVy}|eYfQewWLL5(-Y3ca1DDu9%^6+%7>_!>>4)V6 z8lT`BsK8H%U4UnHxO$M=W>A6`-}3NDaU~(l^Exti06=8^r^QFfg=Ki6P8sJkhOQx3 z2?4V2=={G6*5;{Ab!w^iEgAm8{}?Pf^^=bM!pVgfPS>A5`JBCa%0B(v@r8xw>L*s8 zKfd6+a8A~obG$I9)0uJSy!QO@PaTYs!o`7#x0vvdk;0JuoI{Nc3I;LF-jkK8^xHLD(sinW^K*P%^Qic>bjoSq*QWfmO5}R%YZ(wbqGp=I?9rl?Wi8|3YeO?bRY-w<-nqx=(aQJC8sH8 vSURH={wy^jcnXQBO self.__ping_counter: + try: + await self.__client.ping() + self.__requests_since_last_ping = 0 + return True + except Exception as exception: + self.__printer(exception) + return await self.connect() + else: + self.__requests_since_last_ping += 1 + return True + + async def set(self, key, value, expiry: float = 120, raise_exception = False): + + """ + Saves some value to the cache. + :param key: The key with which the data will be stored and retrieved. + :param value: The value to store. + :param expiry: The time in seconds after which the data will expire. Must be a positive number. + :param raise_exception: If you want to raise an exception if the process fails. + :return: True if cached, else False. + """ + + await self.ensure_connection() + + try: + + # We handle conversion for unsupported Pythonic datatypes: + original_type = type(value).__name__ + converter = self.__set_converters.get(original_type) + if converter is not None: value = converter(value) + + # Here we actually try to store the data: + response = await self.__client.setex( + key, + int(expiry), + json.to_string({ + "value": value, + "type": original_type + }, indent = 0, no_space = False) + ) + return response + + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return False + + async def get(self, key, raise_exception = False, on_fail = None): + + """ + Retrieve the cached value. + :param key: The key with which the data was saved. + :param raise_exception: If you want to raise an exception if the process fails. + :param on_fail: What to return if the process fails due to an exception. + :return: The retrieved data or null if not found. + """ + + await self.ensure_connection() + + try: + data = await self.__client.get(key) + data = data.decode("utf-8") + data = json.from_string(data) + converter = self.__get_converters.get(data["type"]) + if converter is not None: return converter(data["value"]) + return data["value"] + + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return on_fail + + async def delete(self, key, raise_exception = False): + + """ + Prematurely delete the value from the cache before it expires. + :param key: The key with which the data was saved. + :param raise_exception: If you want to raise an exception if the process fails. + :return: True if deleted, else False. + """ + + await self.ensure_connection() + + try: + response = await self.__client.delete(key) + return True if response else False + + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return False + + async def count(self, key, value: int = 1, expiry: float = None, raise_exception = False): + + """ + To use simple counters. If the counter (identified by the 'key') exists, it will be incremented, else the + counter will be created and the value will be incremented from 0. + :param key: The name of the counter. + :param value: The amount to increment the value by. Send negative values to count backwards. + :param expiry: The time (in seconds) in which the counter expires. Starts from the time the counter is created. + This value has to be an integer. If a float is passed, the value will be rounded off. + :param raise_exception: If you want to raise an exception if the process fails. + :return: The latest value of the counter. Will be null if something went wrong and the exception was suppressed. + """ + + await self.ensure_connection() + + try: + + already_existed = await self.__client.exists(key) + new_value = await self.__client.incrby(key, value) + if expiry and not already_existed: await self.__client.expire(key, int(expiry)) + return new_value + + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return None + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + + def set_complex(x): + return {"r": x.real, "i": x.imag} + + def get_complex(x): + return complex(x["r"], x["i"]) + + async def main(): + + my_cache = AsyncRedisCache( + connection_string = r"redis://:dc4da94197c843ab6a730113c2b801d9@redis.ditscentre.in/0", + ping_counter = 100, + debug = False + ) + + my_cache.add_converter( + type_name = type(2j).__name__, + set_converter_func = set_complex, + get_converter_func = get_complex + ) + + value = await my_cache.get(key = "6b61afd0-b066-4611-9791-411a30d34624") + print("GET:", value) + print("TYP:", type(value), end = "\n\n") + + # success = await my_cache.set( + # key = "name", + # value = {"first": "John", "last": "Doe"}, + # expiry = 10 + # ) + # print("SET:", success, end = "\n\n") + # + # value = await my_cache.get(key = "name") + # print("GET:", value) + # print("TYP:", type(value), end = "\n\n") + # + # success = await my_cache.delete(key = "name") + # print("DEL:", success, end = "\n\n") + # + # value = await my_cache.get(key = "cnt") + # print("GET:", value) + # print("TYP:", type(value), end = "\n\n") + # + # await my_cache.delete(key = "cnt") + # for _ in range(50): + # await asyncio.sleep(1.0) + # counter = await my_cache.count(key = "cnt", value = 1, expiry = 10) + # print("COUNTER:", counter) + + asyncio.run(main()) diff --git a/cache/async_redis_cache_v2.py b/cache/async_redis_cache_v2.py new file mode 100644 index 0000000..0192dae --- /dev/null +++ b/cache/async_redis_cache_v2.py @@ -0,0 +1,568 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Saturday, 26th Oct., 2024 + + OBJECTIVE: + + To provide an easy way to cache data for fast access. This version has the change that it can handle custom + serializers by way of dependency injection. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To use redis: +import redis.asyncio as redis + +# Other utils: +from utils_v2.string import json +from utils_v2.serialization.pickle_serializer import PickleSerializer + +# For debugging: +from icecream import IceCreamDebugger + +# To make a decorator: +from functools import wraps + +# For hashing and shortening the hash: +import hashlib +import base64 + +# To work with datatypes: +from typing import List, Any + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** WRAPPERS *** +# ***** **** +# ***************************************************************************************************************** + + +def cache_it(cache = None, expiry = 120): + + """ + This decorator factory takes an instance of the async caching class 'AsyncRedisCache' and holds your data there. + If a subsequent call is made to the same decorated function with the same inputs, the result is fetched from the + cache instead of going through the whole function again. + :param cache: The instance of 'AsyncRedisCache'. + :param expiry: The time in seconds after which the cached data must be cleared. + :return: The decorator that automatically caches your data. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # We first use the name of the function and the inputs given to it to generate a key for Redis with the + # simple hashing and shortening by way of base64 strings: + inputs_given = func.__name__ + str([_ for _ in args]) + str(kwargs) + sha256_hash = hashlib.sha256() + sha256_hash.update(inputs_given.encode("utf-8")) + hashed_key = sha256_hash.digest() + base64_key = base64.b64encode(hashed_key).decode("utf-8") + + # Now we check if we have the value in cache: + try: response = await cache.get(base64_key, raise_exception = True) + + # If the key doesn't exist, we pass through the function and store the results. + except: + response = await func(*args, **kwargs) + await cache.set(key = base64_key, value = response, expiry = expiry) + + # Return the response from the wrapped function. + return response + + return wrapper + + return decorator + + +# --------------------------------------------------------------------------------------------------------------------- + + +def cache_class_methods(attr_name, expiry = 120): + + """ + This decorator factory takes an instance of the async caching class 'AsyncRedisCache' and holds your data there. + If a subsequent call is made to the same decorated function with the same inputs, the result is fetched from the + cache instead of going through the whole function again. + :param attr_name: The name of the variable that has an instance of "AsyncRedisCache". + :param expiry: The time in seconds after which the cached data must be cleared. + :return: The decorator that automatically caches your data. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(self, *args, **kwargs): + + # Get the cache object first: + cache_obj = getattr(self, attr_name) + + # We first use the name of the function and the inputs given to it to generate a key for Redis with the + # simple hashing and shortening by way of base64 strings: + inputs_given = func.__name__ + str([_ for _ in args]) + str(kwargs) + sha256_hash = hashlib.sha256() + sha256_hash.update(inputs_given.encode("utf-8")) + hashed_key = sha256_hash.digest() + base64_key = base64.b64encode(hashed_key).decode("utf-8") + + # Now we check if we have the value in cache: + try: response = await cache_obj.get(base64_key, raise_exception = True) + + # If the key doesn't exist, we pass through the function and store the results. + except: + response = await func(self, *args, **kwargs) + await cache_obj.set(key = base64_key, value = response, expiry = expiry) + + # Return the response from the wrapped function. + return response + + return wrapper + + return decorator + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncRedisCache: + + def __init__( + self, + connection_string, + serializer = None, + ping_counter = 1_000, + debug = False, + debug_prefix = "R-Cache | " + ): + + """ + Implements a simple cache in Redis which holds and returns all native datatypes like ints, floats, bools, + strings, dicts, lists, sets, and tuples :) + :param connection_string: The connection URL for connecting to Redis. + :param serializer: The serializer to use. + :param ping_counter: The number of requests to Redis after which you want to ping to ensure connection. + :param debug: Whether, or not, you want to show debugging messages from the start. + :param debug_prefix: The prefix text to show with the debugging messages. + """ + + # Note down the configuration: + self.__client = None + self.__serializer = serializer or PickleSerializer() + self.__ping_counter = ping_counter + self.__requests_since_last_ping = 0 + self.__connection_string = connection_string + + # For debugging: + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + @staticmethod + def make_key(*args, **kwargs) -> str: + + """ + Generates a key by hashing the args and kwargs sent to it. Can be useful to generate a predictable key. If the + inputs stay the same, the output stays the same. + :param args: Any number of args that you would like to use to generate the key. + :param kwargs: Any number of kwargs that you would like to use to generate the key. + :return: A string that can be used as a key to store values on Redis. + """ + + # Take everything into one plain text string: + plain_text = "".join(str(a) for a in args) + plain_text += json.to_string(kwargs, no_space = True) + + # Hash the plain text value, and create a key from it: + sha256_hash = hashlib.sha256() + sha256_hash.update(plain_text.encode("utf-8")) + hashed_key = sha256_hash.digest() + base64_key = base64.b64encode(hashed_key).decode("utf-8") + + # Done here: + return base64_key + + async def connect(self) -> bool: + + """ + To make an asynchronous connection request to the Redis server to establish a connection. + :return: True if connected, else False. + """ + + try: + self.__client = redis.from_url( + self.__connection_string + ) + return True + + except Exception as exception: + self.__printer(exception) + return False + + async def disconnect(self) -> bool: + + """ + Close the connection to the Redis server. + :return: True if successful, else False. + """ + + if self.__client is not None: + try: await self.__client.close() + except Exception as exception: + self.__printer(exception) + return False + return True + return True + + async def ensure_connection(self) -> bool: + + """ + To ensure that we are connected. We keep pinging the Redis server every once in a while even when connected. + :return: True if connected, else False. + """ + + # If we are not connected, we try to establish a connection: + if self.__client is None: return await self.connect() + + # Else we check if we are connected. If not, we try to connect. + # But we check only once in a while. In the meantime, we assume that we are connected. + elif self.__requests_since_last_ping > self.__ping_counter: + try: + await self.__client.ping() + self.__requests_since_last_ping = 0 + return True + except Exception as exception: + self.__printer(exception) + return await self.connect() + else: + self.__requests_since_last_ping += 1 + return True + + async def list_keys( + self, + match: str = "*", + raise_exception: bool = False + ) -> List[str] | None: + + """ + To get a list of all the keys that match the pattern. + :param match: To match a glob-style pattern. THIS IS NOT FULL-FLEDGED REGEX. + :param raise_exception: If you want to raise an exception if the process fails. + :return: The list of keys if successful, else None. + """ + + # Standard connectivity check: + await self.ensure_connection() + + # Start with an empty list: + keys_list = [] + + try: + + # Start at the beginning, + # and break out of the loop if the pointer returns to zero: + pointer = 0 + while True: + pointer, keys = await self.__client.scan(pointer, match = match) + keys_list = keys_list + [k.decode("utf-8") for k in keys] + if pointer == 0: break + + # Done here: + return list(set(keys_list)) if keys_list else None + + # If an exception occurs in th eprocess: + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return None + + async def ttl( + self, + key: str | bytes, + raise_exception: bool = False + ) -> int | float | None: + + """ + To get the no. of seconds till the expiry of some key. + :param key: The key to check the expiry of. + :param raise_exception: + :return: -1 if the key is persistent (i.e., no expiry time set), -2 if the key does not exist, or the time left + in seconds if the key exists and is not persistent. If something goes wrong, you will get a null value. + """ + + # Standard connectivity check: + await self.ensure_connection() + + # Start by assuming failure: + ttl = None + + try: + + # Get the TTL of the key in ms, + # convert it to seconds and return the value: + ttl_ms = await self.__client.pttl(key) + if ttl_ms >= 0: ttl = ttl_ms / 1_000 + return ttl + + # If an exception occurs in th eprocess: + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return None + + async def set( + self, + key: str | bytes, + value: Any, + expiry: float = None, + raise_exception: bool = False + ) -> bool: + + """ + Saves some value to the cache. If an expiry is specified, the data will be deleted after that many seconds. + :param key: The key with which the data will be stored and retrieved. + :param value: The value to store. + :param expiry: The time in seconds after which the data will expire. Must be a positive number. + :param raise_exception: If you want to raise an exception if the process fails. + :return: True if cached, else False. + """ + + # Standard connectivity check: + await self.ensure_connection() + + try: + + # Here we actually try to set the data: + data = self.__serializer.serialize(value) + if expiry: response = await self.__client.setex(key, int(expiry), data) + else: response = await self.__client.set(key, data) + return response + + # If an exception occurs in th eprocess: + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return False + + async def get( + self, + key: str | bytes, + raise_exception: bool = False, + on_fail: Any = None + ) -> Any: + + """ + Retrieve the cached value. + :param key: The key with which the data was saved. + :param raise_exception: If you want to raise an exception if the process fails. + :param on_fail: What to return if the process fails due to an exception. + :return: The retrieved data or null if not found. + """ + + # Standard connectivity check: + await self.ensure_connection() + + try: + + # Here we try to fetch the data: + data = await self.__client.get(key) + data = self.__serializer.deserialize(data) + return data + + # If an exception occurs in th eprocess: + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return on_fail + + async def delete( + self, + key: str | bytes, + raise_exception: bool = False + ) -> bool: + + """ + Prematurely delete the value from the cache before it expires. + :param key: The key with which the data was saved. + :param raise_exception: If you want to raise an exception if the process fails. + :return: True if deleted, else False. + """ + + # Standard connectivity check: + await self.ensure_connection() + + try: + + # Try to manually delete the key before expiry: + response = await self.__client.delete(key) + return True if response else False + + # If an exception occurs in th eprocess: + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return False + + async def count( + self, + key: str | bytes, + value: int = 1, + expiry: float = None, + raise_exception: bool = False + ) -> int | None: + + """ + To use simple counters. If the counter (identified by the 'key') exists, it will be incremented, else the + counter will be created and the value will be incremented from 0. + :param key: The name of the counter. + :param value: The amount to increment the value by. Send negative values to count backwards. + :param expiry: The time (in seconds) in which the counter expires. Starts from the time the counter is created. + This value has to be an integer. If a float is passed, the value will be rounded off. + :param raise_exception: If you want to raise an exception if the process fails. + :return: The latest value of the counter. Will be null if something went wrong and the exception was suppressed. + """ + + # Standard connectivity check: + await self.ensure_connection() + + try: + + # check if the key already exists, + # regardless of that, increment the counter: + already_existed = await self.__client.exists(key) + new_value = await self.__client.incrby(key, value) + + # If the key didn't already exist, specify the expiry: + if expiry and not already_existed: await self.__client.expire(key, int(expiry)) + + # Done here: + return new_value + + # If an exception occurs in th eprocess: + except Exception as exception: + self.__printer(exception) + if raise_exception: raise + else: return None + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + from utils_v2.string import json + + async def main(): + + my_cache = AsyncRedisCache( + connection_string = str(input("Paste your conn. str.: ")), + ping_counter = 100, + debug = True + ) + print("Connecting.") + connected = await my_cache.connect() + print("Success:", connected) + + # Proceed only if we connected to the database successfully: + if connected: + + existing_keys = await my_cache.list_keys() + print(f"KEYS ({len(existing_keys)}):", json.to_string(existing_keys, default = str)) + + key = str(input("Paste a key to check its TTL: ")) + key_ttl = await my_cache.ttl(key = key) + print(f"KEY '{key}' has {key_ttl} seconds of TTL.") + + value = await my_cache.get(key = str(input("Paste a key to get: "))) + print("GET:", json.to_string(value, default = str) if isinstance(value, (dict, list)) else value) + print("TYP:", type(value), end = "\n\n") + + success = await my_cache.set( + key = "name", + value = {"first": "John", "last": "Doe"}, + expiry = 10 + ) + print("SET:", success, end = "\n\n") + + value = await my_cache.get(key = "name") + print("GET:", value) + print("TYP:", type(value), end = "\n\n") + + success = await my_cache.delete(key = "name") + print("DEL:", success, end = "\n\n") + + print("Starting count test.") + await my_cache.delete(key = "cnt") + for _ in range(5): + print("Step:", _) + await asyncio.sleep(1.0) + counter = await my_cache.count(key = "cnt", value = 1, expiry = 10) + print("COUNTER:", counter) + + asyncio.run(main()) diff --git a/database/__init__.py b/database/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/database/__pycache__/__init__.cpython-310.pyc b/database/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..691f7773c6734efa586000506d10f1bbfa7c2a54 GIT binary patch literal 167 zcmd1j<>g`k0+q$t=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vDKO;XkRX-)Q zEHx*;Ahk$8pfWilu_!m7C_gJTxujS>u^=-(Gp{7IC@(QbzqBMXr#QaMNIxa9Brz$m jI8{F$D4AIjAFo$Xd5gm)H$SB`C)EyQM==wSU||3N=$0uN literal 0 HcmV?d00001 diff --git a/database/__pycache__/async_mongo_v2.cpython-310.pyc b/database/__pycache__/async_mongo_v2.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68822b3136c7af18f07abad602c5fc1b06c7d208 GIT binary patch literal 40213 zcmeHw3veCRdEVWq39l4X%&9r&ARO7g2+BE67b<(EOxbaM%vD-Pa=bSy~f1Uqzx?8r?3;4O_<+F1?|3abgHJ+q@ES$U# zzy2Sha0}A~*Kp0YF>QFpf_bj!7N0kaLU?TPSngZXmi#SEm+-gLE-zN5D~r|Xs@yNP zYm4>ix*S*9LyN=H!;4#{x5#<5J+ioUdTUtE==7-6vu%1C{?^*t7k5nWFbek;+`2pT zOu-#`+MM2rvtf4&&bD|vpDs>cgYyx0E6%ri*Wi4Yx7!^(YpO?4!?yOG#cQXpMeW<& z9nTb|_j;vs*Li!NE=bSKGX)pF<2#)*Mxjuz+xR*B(A0gWP9M@Iyzu_{Wq;mj+Yj1j zy4{ZJsfCuldGzqqvD9;?RBNu)aoUIMsb$Z1oz(;O?LXL?w@=E^ZMVNes%MQSyKZZ? z<+-UR-+m{aJmW3(Ch!)Ym4{E=bN{g;Qzt%Mq(V^Pci-r`@(4f3?#@Tb;S?(R*yC*=s%4>aF7Cr6sT9Pv{m-A3J{R^s&h!$Ihg_ z*Kl7Hyn!NqQ`t0t7^xV?GL?Kb_1R`;OSIq3JCnYMQ@9Enp8Pd;$!@X>T7 zlLrsi>j1DqVKOi#*35~CaWmL{n4LOt>LhDD(r%&u!JhQBdsWLle&(L#=2@>dZUog+ zGYej`cf!THC3kso$q!2HuH*W+XD#^M4*rgwXnIG`!NsHA%<|lvrJK z?px$+6lXWNZh3+4FKtZU_?erX7nD%_aLq@nEFYX||VL z??|`P^B(Vw4+oV-Q$s+p;m!ob#;hOI8~lz&$654(Qe&yBdO;O8^@Z(?X1CJ;IJCN* zhTl`I&Rj6sSacpwUH60S4VQ4x=yuwx4Ns}A@)f@t6)oYFo~MF}+wuv$|hdEv^F`z&wQAm1cus-Fo=Z+Xnh_zM$TQ-duR_;Cy${JLr0kdF}3! zrw%^2+MIXP;)AM7i1!aVORa`<7bNB2a-u_;es0sAsBt!NGm5Zvbv-W} zV8LNcHM}L9WZm*7d2<5A+Vy?yW**Bl%#N1v`z8GP&!Tt=cyJETqnFOip0VTTZ*R=Gmaob_5`H0@4%lvxk(|TUMPz_9VDR za(QhFkWvtRJ}tS?om- z4EdgV%u|5M*={gA=k*#<=hSXKw1WkSk=ls@6Dsg?J1_LjWhMNWAICkP_sl2jmAYjb zR`{=e(X8v^>MP~Ss8KgYi=)QcuD-brtI5oA1n4r$`%pJ$c>%MGx!sES2FPQEjQdF0 zK!$}Bn`>W*$Mgt!ZEwEi+fGkr0Gv_v?Cz`$)K;tZ>~cpamfh>x&T_B2==55k*X`A4 zhIk`0b70{exw4D_WJSE&Zp|o1t;WsHb`?g{=gZ#XOYK&()!V$vWU4oT03x$Y+&eh> zdFZqaGQ+a+Ql$0^oD5E%`J`Q4v-^g6;PK;`Q73Nkm*hogRj=^0;DD<2jCC;9Glg|B zJ;OOj$&6AHf9_xQd-j~y@s!i^FybA1tkH7E>{cfhbo}0GI|bW^mK^0QLKq^)I0O+3 zlhn1R)H2Ye%PGJl>3NH)b?uhRdycJn%)8NyYae&ozPzHmrq_b})#{;A_Mp|ljCUY^ zb!X##vae&2>@qfCPZ2)wA2T|;+@_G$u~)mxcE|IiEwGDQ9p7)wp*mM4b+*;^Af&M( z{>1Y(1z32sZ^mSbWKhHhkOS+FCkpC;b1`Q9C^i(`#Jw+aQaH2aI*@2@-^`{S%uHz- zkzOP{(Bv{fAD|Vd)Li?C__H)U!UyB4v@pPt2Rj6KW74$D+QLlt=7C)z_jbBHd&a}~ zrNDkgQK-elX}oE+F_xQ*oo;0evk^{P@*I)io#?m5gghiD>$ks*hh8LSFrOT$mW{P* z`bJ1UwdvrfLwFU#@Qb;_5YfnpJap9?JtR?!7?hAeLcq!!pY!4PkX+{y3DceVZQi>J z#oD&MQE_KpbwqwTcSMK^xB6Hx2>!j1z>#Vx2Rzh!HvR5d|7)9m_pG1$-9q`Qc&i6l zg7j|OSo`Jp`;TbCVZ`O5<(8t>MSky(zPZX7&lY}UxLM0E$&1=ff?oUv>~@OUHv-V@W}(J zwY4|(!Ak$LFOV8FizuQW9+Sw)Fj79{Fk+!%y2f)wQW@t&nsM}xr+g;{GBrra=Y-=) zywF3bKV9D8#epYVPz!W=`q@r*f+OZHVM#8OoTG*j)l6Q0x()JXbAYiPmqp1yjjlKA zEVsid!;`Eiv9tt!k6PIwO&*(0M-#`0t$`xCE$}Ny2B`+p)1CT!4QV9A`fIZvN;aau z600ZOH%vNd;CL~x_^jegsG}_Uq_>e?H$Cq!;Srhlk)gF4`sO|RWKd9qkIcLi&WJTK z?;RY>6*eGLpDR3HI9mANfgd(EtPLz!)y{R}rwZ#PeyyJ>{7kW9tXmsph!&-u`LwBS zSuf$Yc&^y9AexufvA8ANuoepUkCt(-jH{(tQ=dbSFA9>H&beH;5W;}`ku1F6y7k1RjU?L;J=6jB6&S#jvmSJRG8mwPKnr?}Vk)p(k z(~)*lc%JS;3IKF%OJ@(+4>}5PYro%Hov@FdvL{bX*;A(;I&z=Af6)u8i+bxWbG>Z? znwFIhsxUrKp-<_GbyH#Vda6qUX!;Y-IB>>Ck8|h}2P5ecD3RfhSAtTj=Pg35(DEaC z4q(NTShPOg^E$4gE;QK5OAWvtT5Cje2C<2XG8eVflaUY1rL*cjyrfR>P2+4}JQh?s z-b&-Fx7r8z>Lea116urH99To6#vbElW7Mb`Yj5d;`@9ZhxCZfnBu~Iz;eh0>XDk>1 z=IeUY%VOooHROUNtI}QT#yPA-ajnq7UjQ@j7kU-)nqC!aoBeLlwVpvOM{y;-Q^TD* z-I818opW^}74NQ7pHp#yH0Vc~MYrquow1(nFE3FqV)t5$-Wt}I{)Bzlp6hm9@-2w# zbF21Bce(8n0RZk1oXRQ*>n8vgu0Aw%gv1fZB2u^J`mNN=iX^@0_2yA8TZR}2F_EMY zh=3M5tE7k?J7IT4c}TfCY)lK=Y$NLAgndG12FurG@n$ zJ_*nQZI(#$SQ@Of&_hrI=yW>J3gg>ASfx{sIql`a^$9eq%Zo7&iOw`#Ph)q7W0PL& zd$&rhtxf{`nYBV(6?+7N6uyqZ3r8t=FDPPUCI`TdT=oopWtlbyQ21bF!{}jQOpy9< z^HC_!1@Ivq3O4PC8=)}bHP}C}4|C$Sz#=;KVM$QGtKIT@&FCSh!t(I?1Xkomune2RJq&z>);hw(@K z5R20+`uJM?E~2e;`~b0>Y^hu*o1@<@fBQ1KA6GO!r0z#GK{cA5z*<`Etp(Kx-hy&( zO%y6s`F5&j>W&}ZwR)>dUSM%J)ce_Ik|~USHG+enyxeOxdTV_jqdtJ=_V6pXavL71 zLs3{ahRqTDLVakKzh#xy_PzR)WQLzYTg3QW>OQ=m*cH-b*v5usyV#Z7q2`FxAYY z!mt*`OMwMFZzr&5O9{+YH>iYfQ3>sx9k+s7+?~MUVR!+c-~>Z*uhnTlo6$FS!4Rt? z|H8c=h#>LyS{*ZJ4X)o)506(T)et(T$e`2~78IqY)K-?`#&N8O@4+Eg#`p3r+0gh7 zs+y^yZ#1B=hYs3Z#wa#|;YQ=pWv8w0sQrBYRu%_Yh+>JW>tGn_5~#p54Oj2trRtKR z4!pOj-pyz4X7OGYhglqFL0&3AsvhN0f{JoPRkKi^HV*vvp{N#2=m*pP>ffl|P%Yx$ zTh02gVGh>~v!4FtHT-VFwY?*T)Ye2rnI94q{`fzLVU8?GA1llnG=@A=oi5U%%ZE;6%R>hfqbE`Xw^BT^!$u(ZRS&W&+ zbX`9sPu}A0bg#jaLz!#4+}*e~9K8u^7vDeN?s2ch^)2D~t?pj;I-HO2Zg_3Nz23b6 z*S5+V`?bYtdNe$<-8bW&?h(IFELhXq!@IO$8Phv(roVx9EMt1-$AIP2*8q192K9uJ zWGDv5msErBCpsjm1s6aoK)B7%7@q`XplL}g0Ow&6gvjDXvlBjMa!3 z7>eo#K3aGfR1h_npD6QLeY9e%fSfoV#s|bC@Bt8f-=@T&S8%TPIAkNNLmkLI?Y1_W zC3Gnyf5|OP|B`d4D7(;ia>>Vv(jo|X3tKu6Hy+mJd(dEZVO^L4`3z6&)~vi7DLP#e zSL#AL=o!Sqj!z|DH!Z#B<%x1yu&jBHH(?W(N*|tw(C4WGHkQti(GO($Bu`Tr8^54+ ztUhdPTDF{ZU_na_K$?#0FPe?N7A?>~!oG7fbr0>n8YTf;mGCPwFiaX5%S<=oL}aF+ z4a3F!L990PTJ`Brb{aP`Z$}sqOI#wdRJ6!K{YF|$A?+L2VoFfN0wgGjbeW=#0`5PI z$7TR6iU!}bWHP}ohkZsSIZv9JNJJbg_q8k`Qc+OFN^GgyfrTO=#nRX#VPmqyzp=1( zOA5DMt-0~CR>0CS6bz@I4k}=8yb#omMKB?TsPT%%`+5Sq>Z5#pYaav!mGC=*TGVwv zsKxNo{~14qI_}4q`7~ug&pT=r&Ekz%y;;?fmtkHqtYY;^^X0TLH8YycGTw`RYB-3A z$4}#AfOwc2<+c6m#ifxJ)EOa}FexAjsi1|?6tV(g2+XFmZncc{A_-zhS}N-mb(>q> zD1)e!&wy;O6w-1Mqy=6$A!(@!X(_3DV$xE5qRMAMT5u$!rQ-ZvnzYcjA~d$h2*UH^ zHB%L?`=q*rOrg3IT59A6C_|e-GQuN!KMgQG)|OaEjZ;2rEiSb^E|)G{O;<<kB3W;y=J z&>b3gg=$q3x-)C0)_NLS{t6!J#~Y&mv&0*c!97{@*Hf?QO&+xo#GQ(W0I7}Gh=bwu zi|Sckr{}?VO)z&k79ii*V^pzJ{$nmcM{dB z#&%;L1?Z~z%}bzsx@S#N{pcqnFHkBSKzU=Mv^JWS7uJh(sEK3+pm0f0xVZYxlyqQ) z(t)LJj!~G>0iI1s2Sw*y82^|-AL%Z4Xe$OJgzD*NIT%{jpl@kn<%9ck&~S9P_<;$4 z$f6Nv0ACVntMQaVe`F{~?rA*_+6HSKs6w})Uys^TP!OnAsLy71l724I^y_2g;LnP> z6e^b{Kg)9mYQ8d&8DA?O6p0;N5otvybWxFZ7#JSHGwjIFdc~rO4+0srphvTM>=JiG=4=6P}|y09*p;>TmIMQ!eup zxcg5C?4dxpT?>@eet|OOOfZpjYICTkF`ysnVG}E@?MOrY0K^wl5O1wQoe@KPDTer4 zFA4F#mILvQ-GBj|^6BbN%&kBDAfMFdEH18Z1~2s{1g%dwS*;b-6cYo`pHY8!r#W-ulA$DUf9L@1g%{u+8?3P0@I#{Dl-4#SpPnN+Rc8SdA7-71zLlcRSPu}P_Jwt zCMeWQz}FdG)m8Q07}@Gi)cGtB7)K&zm7TBWBO4}Yk^W(NzBXCZe1G8F+164>H?$*C zJS1J)$2~}cu&;aeQmc8EsN8`g1nCv5^^*`VAxMdDlEYA@tim9a8QZPJR_K5NAMuH3 zK^Zmk9Z&@*a&!+vm5!}oKf;{B<(5uO2`*jfQmUhrgC*LmrvDu6Xp}C8pdd1)<-YK3 z{JcOMg`Lpiz@fx+A{>hIAtWPGoQOaR10vj8K86=kRA(q9yprmuzr*6^SbUbnXILa$ z{2WhnG$yo5f})WZ+rUSE0?%Rjw%00-7GXgv!h)9iXI&^)>MvPaGjwTZinYg;HK{a- ze)z31O`?isfF_w6m9;nb(H&47Mqh-iy}DjqfXU^oTGDJ9>eNVO(uM5ZWFOLc6JpgS_36tR6UA(hHS=ux7S~CK=r)r^buFGn z%dThy#6yR^K~9@i=T+z-A(sz)*_A0Le8A&!hGfVl$3r^Ofp9z}*iJulM5sc)g1& z)dZ)9FYYQ^)pEa9G`((3dcHYI=W1(+(iv?Hf)R62I)%EHXlo+WEv-kWn`mnWQP*;A z$w6HqXA$JSx>$Y{dG&JT%0ynQm_ki>#FAy9wj#mPv$G(sS$!zcQ=La~KC@U30iB?u zeu0l9ilTm8RKLjkSwswm!wR&HbW`2YKfr%E=n4h-U?d9$N&Q+WC+g}PabA4^FaHvd@I@L%wIH8n_!Q^H2tEyZ;KfJR;V08;XNh7-;*oC-x-shK{=r0Jd!3oKpGcvb)OU; zMPMcTKAGAO5t3V4noiE6oE$A!SJUEh*p7%CAp;tyH7)P=*+&PSMPvk1fTTRgL)(uI zKC*R!kWh^$Lb#~$24M9nX45R1ine`yLcT~0QyD`Oe060qL?0+3!#@N zJh}ZSO+h{=Yb9acN?rX^Jn#pU95$2Xw?lFm@Nh^=52^lcDm|#rqnYuda|66cVk78P zbh1NqdP8`9I4@V3eK^Q{?tYZ2-WZ3`*F_T4KPIN6+5OH8yANkIMGpq}{XatuS%D$~ zg?{R=DZ~HgsA4N{Rs9MM(!sYAd7atZ_WUGXA6PV)FbC|-@^bL;$ghds7DZ*#XaL?# zuO&RMkD!RNR^JOQ9{FA*mgslHTzt^?qU3x5tF!L~vU6oFrC%3592X08?DMC6F|>3f zimxsD*wuQk6k7Bf(E7DozY5UI<%s_RHx2{#eY$2t*cCsFy~Z$%&zIC`C7s$FAM$)L z2;T#~7=8GV!GO#6#ju=Oz8srXXvZs#S zWL&V8lKIf#2Oh|1n=eai7N)CvqebKIL!^>`vmDos5QIfr^=rhBL|b(UbfTA@+7z9> zh`S!qDRgUs51(0l6<>~2KQ{H{P;`@rNO|!umbN>g$!=i9bvdiE@2>oJWdbx5N|9;= zBqR2Tak(spqj6-#g6=7sn~b4{Vx{~j;UO(JW%VQ)rY;51aV@W+4f&U7=o5r!8wX$z z;tn2}KSo}$hBJ!RP4ytUL!0x8XHa{t>~#I5WhZ*8?nZdWLP^T6B?a7uov z#-4n4Tta@b9H)v+;XoATR z0UAsNka|&jV*1EqcGk1^JtStSQyp(#EVnVnW8Vq!!aNCe`aaFA9$eLFEO~bcVSHpa z%;rV!o7lXryho976@E(llkQ2Jh=iKyK+^#PPLwnQN}IH%MlEYD7`Ks*p@^0qVf(tG zSML@aa>F4`8yUjNu2}T$bm{7l%mDB`on%mlL2Is5OMBkVEVs`#R)hdhAHqbT+NC$N zb&kZgPHiRGoO3ZKO+!LT8Wi@msb%HY(c;L~1}5_c2LQhw(vD!Z1pRetegM7{Kg^Hqb&4 z)iqGXQftX;w>q9ii0F*q5s?AZ)N{^y6ZT1lbufJfC_|2Gz^iy0p_<5;F~NjNvj~}( zL0E)15{YOk6@+S7WWWez+NetdJ-=eHFQz(uzKd|)yj(E{mFjaW=m?=`dld_b=u#C` zCyHxG^+gsG78Hqy;s*s=!f5lR*KS7<=WpZPCs>TJSV3_NLaonmfofscG|Q%e{H1TB znWcWgJb?0L^Q}_uk4m{SmUvawzhS;BI;+2A-j;VP^?k#2m zLU*0%fEf*#Yg^|z;M=!I&TXCHfH?>BI|tlt?shz-a~$a00z1&cPW)cumCy?F9h8!M z2gpp2z0bS{CFDKeyEpURtSPwyJe2uveN@4DUFk5$+``~7n_@dkgtRu;M5cRVE z%b5+K6lO!veeTbPaBGmtm3Ri}vz$3EH#n1N5!B->Zf3E{;=?Qiyadn$#;ELP9tHIz z{-zUnhLxw19E3SWB;)oLENZ+4$Ir2q-2eGwL)z3klSYP#0M!})bIjEwhV{w>9 zLDUH!8ez2UuTAi9OzvcB>=Y`HO=p79R_!X2@#6 zUMZ!snFA8pCn>2QE_>j8@B(lkL?gvbn1v8M)k$-16{%dO%R0dRfFbjXks^&}cr_jm zn#Twoj5Z$No&rAvCC&KLL7_5i=!oRT(iyXKP#R?s3Gj{>IXsY&DRMj-*0|+RK9)8j z7)59|MkzXDU)$tVQ8WaF6lr*7(5qPLX~BHL8k&$ouz7+`{ELs*QLy^cr3R$%J^hG% zX6nR|_d`vFEP3|SeaGw*N9}u$O&&XqjUbNN_dH^crE=qr4UA5LPT`7!=w%bV?ER2S zW|*-^mMusRC}6|^5&&Vw4EA@R$}3h}$qC?-i3->Mkt3DZFO|Zz#2jc3vT#^% zj`WaU32_!}WRb_#0cDL7K{bMmU^E&0h77c<5XQ?vC4>X@o2X3vCl>#i#c#2o95X(w z7c2Mk!UBu4EEv+Q?qD&`Vke4VyY6m7vX=tKuqQ>Zcko(+so0o;`B}axk?f(-SDODa zuYQHae_`<-SR?|K1R3TCRKbwv_^WUiA;Bqv_WO6^#mJdsPjQz~#XbO$3;>6Ym#w|! zKS|C_WB5Y3+UG@Z+$Y^Xax+L@0N zSx&$XN>PLsvVf6glou*^@9khERaY|PxRof~1)>}I{s-j!ny?Pbt>(V}LwWCmVd!)j z^;JKmKN*T6z~*CyLHkp7%~f+A&S4nzcTV_)=(@inj^TD!I&VDBaG@><13bbt8red) zDwM=>lJ|^j2gjaShC`&HIRGitNMn8OKSSCYbv6vY#k~Ov6{6Q6d;jTUM^2qQd2I6N zv7?}Jcsrp1QX!wre?6b0@FnmHz9pGUQ}u&?H62n>YI2}8K+;LkOo=^&Z)hGYz3@RW zVje^8#@3jz-9s%{o30>)gNy(Yy)*{Z6J7O4p=4I|mkf0L%B0M%!Imc@h0rR<3Q443 z$l5v7P}9Z2L}r|0At_|DDVR(~bMkm#uFRta+MJ_tExX@8Bcg9Fq4gMYzL7u(T}XTBvtIuEoXYw#;NYud%spUtBKfCZE1fFd7sp{kxy*oaP-LtZBsnrOdTXa(;dLA)?v^5+11(VbIV9^RUpZ&dSb`*(7D_~<$A*(c>r+{MFs1dW##*0au@Il9 z^(m!=_yp@90bf>Rd4hb5dkk@ps+^Q+2FMw1%RnrQQEm_$iFYuSM`##h;h+*oGq_x4 z_eP`P)qwNAG>J^VOGcpQNnVJ!>StNRBnJui-pLE}(o=tr#b;Rj9E;Dg_!x@;t%fjk z@xDl&lot~we~vHaG5M`RYq)OHjQ(GfTJ6WvVD#7a$D3QP?6K+>`y4dhoCK;wB5_}x zVFHe2n4R?&bwM>c%BVOf6~vOkuj6DuGN6j%-N@is;dUZWNWcyD95mePW(#x*F>}^k zOg+XsW8ocS(vUkP+^MJ|P+*vD8FUZIk@X5_VkMR;7|RZ&2KKeR+ci7b8#hvZ#LA1( z>W5NvuN>07l6ojZ_q6gN(stLKKTb>G+Al-1`$%^tsz`czPH)$ z78INVZzp3OkuI;z{m)4C(q0%y!rpXLUIH^cW0!v0aiNM)o5jI@->lSQMl*R_betE; zH_7;4ux!o=UqSeni0>1qGjhbT;9Lmrj5r>B_?4X{M6mpsHIi}5ni$0TOEt4Oo__&t58yc+ zIo>&d=ScY-Vso(%&#`$>iUL&Bdj!uZ-$Zy0`6jY*5zljQdpZ}lPhA4HD~@ZXRuY@y zcA^!Vupd?1A;Zf zQ80sHGwlJAaFw7?35ggq9bSKhgtdsx-cAI<+`u3Qvf{P293Bn2fF+atW`uixyL%p^YDjBwD*9U z0$W1-fj^1HA7D>xLPWMYgq=k=BY|e`Ng4W*K(pIpemaOPW%UBOFxfxqqKx^aR~dAn zV4I3SZ^|8#gs6O+!@dtqKnltX`|vBIS{cdb?cd>mC$(RuQ2;wEYNG(RBuEqwiIv7cK?)k}%CR}@9!{=_iL36W>T^Zy3Rm7P9?&d4=j9#LFD>QhaCI`+Z zWZg(3khqwShX%!E*d%VnL$NzgT2MOKg}(=g8{CbcDTTv5z9-&PFV0OcFa$9{NHnq@ zybJV_D6z51_zf4t6pYZMHF`+PWiw5q~I96Zhg?yu#Kq8G-eS2L5TSEwn*4JMp9EOH7Y;gn0 zIP?)3zPP7q71wgKXMHtfAdmttYQ&~psP;oBo-&>-aK9tHxCMs*_jnfUI)uNJ(M${i zhMJJw)F1>u0~3L4ep99s>3aE-VI3Ql9x^jyQ_=`Be>Wd8$=_nojQ7z_NOA&i55GaN zuiyK?j+K39d2t5LK?v<2gMnp37>aA}$8OYgBVF@UcbwX{Xh*GNn+k5I1$#4?C^);$ zU#-0zwW={?o?m%ZnL_JwbZPjX_Cwy{Nb1dB6~&_<7FUW8&CyALB_@*|KE#cc$xW^uz*ca4d=_*nQP zmEqcdoQ~7tOonGTr<7+I)yP_5j*p$RBmeAK?G&ut@c2U7QG0?JPCA)(rOtV%>t;M| z;v+l6gnrz5zdY$JwR<8)k2Tv!5tr^JEF&#nZv+$v^1-paV>jXMEgJc7Bfq#=j3I(u zq`LSG-4;hTX$n5=s+Vp`;|-*2{c@BcHteoWG0&(^NY+bYa9dd($WI( zRUh<>Ix%sB*25#`-={w4p>w%*|I<_<-dIkXz(PDeV27A;K=xA_%fPZPo6Zbyw-``4 z{F>7x62~M&Jn=Udwasslpp)c-OUQ~M?^c+0RMsQgfoYx4)jRZF4E7FQ%keW0cTD>- zTl@+OX)o(y4)1w!UC&hyZJUFQG<0d#kL@FSd|44DzvLy2=^7*ijs zSFP0tz>*?Yu4s=|OC63`Ql2Z9QQVXzokEDuCOj#ILY*9eTq$zkM2_#dRx^(~jnU&g zBCrXlodS6l>df21XXqN%L3j}TqlH-wZ~+Awj`W^)ky}pUi+n!sMhX}`^+_xJs)wu2 z-W@uKQ;qbOdgt31tS&_aHDHk!X9b2$DBmEpQ~w)yiaZ`d*M!ieso74UTv1OVdUk!@ z)f@-xaPv8#V?x#v+4-AjHJ6C(Ac^T~@IxeHx8aS*&>Z<+k9-TB*MF`(uW>wN{&}B+ z$y*241UdCHLYaZe7EASS*tLJl;@_bd&yP^PgZJN$A}AsbP<@rB|CPn>vG{!!f575@ zu=pbu|C7c4VnN-2`ePRVhs8@QF0%OdEZ!Cu5;!VLo!`K-HN@NV^O6v6c;Pfgx?s&Vx2)ZxaFQqmT&ZMSF7J3#x?bC$SQ9Nco2}7n~iOQyYaeGx2@nz%J2bBhs z3^y8BSz=REi!q;Sk{w%M@h2#P9gEa9Pe|Da7o-Z)Ur<;@A&`B>N1_wWpAe}=olY$Sm7$Z*2#QF(lKOmsSs8=sU2rGBmND2g9pmsm6jq_SZx|`ust`W71<9x} kjH4>bk=qL&8J#YCB>FdccXU+vNcGLbX4M?M+4{}@2YCsjCjbBd literal 0 HcmV?d00001 diff --git a/database/__pycache__/async_mysql_v2.cpython-310.pyc b/database/__pycache__/async_mysql_v2.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4849ef6229c551675d0882ac91d1407b7e19171e GIT binary patch literal 9372 zcmeHM&vP8db)H|lJG)pc01~1|nr6lfWnyCrAQ{C@K`coS2#S=b1w}xXg@~C9rh9<_ zc4rnnvjlcCD}g4jPC2KPWxEPUa#5;sOI0e@B!~PBb4n!#mvVCsaUxT4zSpxq0a#J0 zd`os~db(%&b@z0?_r0%Q2jk-f1-~2rxV`ah;0&5-xZT1MWpYdLv0*GzfOujO&i)C%>nwXv>Dajl4F+1hx$ zv{vdqn^>E`vs`VmKD9QbDsL#vWcjBG%RkZ9PVv*Mu&s$oUSZmbyvk$ke=ig){1)C_ zy|esaJ}uCLw>F#Mrc<--TPs1}GcLBg^yRIE)uo|&w}r=?)>Z3wuSJ{ILUUvGs&(Vq zjhE88%dfw=w77cryTbyjfwj&pXT8R)D6kyYEu8=Ua{ydi4gRcAeI2+Wdp1+e;6YDvL`iLj$VJEp!LE{9fhW^1`iSFF(b~D3wH= zZELf$Wi>Ij!obIU@~+Dl1$XMV_{tXhYtf^RNjTY*u zvW6vQ2JQySuq^HwmSZOFS)OBgR(PsBQL(6FtcYj%{5bmtEAaxG;A3o(7pqw|#ZEoV ztc~Z#^QZIE`RDRy*d_T!W6!g*cvHfgGwiq7IY>c*otIKyV;AslV(8u1`6M4Zr}XQX z>>~Ru)R|(|ic-Fu6c)mk@4nr_)Vmr!qxUnAp=%je`1?p=EmmwL){&}AMXE)5jQf`M zgx(m8(oB@4?`D}FP$@?WR?a$EG%VFis+i^09IQ1~eK!!>)~*MQIbq>vt!3eDc)nAs zwX8aK{D?#XA0^L!6l`-Vi~<2wX^6n(tSO)?j?XN?BjNE!P^(Q|x16xw@tZ5ll^1KC z6ckN2k`gmDEUXm>i+OHTp0!ptxm68B-HGT%ZJ@!hS&Kp_TxdPwqGg2*?s`?vmE&m& zs~K|3g|148kc&s2ztQjYb-&i#nG@j|Qav@Ab}EE3^XD?n32l`ISa z-#*)KX};kI2c{4NH9Pd$d|nRLZ`Rkju!5@P2ENbT$P0Wqxpl|$BU~2Q3<(`;$q^gj zytUxBEaaLrFe%u;>daad3=AK}j!A9rrgHb?B4U09{Zh8-Z8U{Lqev}xlM6m*<5NP- zO52qBX2sTOSxd4F!K>b0Qu2Ja)?|D!@FTt#mCaz;4- zCn?eE&fd`q&fZXk(N0KEklrWLBaJo$W)o0gBu2<<)g(XY!H@&Xrepa;5zj&Tv-@+K zL7mSrC}J&Wa4~nkf?JXX zbAnO1ut=%b1C^c!;53Cl4~y}KG(9nUYnfF0(q{j8KLsMD&suYED10bS7%4InKe zEsz>;37N;_Ccto-il7x!4;8GcdI##rRIC!Nvey3V{`#x}zax-SXZU^TkVN(8&9n?h#LQR-2LD);7? zyf3^Q5kL~y-Spf|5CquVrb8ZmbO3HGfa|1@t#i0s%ZJ;cT0w6#gC5G6q~L`xz{v4k zm>`1(uRFCQcdMJpI*kVRS(2&N0w;pG>KH&$NC#t6-tZz`Kf1_cwk@krjgM)02>Fb> zsa{ZvFrN0Ap+z35I>NMa5FsWh&E*j?k5w$NmZxO~!#Yr;xhQv(4i<4s4Nt|Awln>y zLgiavlATO!KpiGJ*;qdSFM|>QQV%k5_E3G&Q-=$&cA&*_U|lt0yWh~24z%w5h4e7QDzEio7m-J=s#xJg9I4eE_o z{+8OK#;29`%+UN)dE{=|M0sx30+@053Nk&RaxO7t1-wtjWDj17ao<8q=o9oU(c4}l zIWy|FNt@*Q<$REekVoZQiicUZDZ)S`6KK&+HPXiGFqw!z&W4^O+4OCabAwv5?uX*V z-WR7|DP3j0Km1SV`_3cL_6;Y5^ zh@tiHxu-;F8SUueJCIA2N45^HtQzpjPxPLQKX$#_OZdhvu!sKd<2qh5hL7&oeK=f~ z-jp@xBj{EiuvP;J?*9|*$8z>)djnLMhXWMoG3efgK~8d)Mq|1O@dyWx?kiHrs{@AHFDJEstgUpF=dJfPIqHk6v_HW{;VSJBuxV=6m?ifyK)ST5 z95&zME{J5{54AT8tisvt?qx6)s+3#g99QmQ#5^7) zCOKPDS@9~>cpXXCy2NYrV4?R^yo_8@7`Q?ye-tB1)STTnfxm}LcmavFUz!93(NC$T z)Ja_0{_lJ~`70xL=D&mE3nT}0AUAc2Zr2_;ZSpHCB zg}!9J=7D)goMQ3=tyAhu#HD!rAb+SlQpFGBiFlkLh!B@&MEp2MP z-RMDgw;=h?+hW#Qm$5P*+j3`n+YuD4s?ly@0h`B~HAC^R@}Rf>dtj8tF91oR1y`5OH<9<3Wve$K4L9Rk(7X4MTi` zfSB4OmDzPX!f?4Yz(#%UYB)*iM&S5 z<09>~>bQtdrQU=133MT}Ho{8t08fuW>)ovH4Civ?~Y`W1F|a@>Ci`d5x;~eP1#rS1;B0WTK}m zz44vuJs49my*#?yg=ho?L^09CsSRp;;c(t!$ilBlFTEg*2Kqn z2;J`;^|xOe^_Mn))24s|#limtt%nsP+P-JAAP%4u;fxDvQP;E* z?wXo?R?He8xNy+2bk;0FO52~*FUhosR@&eEweEVP`y{i|#Liu;VFV*=mzZv!?cS6A zdX(+L&*BWFL;g0~{@yX(`+6rA=SFz%<&GJf#Cv;QnAkGBve_?ZVokgZsjtd<-x_AJ z$64KWHM9Owda#licc@C6|R@84>#- zTu7l^zD&U(tvA<~1loz_Ff&ahesfH>?_3az`%OS%H!1????sP>KDP&hOE|kg1Y(P} z284U5ZIY)ND$&G^fa0K`%4g%4M{B7Unfq*FSvJ^zfVg0ve2YcseoDM^Dc9!%-YqP= zObRltz9d8-Wb98OSGkbF5+iZq=+df^afB>F+o@I&j^<2!K=KB#q#>554iS8bF-K8j ztlPIu;ZA5v_!4SLiVpiWR81qIKG`SgGruzSCv$`q=6*>}@7fooj5!({8ERCbvYSDx zy&n4>ybxZs z(yRRPrGB$GhF+Mr{-9sB@SC}E{ra_Q*REf=YF(-DUF#OFZF*ElGv%vCYX2T8r?v02 z@Fh5RW>k9>Y|P(qeCNtBiEsBM7O^Yw9ohP-QwPnjIIMZ4-0$IGKiB2^|9gxi0+WI& z<%lQV?$_4{BZ!O!lNPqso0|A%W<^WgFNc6iwtBmKiVhSh$Y|S1!M3p#Y1SxTwC$ayQ%m27=Sk=sCGwnud{I&) z!}Q#AdoJiaLe5yCL-~?S)P&h5#yXv&O7iSdg>6a*(nXz;!BL6KQ2Zub@Mr`P*Ba1_I2Z#rfFYjy7swd6rO39Q!c8h#(&E4GIFCeZs5r;NhT|0v}anT z^h?G$DF5C$dt--{7dY}b}68Fw* zXH%OK2w!wJ38v?AI=HK+2g&(JI4&oepJZ`@0sBm6f<9RIl$ {message}" + return message + + +# --------------------------------------------------------------------------------------------------------------------- + + +class MongoInsertException(Exception): + + def __init__(self, hint = None, origin = None): + self.__hint = hint + self.__origin = origin + + def __str__(self): + message = "mongo insert operation failed" + if self.__hint is not None: message = f"{message} ({self.__hint})" + if self.__origin is not None: message = f"{self.__origin} --> {message}" + return message + + +# --------------------------------------------------------------------------------------------------------------------- + + +class MongoUpdateException(Exception): + + def __init__(self, hint = None, origin = None): + self.__hint = hint + self.__origin = origin + + def __str__(self): + message = "mongo update operation failed" + if self.__hint is not None: message = f"{message} ({self.__hint})" + if self.__origin is not None: message = f"{self.__origin} --> {message}" + return message + + +# --------------------------------------------------------------------------------------------------------------------- + + +class MongoReplaceException(Exception): + + def __init__(self, hint = None, origin = None): + self.__hint = hint + self.__origin = origin + + def __str__(self): + message = "mongo replace operation failed" + if self.__hint is not None: message = f"{message} ({self.__hint})" + if self.__origin is not None: message = f"{self.__origin} --> {message}" + return message + + +# --------------------------------------------------------------------------------------------------------------------- + + +class MongoDeleteException(Exception): + + def __init__(self, hint = None, origin = None): + self.__hint = hint + self.__origin = origin + + def __str__(self): + message = "mongo delete operation failed" + if self.__hint is not None: message = f"{message} ({self.__hint})" + if self.__origin is not None: message = f"{self.__origin} --> {message}" + return message + + +# --------------------------------------------------------------------------------------------------------------------- + + +class MongoException(Exception): + + def __init__(self, hint = None, origin = None): + self.__hint = hint + self.__origin = origin + + def __str__(self): + message = "mongo operation failed" + if self.__hint is not None: message = f"{message} ({self.__hint})" + if self.__origin is not None: message = f"{self.__origin} --> {message}" + return message + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncMongo: + + __db = None + __db_name = None + __client = None + + def __init__( + self, + database_name = "myDb", + max_connections = 5, + debug = True, + debug_only_errors = True, + host = "localhost", + port = 27017, + connection_string = None + ): + + # Basic config: + self.__max_connections = max_connections + self.__db_name = database_name + self.__host = host, + self.__port = port + self.__connection_string = connection_string + + # For debugging: + self.__debug_only_errors = debug_only_errors + self.__printer = IceCreamDebugger(prefix = f"Mongo ({self.__db_name}) | ", includeContext = True) + if not debug: self.__printer.disable() + + # Rate/access control: + self.__exclusive_semaphore = asyncio.Semaphore(1) + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + @staticmethod + def generate_id(): + + """ + Just generates an '_id' in MongoDB style. + :return: The '_id' in MongoDB style. + """ + + return str(ObjectId()) + + async def connect(self): + try: + if self.__connection_string is None: + self.__client = AsyncIOMotorClient( + self.__host, + self.__port, + maxPoolSize = self.__max_connections, + minPoolSize = self.__max_connections + ) + else: + self.__client = AsyncIOMotorClient( + self.__connection_string, + maxPoolSize = self.__max_connections, + minPoolSize = self.__max_connections + ) + self.__db = self.__client.get_database(self.__db_name) + if not self.__debug_only_errors: + server_info = await self.__client.server_info() + self.__printer(server_info) + except Exception as exception: self.__printer(exception) + + async def ensure_connection(self): + if self.__db is None: + async with self.__exclusive_semaphore: + await self.connect() + + @property + async def client(self): + await self.ensure_connection() + return self.__client + + @staticmethod + def dict_to_dot_notation(input_dict, parent_key = "", separator = "."): + items = [] + for k, v in input_dict.items(): + new_key = f"{parent_key}{separator}{k}" if parent_key else k + if isinstance(v, dict) and v: + items.extend(AsyncMongo.dict_to_dot_notation(v, new_key, separator = separator).items()) + else: + items.append((new_key, v)) + return dict(items) + + @staticmethod + def normalize_date_time(document): + + """ + MongoDB doesn't support timezones. A good strategy would be to convert everything to UTC format and store it. + This method does exactly that. Any datetime object is converted to UTC timezone. If the datetime object was + timezone naive, UTC timezone will be applied to it without changing the time value. + :param document: The document that you want to normalize the date-time in. + :return: The document with normalized datetime. + """ + + if isinstance(document, datetime.datetime): + utc_tz = pytz.timezone("UTC") + if document.tzinfo is None: document = utc_tz.localize(document) + else: document = document.astimezone(utc_tz) + + if type(document) is list: + document = [AsyncMongo.normalize_date_time(item) for item in document] + + if type(document) is dict: + document = { + AsyncMongo.normalize_date_time(k): AsyncMongo.normalize_date_time(v) + for k, v in document.items() + } + + return document + + @staticmethod + def __from_json_string(json_data): + return loads(json_data) + + @staticmethod + def __to_json_string(python_data, indent = 4, default = None): + return dumps(python_data, indent = indent, default = default) + + async def list_indexes( + self, + collection, + session = None, + raise_exception = False + ): + + """ + Lists out the indexes of a collection. + :param collection: The collection whose indexes you want to list out, + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The list of indexes or None if the action fails. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + indexes = None + + # Try to list the indexes: + try: + responses = await self.__db[collection].list_indexes(session = session).to_list(None) + indexes = [{key: value for key, value in response.items()} for response in responses] + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not indexes: raise MongoException(hint = "list indexes") + return indexes + + async def create_index( + self, + collection, + keys, + options = None, + session = None, + raise_exception = False + ): + + """ + Creates an index on a collection. + :param collection: The collection to create the index on. + :param keys: The keys (and sorting) to implement the index on. + :param options: Additional config. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the execution. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Try to make the insertion: + try: + options = options or {} + keys = [(k, v) for k, v in keys.items()] + response = await self.__db[collection].create_index(keys, session = session, **options) + if response: success = True + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not success: raise MongoException(hint = "create index") + return success + + async def insert_one( + self, + collection, + document, + session = None, + raise_exception = False + ): + + """ + Insert data into a collection. + :param collection: The collection you want to feed the data into. + :param document: The data to be stored. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The id of the inserted data, or null if the action fails. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + inserted_id = None + + # Try to make the insertion: + try: + response = await self.__db[collection].insert_one(document.copy(), session = session) + inserted_id = response.inserted_id + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not inserted_id: raise MongoInsertException(hint = f"{collection}") + return inserted_id + + async def insert_many( + self, + collection, + documents, + session = None, + raise_exception = False + ): + + """ + Insert a lot of data into a collection. + :param collection: The collection you want to feed the data into. + :param documents: The data to be stored. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The id of the inserted data, or null if the action fails. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + inserted_ids = [] + + # Try to make the insertion: + try: + response = await self.__db[collection].insert_many(documents, session = session) + inserted_ids = response.inserted_ids + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not inserted_ids: raise MongoInsertException(hint = f"{collection}") + return inserted_ids + + async def update_one( + self, + collection, + filter_json = None, + update_json = None, + upsert = False, + session = None, + raise_exception = False + ): + + """ + Update one document. + :param collection: The collection you want to update. + :param filter_json: The selection criteria to locate the document to update. + :param update_json: The values you want to update. + :param upsert: If you want to insert if the document doesn't already exist. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Try to make the insertion: + try: + response = await self.__db[collection].update_one( + filter_json, + update_json, + upsert = upsert, + session = session + ) + success = False if response.modified_count == 0 else True + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not success: raise MongoUpdateException(hint = f"{collection}") + return success + + async def update_many( + self, + collection, + filter_json = None, + update_json = None, + upsert = False, + session = None, + raise_exception = False + ): + + """ + Update many documents. + :param collection: The collection you want to update. + :param filter_json: The selection criteria to locate the document to update. + :param update_json: The values you want to update. + :param upsert: If you want to insert if the document doesn't already exist. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + update_count = 0 + + # Try to make the insertion: + try: + response = await self.__db[collection].update_many( + filter_json, + update_json, + upsert = upsert, + session = session + ) + update_count = response.modified_count + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not update_count: raise MongoUpdateException(hint = f"{collection}") + return update_count + + async def count( + self, + collection, + filter_json = None + ): + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = 0 + + # try to query the data: + try: + if filter_json is None: filter_json = {} + count = await self.__db[collection].count_documents(filter_json) + except Exception as exception: self.__printer(exception) + + # Done here: + return count + + async def bulk_write( + self, + collection, + requests, + session = None, + raise_exception = False + ): + + """ + To perform various individual operations in one go. You will have to import individual actions like "UpdateOne" + and "InsertMany" from PyMongo and pass them as an array of requests (operations) to this method. + :param collection: The collection you want to run the requests on. + :param requests: The array of requests (operations) to be performed. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = 0 + + # try to query the data: + try: + response = await self.__db[collection].bulk_write(requests, session = session) + count = response.modified_count + response.inserted_count + response.upserted_count + response.deleted_count + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not count: raise MongoException(hint = "bulk write") + return count + + async def find_many( + self, + collection, + filter_json, + projections = None, + skip = 0, + limit = None, + sort = None, + session = None, + as_json_string = False, + indent = 4, + raise_exception = False + ): + + """ + Finds one or more records that match the given conditions. + :param collection: The name of the collection to perform the search in. + :param filter_json: The filter criteria. + :param projections: What parts of the matching data you want to fetch. + :param skip: The no. of records to skip before picking next ones. Needed for pagination. + :param limit: The max. no. of records you want to fetch. + :param sort: The sorting rules to apply. + :param session: The session if you need to do this in a transaction. + :param as_json_string: Whether you want it as a JSON string or a Python dict/list. + :param indent: The indentation to use if you want it as a JSON string. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The array of matching records or null if there was an exception. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + results = None + + # Assume defaults: + if sort is None: sort = {"_id": -1} + if limit is None: limit = 10 + + # try to query the data: + try: + results = await self.__db[collection].find( + filter_json, + projections, + session = session + ).sort(sort).skip(skip).limit(limit).to_list(None) + if as_json_string: results = self.__to_json_string(results, indent = indent, default = str) + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not results: raise MongoFindException(hint = f"{collection}") + return results + + async def find_one( + self, + collection, + filter_json, + projections = None, + session = None, + as_json_string = False, + indent = 4, + raise_exception = False + ): + + """ + Finds one record that matches the given conditions. + :param collection: The name of the collection to perform the search in. + :param filter_json: The filter criteria. + :param projections: What parts of the matching data you want to fetch. + :param session: The session if you need to do this in a transaction. + :param as_json_string: Whether you want it as a JSON string or a Python dict/list. + :param indent: The indentation to use if you want it as a JSON string. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The array of matching records or null if there was an exception. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + results = None + + # try to query the data: + try: + results = await self.__db[collection].find_one(filter_json, projections, session = session) + if as_json_string: results = self.__to_json_string(results, indent = indent, default = str) + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not results: raise MongoFindException(hint = f"{collection}") + return results + + async def replace_one( + self, + collection, + filter_json, + replacement_json, + upsert = False, + session = None, + raise_exception = False + ): + + """ + To delete one document from a collection. + :param collection: The collection from which you want to delete many records. + :param filter_json: The filter criteria. + :param replacement_json: The data to put in place of the existing document. + :param upsert: If you want to insert if the document doesn't already exist. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # try to query the data: + try: + result = await self.__db[collection].replace_one( + filter_json, + replacement_json, + upsert = upsert, + session = session + ) + if result.modified_count or result.upserted_id: success = True + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not success: raise MongoReplaceException(hint = f"{collection}") + return success + + async def delete_one( + self, + collection, + filter_json, + session = None, + raise_exception = False + ): + + """ + To delete one document from a collection. + :param collection: The collection from which you want to delete many records. + :param filter_json: The filter criteria. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = 0 + + # try to query the data: + try: + result = await self.__db[collection].delete_one(filter_json, session = session) + count = result.deleted_count + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not count: raise MongoDeleteException(hint = f"{collection}") + return count + + async def delete_many( + self, + collection, + filter_json, + session = None, + raise_exception = False + ): + + """ + To delete many documents from a collection. + WARNING: sending {} in the filter would mean deleting ALL the documents. + :param collection: The collection from which you want to delete many records. + :param filter_json: The filter criteria. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = 0 + + # try to query the data: + try: + result = await self.__db[collection].delete_many(filter_json, session = session) + count = result.deleted_count + except Exception as exception: + self.__printer(exception) + + # Check results and return: + if raise_exception and not count: raise MongoDeleteException(hint = f"{collection}") + return count + + async def aggregate( + self, + collection, + pipeline, + limit = None, + raise_exception = False + ): + + """ + Perform an advance query on the data. + :param collection: The collection to perform the query on. + :param pipeline: The pipeline of actions to take. Must be a list. + :param limit: The max. no. of records to retrieve. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The array of matching records or null if there was an exception. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + results = None + + # try to perform the aggregation action: + try: results = await self.__db[collection].aggregate(pipeline).to_list(limit) + except Exception as exception: self.__printer(exception) + + # Check results and return: + if raise_exception and not results: raise MongoException(hint = "aggregation") + return results + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/database/async_mongo_storage.py b/database/async_mongo_storage.py new file mode 100644 index 0000000..94df2d8 --- /dev/null +++ b/database/async_mongo_storage.py @@ -0,0 +1,358 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 28th May, 2024 + + OBJECTIVE: + + To have one central place from where all async database connectivity happens. + + REFERENCES: + + 01. https://motor.readthedocs.io/en/stable/ + + DOWNLOADS: + + N/A + +""" + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +# --- +import sys +sys.path.append(".") +sys.path.append("..") + +# For system-level activity: +import io + +# For async behaviour: +import asyncio + +# MongoDB for File Storage: +from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorGridFSBucket +from bson.objectid import ObjectId + +# For debugging: +from icecream import IceCreamDebugger + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncMongoStorage: + + __db = None + __db_name = None + __client = None + __store = None + + def __init__( + self, + connection_string = None, + max_connections = 5, + host_name = "localhost", + port = 27017, + database_name = "fileStore", + debug = True, + debug_prefix = "GridFS (M) | ", + debug_only_errors = True + ): + + # Database Initialization: + self.__host_name = host_name + self.__port = port + self.__db_name = database_name + self.__connection_string = connection_string + self.__max_connections = max_connections + + # Debugging: + self.__debug_only_errors = debug_only_errors + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + + @staticmethod + def generate_id(): + + """ + Just generates an '_id' in MongoDB style. + :return: The '_id' in MongoDB style. + """ + + return str(ObjectId()) + + async def connect(self): + + """ + Initialize the database connection. + :return: Nothing. + """ + + if self.__connection_string is None: + self.__client = AsyncIOMotorClient( + self.__host_name, + self.__port, + maxPoolSize = self.__max_connections, + minPoolSize = self.__max_connections + ) + else: + self.__client = AsyncIOMotorClient( + self.__connection_string, + maxPoolSize = self.__max_connections, + minPoolSize = self.__max_connections + ) + self.__db = self.__client.get_database(self.__db_name) + self.__store = AsyncIOMotorGridFSBucket(self.__db) + + @property + def fs(self): + + """ + To access the features that have not been wrapped in this reportlab directly. + This could include things like streaming files chunk-by-chunk. + :return: The file-store instance. + """ + + return self.__store + + async def write_from_memory(self, file_name, file_data, metadata_json = None): + + """ + Save a file (from RAM) to Mongo. Suitable for smaller files (a few MBs max.). + :param file_name: The name of the file. + :param file_data: The data of the file (held in RAM). + :param metadata_json: A JSON of metadata information that can later be used to search files (RECOMMENDED). + :return: The file's id as a string (if it gets saved) or None. + """ + + if self.__store is None: await self.connect() + + file_data.seek(0) + file_size = file_data.__sizeof__() + + file_id = None + try: file_id = await self.__store.upload_from_stream(file_name, file_data, metadata = metadata_json) + except Exception as exception: self.__printer(exception, file_name, file_size, file_id) + if not self.__debug_only_errors: self.__printer(file_name, file_size, file_id) + return str(file_id) + + async def read_to_memory(self, file_identifier, by_id = True): + + """ + To retrieve a file (in RAM) based on the provided identifier. + Suitable for smaller files (a few MBs max.). + :param file_identifier: Either the name or the "_id" of the file. + :param by_id: Set to True if you are fetching by the "_id" of the file. + :return: Either the file (in RAM) or None. + """ + + if self.__store is None: await self.connect() + + file_data = None + + try: + if by_id: grid_out = await self.__store.open_download_stream(ObjectId(file_identifier)) + else: grid_out = await self.__store.open_download_stream_by_name(file_identifier) + file_data = io.BytesIO(await grid_out.read()) + file_data.seek(0) + + except Exception as exception: + file_data = None + self.__printer(exception, file_identifier, by_id) + + if not self.__debug_only_errors: self.__printer(file_identifier, by_id) + return file_data + + async def delete_file_by_id(self, file_id): + + """ + Tries to delete one file by the id. + :param file_id: The id of the file in the database. + :return: True or False based on the success of the operation. + """ + + if self.__store is None: await self.connect() + + deleted = False + + try: + response = await self.__store.delete(file_id = ObjectId(file_id)) + deleted = True + except Exception as exception: + self.__printer(exception, file_id, deleted) + + return deleted + + def __format_metadata_json(self, metadata_json): + + """ + NOTE: ONLY USE WHEN SEARCHING FILES BY METADATA. + MongoDB expects dot-notation while searching for files by the metadata. We are making a function to search + files assuming that the conditions are to be applied to the metadata itself. So this function add the + dot-notation to the right places to conduct a successful search. + :param metadata_json: The JSON to format. + :return: The formatted JSON that has the right dot-notation. + """ + + formatted_metadata_json = {} + + for key, value in metadata_json.items(): + if not key.startswith("$"): key = f"metadata.{key}" + else: + if type(value) is dict: value = self.__format_metadata_json(value) + if type(value) is list: value = [self.__format_metadata_json(item) for item in value] + formatted_metadata_json[key] = value + + return formatted_metadata_json + + async def find_file_by_metadata(self, metadata_json, limit = None, skip = None, sort = None): + + """ + This method only lists the files that match the criteria mentioned in the metadata JSON. + :param metadata_json: The JSON that describes what you want to find. + :param limit: Max. no. of records to retrieve. + :param skip: No. of starting results to skip. Useful for pagination. + :param sort: The sorting conditions to follow. + :return: A list of (JSONs of) files that match the conditions. The list can be empty. + """ + + if self.__store is None: await self.connect() + + files_list = [] + + try: + limit = limit or 10 + skip = skip or 0 + sort = {"_id": -1} if not isinstance(sort, dict) else sort + formatted_metadata_json = self.__format_metadata_json(metadata_json) + return await self.__store.find( + formatted_metadata_json + ).sort(sort).skip(skip).limit(limit).to_list(None) + + except Exception as exception: self.__printer(exception, metadata_json, len(files_list)) + + if not self.__debug_only_errors: self.__printer(metadata_json, len(files_list)) + return files_list + + async def find_file_by_id(self, file_id): + + """ + This method allows you to get the file's info from the id of the file. + :param file_id: The id that was assigned by Mongo during upload. + :return: The file's info or None if the file doesn't exist. + """ + + if self.__store is None: await self.connect() + + file_info = None + + try: + formatted_metadata_json = {"_id": ObjectId(file_id)} + file_info = (await self.__store.find(formatted_metadata_json).to_list(1))[0] + + except Exception as exception: self.__printer(exception, file_id, file_info) + + return file_info + + async def get_file_name(self, file_id): + + """ + Returns the file name if the id of the file is known. + :param file_id: The id of the file as assigned by MongoDB when the file was stored. + :return: The file's name (if it exists), or None. + """ + + # Ensure that we are connected: + if self.__store is None: await self.connect() + + # Ensure that the input given is of 'ObjectId' type: + if type(file_id) is not ObjectId: file_id = ObjectId(str(file_id)) + + # Fetch and return the file name: + files_list = await self.__store.find( + {"_id": file_id}, + {"filename": True} + ).sort({"_id": -1}).limit(1).to_list(None) + try: file_name = files_list[0]["filename"] + except: file_name = None + return file_name + + async def aggregate( + self, + collection, + pipeline, + limit = None + ): + + """ + Perform an advance query on the data. + :param collection: The collection to perform the query on. + :param pipeline: The pipeline of actions to take. Must be a list. + :param limit: The max. no. of records to retrieve. + :return: The array of matching records or null if there was an exception. + """ + + if self.__store is None: await self.connect() + + results = None + try: results = await self.__db[collection].aggregate(pipeline).to_list(limit) + except Exception as exception: self.__printer(exception) + return results + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/database/async_mongo_v2.py b/database/async_mongo_v2.py new file mode 100644 index 0000000..0e66f9d --- /dev/null +++ b/database/async_mongo_v2.py @@ -0,0 +1,1749 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Original: Tuesday, 28th May, 2024 + Modified: Tuesday, 17th Sept., 2024 + + OBJECTIVE: + + To have one central place from where all async MongoDB activity happens. + + REFERENCES: + + 01. https://motor.readthedocs.io/en/stable/ + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For system-level activity: +import io + +# For async behaviour: +import asyncio + +# MongoDB for File Storage: +from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorGridFSBucket +from bson.objectid import ObjectId +from bson.json_util import dumps, loads + +# My utils: +from utils_v2.string import json + +# For datetime handling: +import pytz +import datetime + +# For debugging: +from icecream import IceCreamDebugger + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** EXCEPTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncMongoBase: + + def __init__( + self, + connection_string = None, + max_connections = 5, + host_name = "localhost", + port = 27017, + database_name = "myDb", + debug = True, + debug_prefix = "Mongo | ", + debug_only_errors = True + ): + + # Basic variables that will be needed later: + self._client = None + self._db = None + self._fs = None + + # Database Initialization: + self._host_name = host_name + self._port = port + self._db_name = database_name + self._connection_string = connection_string + self._max_connections = max_connections + + # Debugging: + self._debug_only_errors = debug_only_errors + self._printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self._printer.disable() + + def enable_debug(self): + self._printer.enable() + + def disable_debug(self): + self._printer.disable() + + async def connect(self) -> bool: + + """ + Initialize the database connection. + :return: None. + """ + + # Start by assuming success: + success = True + + try: + + self._printer("Connecting...") + + # If a connection string is given, + # give preference to it: + if self._connection_string is None: + self._client = AsyncIOMotorClient( + self._host_name, + self._port, + maxPoolSize = self._max_connections, + minPoolSize = self._max_connections + ) + + # In the absense of a connection string, + # try to connect through the other credentials: + else: + self._client = AsyncIOMotorClient( + self._connection_string, + maxPoolSize = self._max_connections, + minPoolSize = self._max_connections + ) + + # Debugging print: + if not self._debug_only_errors: + server_info = await self._client.server_info() + self._printer(server_info) + + # Now we connect to the database and the file-store: + self._db = self._client.get_database(self._db_name) + self._fs = AsyncIOMotorGridFSBucket(self._db) + + # If something goes wrong: + except Exception as exception: + self._printer(exception) + success = False + + # Done here: + return success + + async def ensure_connection(self): + + """ + Call this at the start of every function to automatically connect to the database when the user of the library + forgets to explicitly connect to the database. + :return: None. + """ + + if self._client is None: await self.connect() + + @staticmethod + def generate_id(as_str = False): + + """ + Just generates an '_id' in MongoDB style. + :param as_str: Set to True to convert the generated id to a string; and False to receive it as an instance of + 'ObjectId'. This is useful when you need to pre-assign ids to files. + :return: The '_id' in MongoDB style. + """ + + generated_id = ObjectId() + return str(generated_id) if as_str else generated_id + + @property + async def client(self): + + """ + returns the client to perform activities that have not been explicitly wrapped in the class. + :return: The client's instance. + """ + + await self.ensure_connection() + return self._client + + @property + async def db(self): + + """ + returns the database connector to perform activities that have not been explicitly wrapped in the class. + :return: The database's connection instance. + """ + + await self.ensure_connection() + return self._fs + + @property + async def fs(self): + + """ + returns the file-store to perform activities that have not been explicitly wrapped in the class. + :return: The file-store instance. + """ + + await self.ensure_connection() + return self._fs + + @staticmethod + def from_json_string(json_data): + + """ + Converts from a JSON string to BSON. + :param json_data: The JSON string to convert to BSON. + :return: The BSON interpretation of the input JSON string. + """ + + return loads(json_data) + + @staticmethod + def to_json_string(data, indent = 4, default = None): + + """ + Converts from a BSON to JSON string. + :param data: The input BSON data. + :param indent: The no. of spaces to put into the string for pretty print. + :param default: The default function to apply to data that cannot be converted directly. + :return: The JSON string from the input data. + """ + + return dumps(data, indent = indent, default = default) + + @staticmethod + def dict_to_dot_notation(input_dict, pk = "", s = "."): + + """ + Converts an input dict to dot notation format. Can be used as a utility to perform searches. + :param input_dict: The dict that you want to convert to dot notation. + :param pk: Parent Key. DO NOT TOUCH (meant to be used during recursion). + :param s: Separator. DO NOT TOUCH (meant to be used during recursion). + :return: The dot notation representation of the input dict. + """ + + items = [] + for k, v in input_dict.items(): + new_key = f"{pk}{s}{k}" if pk else k + if isinstance(v, dict) and v: items.extend(AsyncMongoBase.dict_to_dot_notation(v, new_key, s = s).items()) + else: items.append((new_key, v)) + return dict(items) + + @staticmethod + def normalize_date_time(document): + + """ + MongoDB doesn't support timezones. A good strategy would be to convert everything to UTC format and store it. + This method does exactly that. Any datetime object is converted to UTC timezone. If the datetime object was + timezone naive, UTC timezone will be applied to it without changing the time value. + :param document: The document that you want to normalize the date-time in. + :return: The document with normalized datetime. + """ + + if isinstance(document, datetime.datetime): + utc_tz = pytz.timezone("UTC") + if document.tzinfo is None: document = utc_tz.localize(document) + else: document = document.astimezone(utc_tz) + + if type(document) is list: + document = [AsyncMongoBase.normalize_date_time(item) for item in document] + + if type(document) is dict: + document = { + AsyncMongoBase.normalize_date_time(k): AsyncMongoBase.normalize_date_time(v) + for k, v in document.items() + } + + return document + + @staticmethod + def read_to_ram(file_path): + + """ + Reads a file into a BytesIO object in RAM. + :param file_path: The path to the file on disk. + :return: The file in a BytesIO object. + """ + + with open(file_path, "rb") as file: file_data = file.read() + file_in_ram = io.BytesIO(file_data) + file_in_ram.seek(0) + return file_in_ram + + +# --------------------------------------------------------------------------------------------------------------------- + + +class AsyncMongo(AsyncMongoBase): + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + async def list_indexes( + self, + collection, + session = None, + raise_exception = False + ): + + """ + Lists out the indexes of a collection. + :param collection: The collection whose indexes you want to list out, + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The list of indexes or None if the action fails. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + indexes = None + + # Try to list the indexes: + try: + responses = await self._db[collection].list_indexes(session = session).to_list(None) + indexes = [{key: value for key, value in response.items()} for response in responses] + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return indexes + + async def create_index( + self, + collection, + keys, + options = None, + session = None, + raise_exception = False + ): + + """ + Creates an index on a collection. + :param collection: The collection to create the index on. + :param keys: The keys (and sorting) to implement the index on. + :param options: Additional config. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the execution. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Try to make the insertion: + try: + options = options or {} + keys = [(k, v) for k, v in keys.items()] + response = await self._db[collection].create_index(keys, session = session, **options) + if response: success = True + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return success + + async def count( + self, + collection, + filter, + session = None, + raise_exception = False + ): + + """ + Counts the no. of documents that match the given filter condition. + :param collection: The name of the collection to count in. + :param filter: The filter criteria that the documents must satisfy to be counted. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The count if the operation was performed successfully or None is something went wrong and the exception + was suppressed. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = None + + # try to query the data: + try: count = await self._db[collection].count_documents(filter, session = session) + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return count + + async def insert_one( + self, + collection, + document, + session = None, + raise_exception = False + ): + + """ + Insert data into a collection. + :param collection: The collection you want to feed the data into. + :param document: The data to be stored. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The id of the inserted data, or null if the action fails. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + inserted_id = None + + # Try to make the insertion: + try: + response = await self._db[collection].insert_one(document.copy(), session = session) + inserted_id = response.inserted_id + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return inserted_id + + async def insert_many( + self, + collection, + documents, + session = None, + raise_exception = False + ): + + """ + Insert a lot of data into a collection. + :param collection: The collection you want to feed the data into. + :param documents: The list of documents to be stored. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The id of the inserted data, or null if the action fails. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + inserted_ids = [] + + # Try to make the insertion: + try: + response = await self._db[collection].insert_many(documents, session = session) + inserted_ids = response.inserted_ids + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return inserted_ids + + async def find_one( + self, + collection, + filter, + projection = None, + session = None, + raise_exception = False + ): + + """ + Finds one record that matches the given conditions. + :param collection: The name of the collection to perform the search in. + :param filter: The filter criteria. + :param projection: What parts of the matching data you want to fetch. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The matching record or null if there was an exception. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + results = None + + # try to query the data: + try: results = await self._db[collection].find_one(filter, projection, session = session) + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Check results and return: + return results + + async def find_many( + self, + collection, + filter, + projection = None, + skip = 0, + limit = None, + sort = None, + session = None, + raise_exception = False + ): + + """ + Finds one or more records that match the given conditions. + :param collection: The name of the collection to perform the search in. + :param filter: The filter criteria. + :param projection: What parts of the matching data you want to fetch. + :param skip: The no. of records to skip before picking next ones. Needed for pagination. + :param limit: The max. no. of records you want to fetch. + :param sort: The sorting rules to apply. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The array of matching records or null if there was an exception. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + results = None + + # Assume defaults: + if sort is None: sort = {"_id": -1} + if limit is None: limit = 10 + + # try to query the data: + try: + results = await self._db[collection].find( + filter, + projection, + sort = sort, + skip = skip, + limit = limit, + session = session + ).to_list(None) + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return results + + async def update_one( + self, + collection, + filter = None, + update = None, + upsert = False, + session = None, + raise_exception = False + ): + + """ + Update one document. + :param collection: The collection you want to update. + :param filter: The selection criteria to locate the document to update. + :param update: The values you want to update. + :param upsert: If you want to insert if the document doesn't already exist. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Try to make the update: + try: + response = await self._db[collection].update_one( + filter, + update, + upsert = upsert, + session = session + ) + success = True if response.modified_count > 0 or response.upserted_id else False + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return success + + async def update_many( + self, + collection, + filter = None, + update = None, + upsert = False, + session = None, + raise_exception = False + ): + + """ + Update many documents. + :param collection: The collection you want to update. + :param filter: The selection criteria to locate the document to update. + :param update: The values you want to update. + :param upsert: If you want to insert if the document doesn't already exist. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The no. of records that were affected. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + update_count = 0 + + # Try to make the insertion: + try: + response = await self._db[collection].update_many( + filter, + update, + upsert = upsert, + session = session + ) + update_count = response.modified_count + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return update_count + + async def find_one_and_update( + self, + collection, + filter = None, + update = None, + projection = None, + return_updated = False, + upsert = False, + session = None, + raise_exception = False + ): + + """ + Update one document. + :param collection: The collection you want to update. + :param filter: The selection criteria to locate the document to update. + :param update: The values you want to update. + :param projection: What parts of the matching data you want to fetch. + :param return_updated: To choose whether you want to retrieve the original document or the updated document. + :param upsert: If you want to insert if the document doesn't already exist. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The fetched document. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + document = None + + # Try to make the update: + try: + document = await self._db[collection].find_one_and_update( + filter, + update, + projection = projection, + return_document = return_updated, + upsert = upsert, + session = session + ) + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return document + + async def replace_one( + self, + collection, + filter, + replacement, + upsert = False, + session = None, + raise_exception = False + ): + + """ + To delete one document from a collection. + :param collection: The collection from which you want to delete many records. + :param filter: The filter criteria. + :param replacement: The data to put in place of the existing document. + :param upsert: If you want to insert if the document doesn't already exist. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # try to query the data: + try: + result = await self._db[collection].replace_one( + filter, + replacement, + upsert = upsert, + session = session + ) + if result.modified_count or result.upserted_id: success = True + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return success + + async def find_one_and_replace( + self, + collection, + filter, + replacement, + projection = None, + return_replaced = False, + upsert = False, + session = None, + raise_exception = False + ): + + """ + To delete one document from a collection. + :param collection: The collection from which you want to delete many records. + :param filter: The filter criteria. + :param replacement: The data to put in place of the existing document. + :param projection: What parts of the matching data you want to fetch. + :param return_replaced: To choose whether you want to retrieve the original document or the updated document. + :param upsert: If you want to insert if the document doesn't already exist. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + document = None + + # try to query the data: + try: + document = await self._db[collection].find_one_and_replace( + filter, + replacement, + projection = projection, + return_document = return_replaced, + upsert = upsert, + session = session + ) + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return document + + async def delete_one( + self, + collection, + filter, + session = None, + raise_exception = False + ): + + """ + To delete one document from a collection. + :param collection: The collection from which you want to delete many records. + :param filter: The filter criteria. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # try to query the data: + try: + result = await self._db[collection].delete_one(filter, session = session) + success = True if result.deleted_count else False + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return success + + async def delete_many( + self, + collection, + filter, + session = None, + raise_exception = False + ): + + """ + To delete many documents from a collection. + WARNING: sending {} in the filter would mean deleting ALL the documents. + :param collection: The collection from which you want to delete many records. + :param filter: The filter criteria. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = 0 + + # try to query the data: + try: + result = await self._db[collection].delete_many(filter, session = session) + count = result.deleted_count + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return count + + async def find_one_and_delete( + self, + collection, + filter, + projection = None, + session = None, + raise_exception = False + ): + + """ + To delete one document from a collection. + :param collection: The collection from which you want to delete a record. + :param filter: The filter criteria. + :param projection: What parts of the matching data you want to fetch. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The document that matched your criteria or None. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + document = None + + # try to query the data: + try: + document = await self._db[collection].find_one_and_delete( + filter, + projection = projection, + session = session + ) + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return document + + async def bulk_write( + self, + collection, + requests, + session = None, + raise_exception = False + ): + + """ + To perform various individual operations in one go. You will have to import individual actions like "UpdateOne" + and "InsertMany" from PyMongo and pass them as an array of requests (operations) to this method. + :param collection: The collection you want to run the requests on. + :param requests: The array of requests (operations) to be performed. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The no of operations done. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = 0 + + # try to query the data: + try: + response = await self._db[collection].bulk_write(requests, session = session) + count = response.modified_count + response.inserted_count + response.upserted_count + response.deleted_count + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return count + + async def aggregate( + self, + collection, + pipeline, + limit = None, + session = None, + raise_exception = False + ): + + """ + Perform an advance query on the data. + :param collection: The collection to perform the query on. + :param pipeline: The pipeline of actions to take. Must be a list. + :param limit: The max. no. of records to retrieve. preferably apply the limit from within the pipeline. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The array of matching records or null if there was an exception. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + results = None + + # try to perform the aggregation action: + try: results = await self._db[collection].aggregate(pipeline, session = session).to_list(limit) + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return results + + +# --------------------------------------------------------------------------------------------------------------------- + + +class AsyncMongoStorage(AsyncMongo): + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + async def easy_upload( + self, + source, + file_name: str, + file_metadata: dict = None, + file_id = None, + chunk_size: int = None, + session = None, + raise_exception = False + ): + + """ + Easily write one file to MongoDB's GridFS. Ideal for directly uploading small files without having to worry + about any internal mechanisms. + :param source: The actual file, supplied as either a path string or a file-like object, to be written to the + database. + :param file_name: The name of the file as it will be stored on (and retrieved from) GridFS. + :param file_metadata: Any metadata to later search the file by. + :param file_id: Any custom id to be given to the file. TRY STICKING TO THE ID GENERATED BY 'generate_id'. + :param chunk_size: The chunk size (in bytes) to use for storing this file. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The id of the inserted file or None if the upload failed. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + inserted_id = None + + # Try to write the file: + try: + + # Input pre-processing: + if isinstance(source, io.BytesIO): source.seek(0) + elif isinstance(source, str): source = open(source, mode = "rb") + + # If no file id was supplied: + if file_id is None: + inserted_id = await self._fs.upload_from_stream( + filename = file_name, + source = source, + metadata = file_metadata, + chunk_size_bytes = chunk_size, + session = session + ) + + # If a file id was supplied: + else: + await self._fs.upload_from_stream_with_id( + file_id = file_id, + filename = file_name, + source = source, + metadata = file_metadata, + chunk_size_bytes = chunk_size, + session = session + ) + inserted_id = file_id + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return inserted_id + + async def easy_download( + self, + destination, + file_id = None, + file_name = None, + session = None, + raise_exception = False + ): + + """ + Easily read one file from MongoDB's GridFS. Ideal for directly downloading small files without having to worry + about any internal mechanisms. + :param destination: The path on the local disk or a buffer in RAM to save the downloaded data to. + :param file_id: (RECOMMENDED) the id of the save file. + :param file_name: The name of the saved file. NOT RECOMMENDED because you could have many files with the same + name. The best way to tell files apart if from the id. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. The contents of the stored file are written + directly to the destination. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Try to read the file: + try: + + # Input pre-processing: + if isinstance(destination, str): destination = open(destination, mode = "wb") + + # If a file id is supplied (preferred way): + if file_id is not None: + await self._fs.download_to_stream( + destination = destination, + file_id = file_id, + session = session + ) + if isinstance(destination, io.BytesIO): destination.seek(0) + success = True + + # If a file name is supplied: + elif file_name is not None: + await self._fs.download_to_stream_by_name( + destination = destination, + filename = file_name, + session = session + ) + if isinstance(destination, io.BytesIO): destination.seek(0) + success = True + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return success + + async def count_files( + self, + filter, + session = None, + raise_exception = False + ): + + """ + Counts the no. of documents that match the given filter condition. + :param filter: The filter criteria that the documents must satisfy to be counted. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The count if the operation was performed successfully or None is something went wrong and the exception + was suppressed. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = None + + # try to query the data: + try: count = await self._db["fs.files"].count_documents(filter, session = session) + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return count + + async def find_one_file( + self, + filter, + projection = None, + session = None, + raise_exception = False + ): + + """ + Finds one record that matches the given conditions. This does NOT return the file itself, it returns the record + that describes the file. + :param filter: The filter criteria. + :param projection: What parts of the matching data you want to fetch. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The matching record or null if there was an exception. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + results = None + + # try to query the data: + try: results = await self._db["fs.files"].find_one(filter, projection, session = session) + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Check results and return: + return results + + async def find_many_files( + self, + filter, + projection = None, + skip = 0, + limit = None, + sort = None, + session = None, + raise_exception = False + ): + + """ + Finds one or more records that match the given conditions. This doesn't return any actual files directly, it + returns the records that describe the files. + :param filter: The filter criteria. + :param projection: What parts of the matching data you want to fetch. + :param skip: The no. of records to skip before picking next ones. Needed for pagination. + :param limit: The max. no. of records you want to fetch. + :param sort: The sorting rules to apply. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The array of matching records or null if there was an exception. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + results = None + + # Assume defaults: + if sort is None: sort = {"_id": -1} + if limit is None: limit = 10 + + # try to query the data: + try: + results = await self._db["fs.files"].find( + filter, + projection, + session = session + ).sort(sort).skip(skip).limit(limit).to_list(None) + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return results + + async def update_metadata_for_one_file( + self, + filter: dict, + unset_data: dict = None, + set_data: dict = None, + session = None, + raise_exception = False + ): + + """ + Updates the metadata for one file. + :param filter: The conditions to filter the files by. + :param unset_data: The fields that you want to discard. + :param set_data: The fields that you want to add or update. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Try to make the update: + try: + + # Input pre-processing: + update = {} + if unset_data is not None: update["$unset"] = self.dict_to_dot_notation({"metadata": unset_data}) + if set_data is not None: update["$set"] = self.dict_to_dot_notation({"metadata": set_data}) + + # Actual update happens here: + if update: + response = await self._db["fs.files"].update_one( + filter, + update, + session = session + ) + success = False if response.modified_count == 0 else True + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return success + + async def update_metadata_for_many_files( + self, + filter: dict, + unset_data: dict = None, + set_data: dict = None, + session = None, + raise_exception = False + ): + + """ + Updates the metadata for many files. Practically the same as 'update_metadata_for_one' except that the scope of + the modifications is far wider. + :param filter: The conditions to filter the files by. + :param unset_data: The fields that you want to discard. + :param set_data: The fields that you want to add or update. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = None + + # Try to make the update: + try: + + # Input pre-processing: + update = {} + if unset_data is not None: update["$unset"] = self.dict_to_dot_notation({"metadata": unset_data}) + if set_data is not None: update["$set"] = self.dict_to_dot_notation({"metadata": set_data}) + + # Actual update happens here: + if update: + response = await self._db["fs.files"].update_many( + filter, + update, + session = session + ) + count = response.modified_count + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return count + + async def replace_metadata_for_one_file( + self, + filter: dict, + replacement, + session = None, + raise_exception = False + ): + + """ + Updates the metadata for one file. + :param filter: The conditions to filter the files by. + :param replacement: The new metadata to put inplace of the old one. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Try to make the update: + try: + + # Actual update happens here: + result = await self._db["fs.files"].update_one( + filter, + {"$set": {"metadata": replacement}}, + upsert = False, + session = session + ) + if result.modified_count or result.upserted_id: success = True + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return success + + async def replace_metadata_for_many_files( + self, + filter: dict, + replacement, + session = None, + raise_exception = False + ): + + """ + Updates the metadata for one file. + :param filter: The conditions to filter the files by. + :param replacement: The new metadata to put inplace of the old one. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = None + + # Try to make the update: + try: + + # Actual update happens here: + response = await self._db["fs.files"].update_many( + filter, + {"$set": {"metadata": replacement}}, + session = session + ) + count = response.modified_count + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return count + + async def delete_file_by_id( + self, + file_id, + session = None, + raise_exception = False + ): + + """ + Deletes one file by the file's id. Deleting files is different from deleting simple documents because, in files, + you also need to clear out the chunks (which are stored in a separate collection). The built-in mechanism of + Motor only provides support to delete by the file's id. + :param file_id: The id of the file that you want to delete. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Try to read the file: + try: + + # Delete the file: + await self._fs.delete(file_id = file_id, session = session) + success = True + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return success + + async def delete_one_file( + self, + filter, + session = None, + raise_exception = False + ): + + """ + To delete one document from a collection. + :param filter: The filter criteria. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: True or False based on the success of the operation. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + success = False + + # Find one file that matches the given filter: + file = await self.find_one( + collection = "fs.files", + filter = filter, + session = session, + raise_exception = raise_exception + ) + + # If we have a list of files to work with: + if file: success = await self.delete_file_by_id(file["_id"]) + + # Done here: + return success + + async def delete_many_files( + self, + filter, + session = None, + raise_exception = False + ): + + """ + To delete many documents from a collection. + WARNING: sending {} in the filter would mean deleting ALL the documents. + :param filter: The filter criteria. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The number of files deleted (can be zero) or None if something failed while searching the files. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + count = 0 + + # Find all the files that match the given filter: + files = await self.find_many( + filter = filter, + session = session, + raise_exception = raise_exception + ) + + # If we have a list of files to work with: + if files is not None: + tasks = [self.delete_file_by_id(file["_id"]) for file in files] + results = await asyncio.gather(*tasks) + count = sum(results) + + # Done here: + return count + + async def get_upload_stream( + self, + file_name: str, + file_metadata: dict = None, + file_id = None, + chunk_size: int = None, + session = None, + raise_exception = False + ): + + """ + Returns a GridIn object so that you can perform your own upload using the built-in writing methods. You must use + the 'write' method to write data to the file by passing it either a string of bytes or a file-like object. When + the file has been fully written, you must call the 'close' method to finish the operation. In case you need to + cancel the operation, you can call the 'abort' method to delete all the already written data and stop uploading + new data. + :param file_name: The name of the file as it will be stored on (and retrieved from) GridFS. + :param file_metadata: Any metadata to later search the file by. + :param file_id: Any custom id to be given to the file. TRY STICKING TO THE ID GENERATED BY 'generate_id'. + :param chunk_size: The chunk size (in bytes) to use for storing this file. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The upload stream that implements the 'write', 'close', and 'abort' methods, or None if something + failed. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + stream = None + + # Try to open the upload stream: + try: + + # If no file id was supplied: + if file_id is None: + stream = self._fs.open_upload_stream( + filename = file_name, + metadata = file_metadata, + chunk_size_bytes = chunk_size, + session = session + ) + + # If a file id was supplied: + else: + stream = self._fs.open_upload_stream_with_id( + file_id = file_id, + filename = file_name, + metadata = file_metadata, + chunk_size_bytes = chunk_size, + session = session + ) + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return stream + + async def get_download_stream( + self, + file_id = None, + file_name = None, + session = None, + raise_exception = False + ): + + """ + Returns a GridOut object so that you can implement your own download logic using the built-in 'read' method. + Once the reading is done, use the 'close' method to release the resources used by the stream. + :param file_id: (RECOMMENDED) the id of the save file. + :param file_name: The name of the saved file. NOT RECOMMENDED because you could have many files with the same + name. The best way to tell files apart if from the id. + :param session: The session if you need to do this in a transaction. + :param raise_exception: Whether, or not, you want to raise an exception when something fails. + :return: The download stream that implements the 'read' and 'close' methods, or None if something failed. + """ + + # Ensure you are connected: + await self.ensure_connection() + + # Assume failure: + stream = None + + # Try to open a download stream: + try: + + # If a file id is supplied (preferred way): + if file_id is not None: + stream = await self._fs.open_download_stream( + file_id = file_id, + session = session + ) + + # If a file name is supplied: + elif file_name is not None: + stream = await self._fs.open_download_stream_by_name( + filename = file_name, + session = session + ) + + # When something goes wrong: + except Exception as exception: + self._printer(exception) + if raise_exception: raise + + # Done here: + return stream + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + from shared import constants + + async def main(): + + # Create an instance of the database connector: + my_db = AsyncMongo( + connection_string = constants.MONGO_DATA_CONNECTION_STRING, + database_name = constants.MONGO_DATA_DATABASE_NAME, + max_connections = 10, + debug = True + ) + + # Connect to the database: + await my_db.connect() + + # # Get the documents to migrate: + # documents = await my_db.find_many( + # collection = "scriptData", + # filter = {}, + # limit = 50, + # projection = {"_id": False} + # ) + # # print(json.to_string(documents, default = str)) + # + # # Adjust them: + # adjusted_documents = [] + # for document in documents: + # script_id = document.pop("scriptId") + # adjusted_document = { + # "scriptId": script_id, + # "desc": "no desc", + # "content": document + # } + # adjusted_documents.append(adjusted_document) + # print(json.to_string(adjusted_documents, default = str)) + # + # # Insert the adjusted ones to the new collection: + # response = await my_db.insert_many( + # collection = "_scriptData", + # documents = adjusted_documents + # ) + # print("RESPONSE:", response) + + + asyncio.run(main()) diff --git a/database/async_mysql_v2.py b/database/async_mysql_v2.py new file mode 100644 index 0000000..29d5efb --- /dev/null +++ b/database/async_mysql_v2.py @@ -0,0 +1,451 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 30th Aug., 2024 + + OBJECTIVE: + + To be able to access SQL-based databases from python in a simple way. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# MySQL Database: +import aiomysql +import decimal + +# For data-crunching: +import pandas as pd + +# For time-keeping: +import time + +# OS-level operations: +import os + +# My utils: +from utils_v2.string import json + +# For async activities: +import asyncio + +# For debugging: +from icecream import IceCreamDebugger +import traceback + +# To work with datatypes: +from typing import List + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncMySQL: + + def __init__( + self, + pool_size, + *args, + **kwargs + ): + + """ + A class to work with SQL-based databases. Originally meant to only invoke stored procedures and retrieve them as + JSON-like structures (list or dict). The format for the results was very specific to our use case for serving + Bicree's requirement. This may not serve your requirement at all. + :param pool_size: The number of connections to maintain n a pool. + :param args: Any arguments to pass. Not used. + :param kwargs: Pass the connection configuration from here. + """ + + # Set up the variables: + self.__args = args + self.__kwargs = kwargs + self.__min_pool_size = 10 + self.__max_pool_size = max(pool_size, self.__min_pool_size) + self.__pool: aiomysql = None + + # For establishing connection: + self.__exclusive_semaphore = asyncio.Semaphore(1) + + # Minor adjustments for backward compatibility: + self.__kwargs["db"] = self.__kwargs.pop("database") + + # Set up the debugging tools: + self.__printer = IceCreamDebugger(prefix = "MySQL | ", includeContext = True) + + def __del__(self): + pass + + async def connect(self) -> bool: + + """ + Establish a connection and create a pool of connections to call from. + :return: True if connected, else False + """ + + try: + + # Ensure that only one connection attempt is being made at one time, + # and try to connect to the database: + async with self.__exclusive_semaphore: + if self.__pool is None: + self.__pool = await aiomysql.create_pool( + minsize = self.__min_pool_size, + maxsize = self.__max_pool_size, + loop = asyncio.get_event_loop(), + **self.__kwargs + ) + + # In case of any exception: + except Exception as exception: + self.__printer(exception) + self.__pool = None + + # Done here: + return False if self.__pool is None else True + + async def disconnect(self) -> bool: + + try: + + # Try to close the pool and wait for the process to complete: + self.__pool.close() + await self.__pool.wait_closed() + + # In case of any exception: + except Exception as exception: + self.__printer(exception) + + # Done here: + return False if self.__pool is None else True + + async def ensure_connection(self): + + """ + Tries to ensure that a connection is present. + Can be called before every function to make sure that our pool is established. + :return: None. + """ + + if self.__pool is None: await self.connect() + + @staticmethod + def __parse_row(row): + + """ + Converts from the custom objects of 'aiomysql' to types that are supported by Python. + :param row: The row from the result. + :return: The parsed row which will have types that are closer to being native to Python.. + """ + + parsed_row = [] + for item in row: + if isinstance(item, decimal.Decimal): parsed_row.append(float(item)) + else: parsed_row.append(item) + return parsed_row + + async def fetch_all(self, cursor): + + # Make a variable to hold all the result sets. + # Needed for when the procedure responds with many "tables": + all_result_sets = [] + + # Iterate over all result sets, + # and process them one-by-one: + while True: + + # Process the current result set: + this_result_set = [] + result = await cursor.fetchall() + if not cursor.description: break + columns = [desc[0] for desc in cursor.description] + for row in result: this_result_set.append(dict(zip(columns, self.__parse_row(row)))) + all_result_sets.append(this_result_set) + + # Move to the next set, + # or break out of the loop if all done: + if not await cursor.nextset(): break + + # Done here: + return all_result_sets + + async def call_procedure( + self, + procedure_name: str, + procedure_args: tuple, + commit: bool = True + ): + + """ + To call stored procedures and retrieve all the responses. + :param procedure_name: The name of the stored procedure that must be called. + :param procedure_args: The args to be sent to the stored procedure. + :param commit: Whether, or not, you would like to commit the execution. + :return: The raw result set as received from the database. + """ + + # Make sure we have a connection: + await self.ensure_connection() + + # Make a variable to hold all the result sets. + # Needed for when the procedure responds with many "tables": + all_result_sets = [] + + # Call the procedure and get the results: + async with self.__pool.acquire() as connection: + async with connection.cursor() as cursor: + await cursor.callproc(procedure_name, procedure_args) + all_result_sets = await self.fetch_all(cursor) + if commit: await connection.commit() + + # Done here: + return all_result_sets + + async def call_procedure_and_get_json( + self, + procedure_name, + procedure_args, + commit: bool = True, + retry_count = 1, + backoff_seconds = 0.5, + backoff_multiplier = 1.1, + return_exception = False + ): + + """ + The method to call when you need to call a stored procedure and retrieve the response as a JSON-like object. + This is custom formatting based on the structure created by Mr. bhushan Thakkar in late April (2024). + :param procedure_name: The name of the stored procedure that must be called. + :param procedure_args: The args to be sent to the stored procedure. + :param commit: Whether, or not, you would like to commit the execution. + :param retry_count: The max. number of times to try in case one or more attempts fail. + :param backoff_seconds: The time to wait before making the next attempt if the retry count is more than 1. + :param backoff_multiplier: The factor that dictates how much to modify the time delay by when waiting to retry. + :param return_exception: Whether, or not, you would like to return the exception object if something goes wrong. + :return: The formatted response and the exception (if asked for). + """ + + # Note down the start time: + start_ts = time.time() + + # Try to get the data from the database: + results = [] + exception = None + for _ in range(retry_count): + try: results = await self.call_procedure( + procedure_name = procedure_name, + procedure_args = procedure_args, + commit = commit + ) + except Exception as exc: exception = exc + if exception is None: break + await asyncio.sleep(backoff_seconds) + backoff_seconds = backoff_seconds * backoff_multiplier + + # If the results are blank: + if len(results) == 0: + formatted_results = { + "status": 0, + "message": "Please contact admin (NE)" if exception is None else "Please contact admin (E)", + "seconds": time.time() - start_ts, + "data": {} + } + if return_exception: return formatted_results, exception + else: return formatted_results + + # Extract the very basic success or failure indicators: + formatted_results = { + "status": results[0][0]["status"], + "message": results[0][0].get("message", "ok"), + "seconds": 0.0, + "data": {} + } + + # Handle the remaining keys of the zeroth result set: + for key, value in results[0][0].items(): + if key not in formatted_results.keys(): + formatted_results["data"][key] = value + + # Format + for index in range(len(results)): + if index > 0: formatted_results["data"][f"rs{index-1}"] = results[index] + + # Note down the time taken: + formatted_results["seconds"] = time.time() - start_ts + + # Done here: + if return_exception: return formatted_results, exception + else: return formatted_results + + async def execute_one( + self, + query: str, + commit: bool = True, + return_exception: bool = False + ): + + """ + Runs one command / query in SQL. + :param query: The query / command to run. + :param commit: Whether, or not, you would like to commit the execution. + :param return_exception: Whether, or not, you would like to return the exception from this function. + :return: Either just the result or the result and the exception. + """ + + # Make sure we have a connection: + await self.ensure_connection() + + # Start by assuming failure: + rows_affected = None + results = None + excp = None + + try: + + # Get a connection and execute the command: + async with self.__pool.acquire() as connection: + async with connection.cursor() as cursor: + rows_affected = await cursor.execute(query) + results = await self.fetch_all(cursor) + if commit: await connection.commit() + + # SQL-specific errors: + except aiomysql.MySQLError as exception: + self.__printer("SQL Exception", exception) + excp = exception + + # Other errors: + except Exception as exception: + self.__printer("Other Exception", exception) + excp = exception + + # Done here: + if return_exception: return rows_affected, results, excp + else: return rows_affected, results + + async def execute_many( + self, + query: str, + data: List[tuple | List], + commit: bool = True, + return_exception: bool = False + ): + + """ + Runs many commands / queries in SQL. + Consider the following example: + QUERY: "INSERT INTO pincodeMaster (pincode, city, state) VALUES (%s, %s, %s);" + DATA: [ + ('110001', 'New Delhi', 'Delhi'), + ('500001', 'Hyderabad', 'Telangana'), + ('600001', 'Chennai', 'Tamil Nadu') + ] + :param query: The query / command to run. + :param data: The data to substitute into the query string. + :param commit: Whether, or not, you would like to commit the execution. + :param return_exception: Whether, or not, you would like to return the exception from this function. + :return: Either just the result or the result and the exception. + """ + + # Make sure we have a connection: + await self.ensure_connection() + + # Start by assuming failure: + rows_affected = None + results = None + excp = None + + try: + + # Get a connection and execute the command: + async with self.__pool.acquire() as connection: + async with connection.cursor() as cursor: + rows_affected = await cursor.executemany(query, data) + results = await self.fetch_all(cursor) + if commit: await connection.commit() + + # SQL-specific errors: + except aiomysql.MySQLError as exception: + self.__printer("SQL Exception", exception) + excp = exception + + # Other errors: + except Exception as exception: + self.__printer("Other Exception", exception) + excp = exception + + # Done here: + if return_exception: return rows_affected, results, excp + else: return rows_affected, results + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/dataframe/__init__.py b/dataframe/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dataframe/splitter.py b/dataframe/splitter.py new file mode 100644 index 0000000..7725905 --- /dev/null +++ b/dataframe/splitter.py @@ -0,0 +1,118 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 22nd Oct., 2024 + + OBJECTIVE: + + To provide an easy way to split dataframes into chunks and divide the workload nto more manageable batches. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + + USAGE EXAMPLE: + + for sub_df in DataFrameSplitter(df, chunk_size = 50): + + # Do your task here: + pass + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class DataFrameSplitter: + + def __init__(self, df, chunk_size): + + """ + Use this to process your dataframe in batches. Useful for when you need to send out alerts at intervals or need + to maintain checkpoints. + :param df: The dataframe to iterate over. + :param chunk_size: The max. no. of rows to pick at once. + """ + + self.df = df + self.row_count = df.shape[0] + self.chunk_size = chunk_size + self.offset = 0 + + def __iter__(self): + self.offset = 0 + return self + + def __next__(self): + if self.offset >= self.row_count: + raise StopIteration + end = self.offset + self.chunk_size + chunk = self.df.iloc[self.offset:end] + self.offset = end + return chunk + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/date_time/__init__.py b/date_time/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/date_time/date_time.py b/date_time/date_time.py new file mode 100644 index 0000000..8c31ea9 --- /dev/null +++ b/date_time/date_time.py @@ -0,0 +1,365 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 21st jun, 2024 + + OBJECTIVE: + + To provide an easy way to work with time. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For date and time handling: +from datetime import datetime, time, timedelta, tzinfo +import pytz +import tzlocal +import dateparser + +# For mathematical operations: +import math + +# To handle date-time objects from a Numpy array and Pandas Dataframe: +import numpy as np +import pandas as pd + +# To work with datatypes: +from typing import List, Literal + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# Date-Time Formats: +DATE_TIME_FORMATS = ( + "%d/%m/%y", + "%d-%b-%y", + "%d-%m-%y", + "%d.%m.%y", + "%d/%m/%Y", + "%d-%b-%Y", + "%d-%m-%Y", + "%d.%m.%Y", + "%d/%b", + "%d%m%Y", + "%Y%m%d", + "%Y/%m/%d", + "%Y-%m-%d", + "%Y-%m-%d %H:%M:%S" +) + +# Useful Timezones: +TIMEZONE_UTC = pytz.timezone("UTC") +TIMEZONE_IST = pytz.timezone("Asia/Kolkata") +TIMEZONE_ET = pytz.timezone("America/New_York") +TIMEZONE_CT = pytz.timezone("America/Chicago") +TIMEZONE_MT = pytz.timezone("America/Denver") +TIMEZONE_PT = pytz.timezone("America/Los_Angeles") +TIMEZONE_JST = pytz.timezone("Asia/Tokyo") +TIMEZONE_CET = pytz.timezone("Europe/Paris") +TIMEZONE_GMT = pytz.timezone("GMT") +TIMEZONE_AEST = pytz.timezone("Australia/Sydney") +TIMEZONE_NZST = pytz.timezone("Pacific/Auckland") +TIMEZONE_CST = pytz.timezone("Asia/Shanghai") +TIMEZONE_KST = pytz.timezone("Asia/Seoul") +TIMEZONE_MSK = pytz.timezone("Europe/Moscow") +TIMEZONE_BRT = pytz.timezone("America/Sao_Paulo") +TIMEZONE_GST = pytz.timezone("Asia/Dubai") +TIMEZONE_SAST = pytz.timezone("Africa/Johannesburg") +TIMEZONE_AST = pytz.timezone("Asia/Riyadh") + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def translate_date_time_string( + datetime_string: str, + source_format: str = None, + destination_format: str = "%Y-%m-%dT%H:%M:%S" +) -> str | None: + + """ + To convert an input datetime string to a different format. + :param datetime_string: The datetime string to translate. + :param source_format: The current format of the string. If not provided, dateparser will be used. + :param destination_format: The format to convert to. + :return: The converted datetime string. + """ + + try: + + if source_format is None: datetime_obj = dateparser.parse(datetime_string) + else: datetime_obj = datetime.strptime(datetime_string, source_format) + return datetime_obj.strftime(destination_format) + + except Exception as exception: + return None + + +# --------------------------------------------------------------------------------------------------------------------- + + +def parse_date_time( + input_value: datetime | str | int | float, + timezone: str | tzinfo = None, + date_formats: List[str] = None +) -> datetime: + + """ + To take any kind of input and interpret the datetime from it. + :param input_value: Either a string or an integer or some form of datetime representation. + :param timezone: The timezone to apply to the interpreted datetime. IF THE INPUT IS NAIVE, THIS TIMEZONE WILL BE + APPLIED AS IS, ELSE THE TIMEZONE WILL BE TRANSLATED. + :param date_formats: The string formats to consider when parsing a string input. + :return: The parsed datetime or null. + """ + + datetime_object = None + date_formats = date_formats or DATE_TIME_FORMATS + + # It could either be in seconds or milliseconds from epoch time's base date (January 1, 1970), + # or it could be days since Microsoft Excel's base date (December 31, 1899). + if isinstance(input_value, (int, float, np.number)) and not np.isnan(input_value): + if input_value > 9999999999.0: datetime_object = datetime.fromtimestamp(input_value / 1000.0) + if input_value > 999999.0: datetime_object = datetime.fromtimestamp(input_value) + else: datetime_object = datetime.fromtimestamp(input_value * 24 * 60 * 60.0) - timedelta(days = 25569) + + # The input can even be a pre-formatted date: + if isinstance(input_value, str): + datetime_object = dateparser.parse( + input_value, + date_formats = date_formats, + settings = { + "DATE_ORDER": "DMY", + "PREFER_DAY_OF_MONTH": "first", + } + ) + + # If the type is a datetime object, then return it as it is: + if isinstance(input_value, datetime): + datetime_object = input_value + + # If the type is the native datetime format of pandas: + if isinstance(input_value, pd._libs.tslibs.timestamps.Timestamp): + datetime_object = input_value.to_pydatetime() + + # Process the timezone: + if datetime_object is not None and timezone is not None: + datetime_object = to_timezone(datetime_object, timezone) + + # Done here: + return datetime_object + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_system_timezone(as_string = False) -> pytz.BaseTzInfo | str: + + """ + Returns the pytz object or name string of the machine this code is running on. + :param as_string; Set to False for a timezone object, True for the name string of the timezone. + :return: The machine's timezone or string of the name of the timezone. + """ + + tz_name = tzlocal.get_localzone_name() + return tz_name if as_string else pytz.timezone(tz_name) + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_current_date_time( + timezone: str | tzinfo = None, + as_string: bool = False +) -> datetime: + + """ + Returns the current time as a datetime object. + :param timezone: The timezone to apply to the returned datetime. + :param as_string: Whether, or not, you want the output as a string. + :return: The datetime object/string representing the current time. + """ + + if timezone is not None and isinstance(timezone, str): timezone = pytz.timezone(timezone) + now = datetime.now(timezone) + return now.isoformat() if as_string else now + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_current_ist_date_time( + as_string = False +) -> datetime: + + """ + Gives out the current time in IST timezone. + :param as_string: Whether, or not, you want the output as a string. + :return: The datetime object or string representing the current time. + """ + + return get_current_date_time( + timezone = TIMEZONE_IST, + as_string = as_string + ) + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_current_utc_date_time( + as_string: bool = False +) -> datetime: + + """ + Gives out the current time in UTC timezone. + :param as_string: Whether, or not, you want the output as a string. + :return: The datetime object or string representing the current time. + """ + + return get_current_date_time( + timezone = TIMEZONE_UTC, + as_string = as_string + ) + + +# --------------------------------------------------------------------------------------------------------------------- + + +def as_if_timezone( + datetime_object: datetime, + timezone: str | tzinfo +) -> datetime: + + """ + Ignores existing timezone info and applies the intended timezone. + The time stays the same, only the timezone marker changes. + e.g. for IST to UTC: 2024-08-09 00:00:00+05:30 --> 2024-08-09 00:00:00+00:00 + HINT: IT PRETENDS "AS IF" THE TIMEZONE WAS THE INPUT TIMEZONE. + :param datetime_object: The datetime object on which the timezone needs to be applied. + :param timezone: The timezone that needs to be applied. + :return: A timezone-aware datetime object. + """ + + tz_object = pytz.timezone(timezone) if isinstance(timezone, str) else timezone + return tz_object.localize(datetime_object.replace(tzinfo = None)) + + +# --------------------------------------------------------------------------------------------------------------------- + + +def to_timezone( + datetime_object: datetime, + timezone: str | tzinfo +) -> datetime: + + """ + Converts from one timezone to another. The time is adjusted by computing the difference between the two timezones. + NOTE: THIS FUNCTION APPLIES TH EINPUT TIMEZONE IF THE INPUT DATETIME WAS TIMEZONE-NAIVE. + e.g. for IST to UTC: 2024-08-09 00:00:00+05:30 --> 2024-08-08 18:30:00+00:00 + :param datetime_object: The datetime object on which the timezone needs to be applied. + :param timezone: The timezone that needs to be applied. + :return: A timezone-aware datetime object. + """ + + if isinstance(timezone, str): timezone = pytz.timezone(timezone) + if datetime_object.tzinfo is None: dto = as_if_timezone(datetime_object = datetime_object, timezone = timezone) + else: dto = datetime_object.astimezone(timezone) + return dto + + +# --------------------------------------------------------------------------------------------------------------------- + + +def round_date_time( + datetime_object: datetime, + rounding_seconds: int, + mode: Literal["floor", "ceil", "nearest"] = "nearest" +) -> datetime: + + """ + 'Snaps' the time to the closest 'n-second' window. For example, if you want to round the time off to the nearest + 5-minute period (maybe for use cases like trading), you set the value of seconds to 300. This way any input value + of, say, 12:01:50 AM gets converted to 12:00:00 AM; and a value of 12:02:31 AM gets converted to 12:05:00 AM. + :param datetime_object: The input datetime that you want to round off. + :param rounding_seconds: The period of rounding in seconds. 60 for 1 minute, 300 for 5 minutes and so on. + :param mode: "floor" means the previous time bucket, "ceil" means the next time bucket, and "nearest" means + whichever is closer will be picked. + :return: The rounded date-time (with the original timezone). + """ + + def round_by_mode() -> float | int: + if mode == "nearest": return round(int(total_seconds) / rounding_seconds) * rounding_seconds + if mode == "ceil": return math.ceil(int(total_seconds) / rounding_seconds) * rounding_seconds + if mode == "floor": return math.floor(int(total_seconds) / rounding_seconds) * rounding_seconds + + # For timezone-naive cases: + if datetime_object.tzinfo is None: + total_seconds = datetime_object.timestamp() + rounded_seconds = round_by_mode() + rounded_datetime = datetime.fromtimestamp(rounded_seconds) + return rounded_datetime + + # For timezone-aware cases: + else: + original_tz = datetime_object.tzinfo + _dt = to_timezone(datetime_object, timezone = original_tz) + total_seconds = _dt.timestamp() + rounded_seconds = round_by_mode() + rounded_datetime = datetime.fromtimestamp(rounded_seconds, tz = original_tz) + return rounded_datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/goog/__init__.py b/goog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/goog/controllers/__init__.py b/goog/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/goog/controllers/base.py b/goog/controllers/base.py new file mode 100644 index 0000000..62cbdfc --- /dev/null +++ b/goog/controllers/base.py @@ -0,0 +1,479 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 26th Nov., 2024 + + OBJECTIVE: + + To provide a base class for common behaviour of Google's APIs. + + REFERENCES: + + 1. Quickstart: https://developers.google.com/gmail/api/quickstart/python + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.date_time import date_time +from utils_v2.goog.models.api_call import GoogleApiResponse +from utils_v2.goog.models.auth_tokens import GoogleAuthTokens + +# Related to Google: +from google_auth_oauthlib.flow import InstalledAppFlow + +# To make API calls: +import httpx + +# To work with date and time: +import datetime + +# For working with datatypes: +from typing import Literal, List + +# For debugging: +from icecream import IceCreamDebugger +import inspect + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncGoogleBase: + + def __init__( + self, + service_name: str, + oauth_json: dict, + http_client: httpx.AsyncClient, + redirect_url: str = None, + debug = True, + debug_prefix = "Google | ", + debug_only_errors = True + ): + + """ + To initialize any Google API from one base class. The client's id and secret are available in the file + downloaded form https://console.cloud.google.com/apis/credentials (do not forget to select your app). + :param service_name: A string to identify this service. + :param oauth_json: The OAuth credentials downloaded from https://console.cloud.google.com/apis/credentials + :param http_client: An asynchronous HTTP client to make API calls. + :param redirect_url: Where you would like to receive the confirmation of the user authorization. + :param debug: Whether, or not, you would like to show debugging messages on the terminal. + :param debug_prefix: The prefix string to identify the debugging messages. + :param debug_only_errors: Whether you would like to show all debugging messages or just error messages. + """ + + # Prepare the debugging utility: + self._debug_prefix = debug_prefix + self._printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self._printer.disable() + self._debug_only_errors = debug_only_errors + + # Accept the input configuration: + self._service_name = service_name + self._http_client = http_client + self._oauth_json = oauth_json + self._client_id = self._oauth_json["web"]["client_id"] + self._client_secret = self._oauth_json["web"]["client_secret"] + self._redirect_url = redirect_url + + def enable_debug(self): + self._printer.enable() + + def disable_debug(self): + self._printer.disable() + + def debug_only_errors(self): + self._debug_only_errors = True + + def debug_everything(self): + self._debug_only_errors = False + + # ┏┓ • + # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ + # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ + # ┛ + + @property + def client_id(self): + return self._client_id + + @property + def client_secret(self): + return self._client_secret + + @property + def http_client(self): + return self._http_client + + # ┏┓┏┓ ┓ ┏┓ ┏┓ + # ┃┃┣┫┓┏╋┣┓ ┏┛ ┃┫ + # ┗┛┛┗┗┻┗┛┗ ┗━•┗┛ + + async def get_authorization_url( + self, + scopes: List[str], + state: str = None, + access_type: Literal["online", "offline"] = "offline", + approval_prompt: Literal["auto", "force", "consent"] = "auto", + include_granted_scopes: Literal["true", "false"] = "true", + user_email: str = None + ) -> str: + + """ + TO get the OAuth2.0 authorization URL for one user. + DOCUMENTATION: + 1. https://developers.google.com/identity/protocols/oauth2/web-server + :param scopes: The set of permission you want the user to give. + :param state: A unique identifier for your user. If not supplied, a random string will be generated. + :param access_type: Set the value to offline if your application needs to refresh access tokens when the user is + not present at the browser. + :param approval_prompt: "force" ensures that the consent screen is always shown to the user, regardless of + whether the user has previously granted consent for the requested scopes. It forces the user to re-approve + the app's access, which can be useful if the app is requesting new permissions or if the consent needs to be + explicitly confirmed. "consent" ensures the user's consent is required if they haven't approved the app's + requested permissions yet. "auto" allows Google to automatically determine whether the consent screen should + be shown. + :param include_granted_scopes: Enables applications to use incremental authorization to request access to + additional scopes in context. If you set this parameter's value to true and the authorization request is + granted, then the new access token will also cover any scopes to which the user previously granted the + application access. + :param user_email: + :return: + """ + + # Create a flow: + flow = InstalledAppFlow.from_client_config( + self._oauth_json, + scopes = scopes, + redirect_uri = self._redirect_url + ) + + # Get an authorization URL: + auth_url, state = flow.authorization_url( + access_type = access_type, + approval_prompt = approval_prompt, + include_granted_scopes = include_granted_scopes, + login_hint = user_email, + state = state + ) + + # Done here: + return auth_url + + async def get_authorization_tokens( + self, + scopes: List[str] | None, + redirect_url: str + ) -> GoogleAuthTokens: + + """ + When the user accepts or declines an authorization request, Google sends you an alert on your redirect URL. Pass + the URL as it is to this method to generate the authorization tokens that you can store in the database and + reuse for this user's activities. + :param scopes: The set of permissions the user granted. + :param redirect_url: The exact URL that was hit (with the query params) that Google hit when the user did + something on your authorization URL. Fortunately, this URL is readily available in Quart and Flask by + calling 'request.url'. + :return: The authorization tokens. + """ + + # Create a flow: + flow = InstalledAppFlow.from_client_config( + self._oauth_json, + scopes = scopes, + redirect_uri = self._redirect_url + ) + + # Get the credentials: + credentials = flow.fetch_token(authorization_response = redirect_url) + ttl = credentials["expires_in"] - 60 + return GoogleAuthTokens( + accessToken = credentials["access_token"], + refreshToken = credentials["refresh_token"], + expiresAt = date_time.get_current_utc_date_time() + datetime.timedelta(seconds = ttl), + scopes = credentials["scope"] + ) + + # ┏┓ ┳┓ ┓• + # ┣ ┏┓┏┓┏┓┏┓ ┃┃┏┓┏┏┓┏┫┓┏┓┏┓ + # ┗┛┛ ┛ ┗┛┛ ┻┛┗ ┗┗┛┗┻┗┛┗┗┫ + # ┛ + + @staticmethod + async def __get_error_message(api_response: GoogleApiResponse) -> str: + + """ + To extract various kinds of error messages from Google's responses. + :param api_response: The formatted response from the API call. + :return: The message string. + """ + + try: return (await api_response.get_json())["error"]["message"] + except: return api_response.response.reason_phrase + + # ┏┓┏┓┳ ┏┓ ┓┓• + # ┣┫┃┃┃ ┃ ┏┓┃┃┓┏┓┏┓ + # ┛┗┣┛┻ ┗┛┗┻┗┗┗┛┗┗┫ + # ┛ + + async def get( + self, + url: str, + headers: dict = None, + params: dict = None + ) -> GoogleApiResponse: + + """ + To call an API using the GET method. + :param url: The URL to call. + :param headers: The headers to pass. + :param params: The params to send in the query string itself. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = GoogleApiResponse( + serviceName = self._service_name, + action = inspect.stack()[1].function, + url = url, + method = "GET" + ) + + try: + + # Make the API call: + response = await self._http_client.get( + url = url, + headers = headers, + params = params + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = await self.__get_error_message(api_response) + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self._printer(exception, api_response.url, api_response.method, headers, params) + + # Done here: + return api_response + + async def post( + self, + url: str, + headers: dict = None, + json: dict = None, + data: dict = None, + content: str | bytes = None + ) -> GoogleApiResponse: + + """ + To call an API using the POST method. + :param url: The URL to call. + :param headers: The headers to pass. + :param json: The params to send in the JSON body. + :param data: The params to send in the form-data in the body. + :param content: The raw content to be sent in the body (typically as an octet-stream). + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = GoogleApiResponse( + serviceName = self._service_name, + action = inspect.stack()[1].function, + url = url, + method = "POST" + ) + + try: + + # Make the API call: + response = await self._http_client.post( + url = url, + headers = headers, + json = json, + data = data, + content = content + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = await self.__get_error_message(api_response) + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self._printer(exception, api_response.url, api_response.method, headers, json, data) + + # Done here: + return api_response + + async def put( + self, + url: str, + headers: dict = None, + json: dict = None, + data: dict = None + ) -> GoogleApiResponse: + + """ + To call an API using the PUT method. + :param url: The URL to call. + :param headers: The headers to pass. + :param json: The params to send in the JSON body. + :param data: The params to send in the form-data in the body. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = GoogleApiResponse( + serviceName = self._service_name, + action = inspect.stack()[1].function, + url = url, + method = "PUT" + ) + + try: + + # Make the API call: + response = await self._http_client.put( + url = url, + headers = headers, + json = json, + data = data + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = await self.__get_error_message(api_response) + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self._printer(exception, api_response.url, api_response.method, headers, json, data) + + # Done here: + return api_response + + async def delete( + self, + url: str, + headers: dict = None + ) -> GoogleApiResponse: + + """ + To call an API using the DELETE method. + :param url: The URL to call. + :param headers: The headers to pass. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = GoogleApiResponse( + serviceName = self._service_name, + action = inspect.stack()[1].function, + url = url, + method = "DELETE" + ) + + try: + + # Make the API call: + response = await self._http_client.delete( + url = url, + headers = headers + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = await self.__get_error_message(api_response) + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self._printer(exception, api_response.url, api_response.method, headers) + + # Done here: + return api_response + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/goog/controllers/gmail/__init__.py b/goog/controllers/gmail/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/goog/controllers/gmail/gmail_client.py b/goog/controllers/gmail/gmail_client.py new file mode 100644 index 0000000..f1e3bde --- /dev/null +++ b/goog/controllers/gmail/gmail_client.py @@ -0,0 +1,977 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 25th Nov., 2024 + + OBJECTIVE: + + To manage e-mails in a GMail account. + + REFERENCES: + + 1. GMail Quickstart: https://developers.google.com/gmail/api/quickstart/python + 2. GMail Labels: https://developers.google.com/gmail/api/guides/labels + 3. GMail Messages: https://developers.google.com/gmail/api/reference/rest/v1/users.messages + 4. People Profile: https://developers.google.com/people/api/rest/v1/people/get + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time +from utils_v2.mail import mail_parser + +# My Google utils: +from utils_v2.goog.controllers.base import AsyncGoogleBase +from utils_v2.goog.models.auth_tokens import GoogleAuthTokens +from utils_v2.goog.models.api_call import GoogleApiResponse +from utils_v2.goog.controllers.gmail.gmail_message import GmailMessage + +# Related to Google: +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials +from googleapiclient.discovery import build + +# To make API calls: +import httpx + +# For asynchronous activities: +import asyncio + +# To work with date and time: +import datetime + +# For working with datatypes: +from typing import Dict, Literal, List, Any + +# For debugging: +from icecream import IceCreamDebugger +import inspect + +# For computational help: +import math + +# For base64 encoding: +import base64 + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# Google Scopes: +SCOPES_GMAIL_MAIL_MANAGEMENT = [ + r"https://www.googleapis.com/auth/gmail.modify", + r"https://www.googleapis.com/auth/gmail.labels", + # r"profile", + r"https://www.googleapis.com/auth/userinfo.profile" +] +SCOPES_GMAIL_FULL = [ + r"https://mail.google.com/", + # r"profile", + r"https://www.googleapis.com/auth/userinfo.profile" +] + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncGmailClient(AsyncGoogleBase): + + async def get_user_profile( + self, + tokens: GoogleAuthTokens, + user_id: str = "me", + ) -> GoogleApiResponse: + + """ + To get the list of labels of this user. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users/getProfile + 2. https://developers.google.com/people/api/rest/v1/people/get + 3. https://developers.google.com/people/api/rest/v1/people#Person + :param tokens: The object that holds the access token to the service. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the GMail API call: + if not self._debug_only_errors: self._printer("Getting User Profile.") + gmail_api_response = await self.get( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/profile", + headers = {"Authorization": f"Bearer {tokens.accessToken}"} + ) + + # If the call was successful: + if gmail_api_response.httpCode in [200]: + gmail_api_response.success = True + gmail_api_response.data = await gmail_api_response.get_json() + gmail_api_response.data["displayName"] = None + gmail_api_response.data["displayPictureUrl"] = None + + # If the call failed: + else: + self._printer( + gmail_api_response.action, + gmail_api_response.method, + gmail_api_response.httpCode, + ) + return gmail_api_response + + # Make the People API call: + if not self._debug_only_errors: self._printer("Getting User Profile.") + people_api_response = await self.get( + url = f"https://people.googleapis.com/v1/people/me?personFields=names,photos,birthdays,phoneNumbers,genders,emailAddresses,addresses", + headers = {"Authorization": f"Bearer {tokens.accessToken}"} + ) + + # If the call was successful: + if people_api_response.httpCode in [200]: + people_api_response.success = True + people_api_response.data = await people_api_response.get_json() + for item in people_api_response.data.get("names", []): + if item["metadata"]["primary"]: + gmail_api_response.data["displayName"] = item.get("displayName") + for item in people_api_response.data.get("photos", []): + if item["metadata"]["primary"]: + gmail_api_response.data["displayPictureUrl"] = item.get("url") + + # If the call failed: + else: self._printer( + people_api_response.action, + people_api_response.method, + people_api_response.httpCode, + ) + + # Done here: + return gmail_api_response + + # ┓ ┓ ┓ + # ┃ ┏┓┣┓┏┓┃┏ + # ┗┛┗┻┗┛┗ ┗┛ + + async def list_labels( + self, + tokens: GoogleAuthTokens, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To get the list of labels of this user. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.labels/list + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.labels#Label + :param tokens: The object that holds the access token to the service. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the API call: + if not self._debug_only_errors: self._printer("Listing All Labels.", user_id) + api_response = await self.get( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/labels", + headers = {"Authorization": f"Bearer {tokens.accessToken}"} + ) + + # If the call was successful: + if api_response.httpCode in [200]: + api_response.success = True + api_json = await api_response.get_json() + api_response.data = {label["name"]: label for label in api_json.get("labels", [])} + + # Done here: + return api_response + + async def get_label( + self, + tokens: GoogleAuthTokens, + label_id: str, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To get one label of this user. the label will be identified by its id. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.labels/get + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.labels#Label + :param tokens: The object that holds the access token to the service. + :param label_id: The id that Google assigned to the label. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the API call: + if not self._debug_only_errors: self._printer("Getting One Label.", user_id) + api_response = await self.get( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/labels/{label_id}", + headers = {"Authorization": f"Bearer {tokens.accessToken}"} + ) + + # If the call was successful: + if api_response.httpCode in [200]: + api_response.success = True + api_response.data = await api_response.get_json() + + # Done here: + return api_response + + async def create_label( + self, + tokens: GoogleAuthTokens, + label_name: str, + label_visibility: Literal["labelShow", "labelShowIfUnread", "labelHide"] = "labelShow", + message_visibility: Literal["show", "hide"] = "show", + label_text_color: str = "#434343", + label_background_color: str = "#000000", + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + Create one label for the user. Doesn't apply it to any mail, just creates it. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.labels/create + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.labels#Label + :param tokens: The object that holds the access token to the service. + :param label_name: The display name of the label. + :param label_visibility: Whether, or not, you would like to show the label in the web UI. + :param message_visibility: Whether, or not, you would like to show messages with this label in the web UI. + :param label_text_color: The colour of the text of the label. + :param label_background_color: The colour of the background/tag of the label. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the API call: + if not self._debug_only_errors: self._printer("Creating One Label.", user_id) + api_response = await self.post( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/labels", + headers = {"Authorization": f"Bearer {tokens.accessToken}"}, + json = { + "name": label_name, + "messageListVisibility": "show" if message_visibility else "hide", + "labelListVisibility": "labelShow" if label_visibility else "labelHide", + "color": { + "textColor": label_text_color.lower(), + "backgroundColor": label_background_color.lower() + } + } + ) + + # If the call was successful: + if api_response.httpCode in [200]: + api_response.success = True + api_response.data = await api_response.get_json() + + # Done here: + return api_response + + async def update_label( + self, + tokens: GoogleAuthTokens, + label_id: str, + label_name: str = None, + label_visibility: Literal["labelShow", "labelShowIfUnread", "labelHide"] = None, + message_visibility: Literal["show", "hide"] = None, + label_text_color: str = None, + label_background_color: str = None, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + Updates one label for the user. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.labels/update + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.labels#Label + NOTE: Both or none of the colours must be updated. For this reason, a simple default will be chosen for the + other if only one is provided. + :param tokens: The object that holds the access token to the service. + :param label_id: The id that Google assigned to the label. + :param label_name: The display name of the label. + :param label_visibility: Whether, or not, you would like to show the label in the web UI. + :param message_visibility: Whether, or not, you would like to show messages with this label in the web UI. + :param label_text_color: The colour of the text of the label. + :param label_background_color: The colour of the background/tag of the label. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Format the JSON body: + json_body = {} + if label_name: json_body["name"] = label_name + if label_visibility: json_body["labelListVisibility"] = label_visibility + if message_visibility: json_body["messageListVisibility"] = message_visibility + if label_text_color or label_background_color: + json_body["color"] = { + "textColor": (label_text_color or "#434343").lower(), + "backgroundColor": (label_background_color or "#000000").lower() + } + + # Make the API call: + if not self._debug_only_errors: self._printer("Updating One Label.", user_id) + api_response = await self.put( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/labels/{label_id}", + headers = {"Authorization": f"Bearer {tokens.accessToken}"}, + json = json_body + ) + + # If the call was successful: + if api_response.httpCode in [200]: + api_response.success = True + api_response.data = await api_response.get_json() + + # Done here: + return api_response + + async def delete_label( + self, + tokens: GoogleAuthTokens, + label_id: str, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To delete one label of this user. the label will be identified by its id. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.labels/delete + :param tokens: The object that holds the access token to the service. + :param label_id: The id that Google assigned to the label. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the API call: + if not self._debug_only_errors: self._printer("Deleting One Label.", user_id) + api_response = await self.delete( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/labels/{label_id}", + headers = {"Authorization": f"Bearer {tokens.accessToken}"} + ) + + # If the call was successful: + if api_response.httpCode in [200, 204]: + api_response.success = True + + # Done here: + return api_response + + # ┳┳┓ + # ┃┃┃┏┓┏┏┏┓┏┓┏┓┏ + # ┛ ┗┗ ┛┛┗┻┗┫┗ ┛ + # ┛ + + async def __list_messages_on_page( + self, + tokens: GoogleAuthTokens, + max_count: int = 100, + query: str = None, + label_ids: List[str] | str = None, + include_spam_and_trash: bool = False, + next_page_token: str = None, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To enlist messages on one page. Google allows at most 500 results on one page. This method respects that + pagination limit and returns only what Google gives. This method should be used internally by the class and the + class should expose another method that calls this one in loop to get any arbitrary no. of messages as the user + desires. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.messages/list + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.messages#Message + :param tokens: The object that holds the access token to the service. + :param max_count: The no. of messages to fetch. + :param query: Any query filter that is supported by GMail. + :param label_ids: The list of labels' ids that the mails must have on them. + :param include_spam_and_trash: Whether, or not, you would like to include mails categorized as spam and trash. + :param next_page_token: The token to fetch the next set of results. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Build the needed params: + params_json = { + "maxResults": max_count, + "includeSpamTrash": include_spam_and_trash + } + if query: params_json["q"] = query + if next_page_token: params_json["pageToken"] = next_page_token + if label_ids: params_json["labelIds"] = label_ids if isinstance(label_ids, list) else [label_ids] + + # Make the API call: + if not self._debug_only_errors: self._printer("Listing Messages for Page.", user_id, max_count, next_page_token) + api_response = await self.get( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/messages", + headers = {"Authorization": f"Bearer {tokens.accessToken}"}, + params = params_json + ) + + # If the call was successful: + if api_response.httpCode in [200]: + api_response.success = True + api_json = await api_response.get_json() + api_response.data = { + "messages": {m["id"]: m for m in api_json.get("messages", [])}, + "nextPageToken": api_json.get("nextPageToken"), + "resultSizeEstimate": api_json["resultSizeEstimate"], + } + + # Done here: + return api_response + + async def list_messages( + self, + tokens: GoogleAuthTokens, + max_count: int = 100, + query: str = None, + label_ids: List[str] | str = None, + include_spam_and_trash: bool = False, + next_page_token: str = None, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To enlist mail messages from a user's account. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.messages/list + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.messages#Message + :param tokens: The object that holds the access token to the service. + :param max_count: The no. of messages to fetch. + :param query: Any query filter that is supported by GMail. + :param label_ids: The list of labels' ids that the mails must have on them. + :param include_spam_and_trash: Whether, or not, you would like to include mails categorized as spam and trash. + :param next_page_token: The token to fetch the next set of results. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # We create a variable that will hold the results. + # We must supply the URL, Method and a few other params here due to the custom looping functionality: + all_messages = GoogleApiResponse( + serviceName = self._service_name, + action = inspect.stack()[0].function, + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/messages", + method = "GET", + data = { + "messages": {}, + "nextPageToken": None, + "resultSizeEstimate": 0 + } + ) + + # Let's figure out how many times we'll have to loop through the process to retrieve the target no. of + # messages. Google allows you to fetch info about at most 500 messages in one go. + max_per_call = 500 # ... because Google allows at most 500 entries in one call. + iterations_needed = int(math.ceil(max_count / max_per_call)) + last_iteration_count = max_count - int((max_per_call * (iterations_needed - 1))) + + # Run the loop those many times: + results_size_estimate = 0 + for iteration_no in range(iterations_needed): + + # Figure out the count for this page: + if iterations_needed > 1: + if iteration_no < (iterations_needed - 1): iteration_count = max_per_call + else: iteration_count = last_iteration_count + else: iteration_count = max_count + + # Retrieve the messages for this page: + iteration_response = await self.__list_messages_on_page( + tokens = tokens, + max_count = iteration_count, + query = query, + label_ids = label_ids, + include_spam_and_trash = include_spam_and_trash, + next_page_token = next_page_token + ) + + # Check if no data was received: + if ( + iteration_response.data is None or + not iteration_response.data.get("messages") + ): break + + # Now that we know that messages were received: + for k, v in iteration_response.data["messages"].items(): all_messages.data["messages"][k] = v + results_size_estimate += iteration_response.data["resultSizeEstimate"] + + # Also copy the API call params: + all_messages.httpCode = iteration_response.httpCode + all_messages.message = iteration_response.message + all_messages.success = iteration_response.success + + # If there is no next page after this, we break out of the loop: + next_page_token = iteration_response.data["nextPageToken"] + if next_page_token is None: break + + # Format the final response: + all_messages.data["nextPageToken"] = next_page_token + all_messages.data["resultSizeEstimate"] = results_size_estimate + + # Done here: + return all_messages + + async def get_message( + self, + tokens: GoogleAuthTokens, + message_id: str, + return_raw: bool = False, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To get one message of this user. The message will be identified by its id. Note that, if you choose to return + the raw message, the message body will be compliant with RFC 5322 and RFC 2045 (among others). + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.messages/get + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.messages#Message + 2. https://developers.google.com/gmail/api/reference/rest/v1/Format + :param tokens: The object that holds the access token to the service. + :param message_id: The id that Google assigned to the message. + :param return_raw: Whether you want the raw message or the formatted message. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the API call: + if not self._debug_only_errors: self._printer("Getting One Message.", user_id) + api_response = await self.get( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/messages/{message_id}", + headers = {"Authorization": f"Bearer {tokens.accessToken}"}, + params = {"format": "raw"} + ) + + # If the call was successful: + if api_response.httpCode in [200]: + api_response.success = True + api_json = await api_response.get_json() + raw_message = base64.urlsafe_b64decode(api_json["raw"]).decode() + if return_raw: api_response.data = raw_message + else: + parsed_message = mail_parser.parse(raw_message) + parsed_message["labels"] = api_json["labelIds"] + parsed_message["messageId"] = api_json["id"] + parsed_message["threadId"] = api_json["threadId"] + parsed_message["historyId"] = api_json["historyId"] + parsed_message["snippet"] = api_json["snippet"] + parsed_message["sizeEstimate"] = api_json["sizeEstimate"] + api_response.data = parsed_message + + # Done here: + return api_response + + async def modify_messages( + self, + tokens: GoogleAuthTokens, + message_ids: List[str] | str, + add_label_ids: List[str] | str = None, + remove_label_ids: List[str] | str = None, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To add or remove labels from one or more messages. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.messages/batchModify + :param tokens: The object that holds the access token to the service. + :param message_ids: One or more message ids (assigned by Google). + :param add_label_ids: One or more label ids (not the display name of the label). + :param remove_label_ids: One or more label ids (not the display name of the label). + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Build the needed JSON: + body_json = {"ids": message_ids if isinstance(message_ids, list) else [message_ids]} + if add_label_ids: body_json["addLabelIds"] = add_label_ids if isinstance(add_label_ids, list) else [add_label_ids] + if remove_label_ids: body_json["removeLabelIds"] = remove_label_ids if isinstance(remove_label_ids, list) else [remove_label_ids] + + # Make the API call: + if not self._debug_only_errors: self._printer("Modifying Message(s).", user_id) + api_response = await self.post( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/messages/batchModify", + headers = {"Authorization": f"Bearer {tokens.accessToken}"}, + json = body_json + ) + + # If the call was successful: + if api_response.httpCode in [200, 204]: + api_response.success = True + + # Done here: + return api_response + + async def delete_messages( + self, + tokens: GoogleAuthTokens, + message_ids: List[str] | str, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To PERMANENTLY delete one or more messages. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.messages/batchDelete + :param tokens: The object that holds the access token to the service. + :param message_ids: One or more message ids (assigned by Google). + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the API call: + if not self._debug_only_errors: self._printer("Deleting Message(s).", user_id) + api_response = await self.post( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/messages/batchDelete", + headers = {"Authorization": f"Bearer {tokens.accessToken}"}, + json = {"ids": message_ids if isinstance(message_ids, list) else [message_ids]} + ) + + # If the call was successful: + if api_response.httpCode in [200, 204]: + api_response.success = True + + # Done here: + return api_response + + async def trash_message( + self, + tokens: GoogleAuthTokens, + message_id: str, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To move one message to trash. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.messages/trash + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.messages#Message + :param tokens: The object that holds the access token to the service. + :param message_id: The id of the message (assigned by Google). + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the API call: + if not self._debug_only_errors: self._printer("Trashing One Message.", user_id) + api_response = await self.post( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/messages/{message_id}/trash", + headers = {"Authorization": f"Bearer {tokens.accessToken}"}, + ) + + # If the call was successful: + if api_response.httpCode in [200, 204]: + api_response.success = True + api_response.data = await api_response.get_json() + + # Done here: + return api_response + + async def untrash_message( + self, + tokens: GoogleAuthTokens, + message_id: str, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To move one message to trash. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.messages/trash + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.messages#Message + :param tokens: The object that holds the access token to the service. + :param message_id: The id of the message (assigned by Google). + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Make the API call: + if not self._debug_only_errors: self._printer("Un-Trashing One Message.", user_id) + api_response = await self.post( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/messages/{message_id}/untrash", + headers = {"Authorization": f"Bearer {tokens.accessToken}"}, + ) + + # If the call was successful: + if api_response.httpCode in [200]: + api_response.success = True + api_response.data = await api_response.get_json() + + # Done here: + return api_response + + async def send_message( + self, + tokens: GoogleAuthTokens, + message: GmailMessage, + thread_id: str = None, + user_id: str = "me" + ) -> GoogleApiResponse: + + """ + To send one message. + NOTE: If you want to apply a custom label to your outgoing mails, this API endpoint doesn't allow you to do that + in one go. Instead, you should note down the 'id' field from a successful response and use the 'modify_messages' + method of this class to immediately apply that label to the mail in a separate call. + DOCUMENTATION: + 1. https://developers.google.com/gmail/api/reference/rest/v1/users.messages/send + 2. https://developers.google.com/gmail/api/reference/rest/v1/users.messages#Message + :param tokens: The object that holds the access token to the service. + :param message: The object that has the content of the message to be sent. + :param thread_id: Replies to an existing mail if the correct thread-id is specified. If not specified, a new + mail with a new thread-id is created. + :param user_id: The id of the user for which this service must be run. Typically, the e-mail id itself or "me". + :return: A structured response where the list of labels will be in the 'data' variable. + """ + + # Ensure that the tokens are valid: + await tokens.arefresh( + http_client = self._http_client, + client_id = self._client_id, + client_secret = self._client_secret, + force_refresh = False + ) + + # Construct the JSON body: + json_body = {"raw": message.get_raw_message(as_base64 = True)} + if thread_id: json_body["threadId"] = thread_id + + # Make the API call: + if not self._debug_only_errors: self._printer("Sending One Message.", user_id) + api_response = await self.post( + url = f"https://gmail.googleapis.com/gmail/v1/users/{user_id}/messages/send", + headers = { + "Authorization": f"Bearer {tokens.accessToken}", + "Content-Type": "message/rfc822" + }, + json = json_body + ) + + # If the call was successful: + if api_response.httpCode in [200]: + api_response.success = True + api_response.data = await api_response.get_json() + + # Done here: + return api_response + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + # Create an HTTP client: + test_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + connect = 2.5, # ... Shorter connection timeout. + read = 2.5, # ...... Like what EasyEcom gives. + write = 10.0, # .... Time to wait for sending data. + pool = 120.0 # ..... Time to wait for a free connection from the pool. + ) + ) + + # Read the secrets that give you access to the app: + secrets_file = r"../../../../creds/goog/app/google_tcaoff_test_oauth_20241125.json" + secrets_dict = json.from_file(secrets_file) + + async def main(): + + # Create an instance of the client: + my_gmail = AsyncGmailClient( + service_name = "gmail", + oauth_json = secrets_dict, + http_client = test_client, + redirect_url = r"https://api.thecaoffice.com/converse/mail/callback/gmail", + debug = True, + debug_prefix = "GMail (M) | ", + debug_only_errors = False + ) + + # Request Auth: + print("AUTH URL:", await my_gmail.get_authorization_url( + scopes = SCOPES_GMAIL_MAIL_MANAGEMENT, + state = "Bhopli", + approval_prompt = "force" + )) + + # Get tokens from callback: + test_tokens = await my_gmail.get_authorization_tokens( + scopes = SCOPES_GMAIL_MAIL_MANAGEMENT, + redirect_url = input("Paste the redirect URL here: ") + ) + print("TOKENS:", test_tokens) + + # Test some feature: + response = await my_gmail.get_user_profile(tokens = test_tokens) + print("SUCCESS:", response.success) + print("SUMMARY:", response.to_markdown()) + print("\n\n---\n\n") + print("DATA:", json.to_string(response.data, default = str)) + if not response.success: + print("\n\n---\n\n") + + + asyncio.run(main()) diff --git a/goog/controllers/gmail/gmail_message.py b/goog/controllers/gmail/gmail_message.py new file mode 100644 index 0000000..7fbfec0 --- /dev/null +++ b/goog/controllers/gmail/gmail_message.py @@ -0,0 +1,349 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 16th Jul, 2024 + + OBJECTIVE: + + To be able to send out mails from code. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For working with mails: +from email.mime.multipart import MIMEMultipart +from email.mime.image import MIMEImage +from email.mime.text import MIMEText +from email.mime.base import MIMEBase +from email import encoders + +# For random strings: +import string +import random + +# For system-level activities: +import os + +# For working with files in RAM: +import io + +# To work with Base64 encoding: +import base64 + +# To work with datatypes: +from typing import List + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class GmailMessage: + + def __init__( + self, + from_email: str, + to_email: str | List[str], + subject: str, + cc_emails: str | List[str] = None, + bcc_emails: str | List[str] = None + ): + + """ + Create an instance of the message that you would like to send. + :param from_email: The EMail ID of the sender. + :param to_email: The EMail ID of the recipient. + :param subject: The subject of the mail. + :param cc_emails: A list of recipients to add to the CC section. + :param bcc_emails: A list of recipients to add to the BCC section. + """ + + # Create the instance of the message: + self.message = MIMEMultipart() + self.message["From"] = from_email + self.message["To"] = ",".join(to_email if isinstance(to_email, list) else [to_email]) + self.message["Subject"] = subject + if cc_emails: self.message["CC"] = ",".join(cc_emails if isinstance(cc_emails, list) else [cc_emails]) + if bcc_emails: self.message["BCC"] = ",".join(bcc_emails if isinstance(bcc_emails, list) else [bcc_emails]) + + # Note down the values for accessing later: + self.__from = from_email + self.__to = to_email + self.__cc = cc_emails, + self.__bcc = bcc_emails + self.__subject = subject + + # ┏┓ • + # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ + # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ + # ┛ + + @property + def from_mail(self): + return self.__from + + @property + def to_mail(self): + return self.__to + + @property + def cc_mails(self): + return self.__cc + + @property + def bcc_mails(self): + return self.__bcc + + @property + def subject(self): + return self.__subject + + # ┏┓ ┓ ┓ ┏┓ + # ┣┫┏┫┏┫ ┃ ┏┓┏┓╋┏┓┏┓╋ + # ┛┗┗┻┗┻ ┗┛┗┛┛┗┗┗ ┛┗┗ + + def add_text(self, text) -> None: + + """ + Add plain-text to the mail body. + :param text: The text to add to the mail body. + :return: None. + """ + + self.message.attach(MIMEText(text, "plain")) + + def add_html(self, html_text) -> None: + + """ + Add HTML text to the mail body. + :param html_text: The HTML text to add to the mail body. + :return: None. + """ + + self.message.attach(MIMEText(html_text, "html")) + + def add_inline_image( + self, + image_file: str | io.BytesIO, + file_name: str = None, + content_id: str = None + ) -> None: + + """ + Add an inline image to the body of the mail. + NOTE: This is NOT the same as sending an image as an attachment. + :param image_file: The image data to attach to the mail body. + :param file_name: The name of the file. This is the same name by which it will be downloaded. You need not + specify this if the input file is specified as a path. Needed when you give the input file as a buffer. + :param content_id: Inline images are inserted via HTML bocks. This field identifies the image resource. If not + specified, I will generate a random string. You may write a custom value here if you know what you are + doing. For most use cases, please ignore this field. + :return: None. + """ + + # Read the image as bytes: + image_bytes = None + if type(image_file) is str: + file_name = file_name or os.path.split(image_file)[-1] + with open(image_file, "rb") as opened_image_file: + image_bytes = opened_image_file.read() + if type(image_file) is io.BytesIO: + image_file.seek(0) + image_bytes = image_file.getvalue() + + # Declare the part to be attached to the multipart message: + if image_bytes is not None: + + # Create the HTML block if the image pointer is blank: + if content_id is None: + content_id = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8)) + self.add_html(f""" + + +

    + + + """) + + # Then add the image: + image_part = MIMEImage(image_bytes) + image_part.add_header( + "Content-ID", f"<{content_id}>" + ) + image_part.add_header( + "Content-Disposition", + f"inline; filename=\"{file_name}\"", + ) + self.message.attach(image_part) + + def add_attachment( + self, + attachment_file: str | io.BytesIO, + file_name: str = None + ) -> None: + + """ + Add a file as an attachment to the mail. This file, even if possible, will not be rendered on the screen in-line + with the body. It will be made available as a download. + :param attachment_file: The file that you would like to attach. + :param file_name: The name of the file. This is the same name by which it will be downloaded. You need not + specify this if the input file is specified as a path. Needed when you give the input file as a buffer. + :return: None. + """ + + # Declare the part to be attached to the multipart message: + part = MIMEBase("application", "octet-stream") + + # If the attachment is a file stored in the local disk: + if isinstance(attachment_file, str): + file_name = file_name or os.path.split(attachment_file)[-1] + with open(attachment_file, "rb") as attachment: + part.set_payload(attachment.read()) + + # If the file is held in RAM: + elif isinstance(attachment_file, io.BytesIO): + attachment_file.seek(0) + part.set_payload(attachment_file.read()) + + # Encode and attach the file: + encoders.encode_base64(part) + part.add_header( + "Content-Disposition", + f"attachment; filename=\"{file_name}\"", + ) + self.message.attach(part) + + # ┏┓ + # ┣ ┏┓┏┓┏┳┓┏┓╋ + # ┻ ┗┛┛ ┛┗┗┗┻┗ + + def get_raw_message( + self, + as_base64: bool = False + ) -> str: + + """ + Get the raw string dump from the current contents of the message. This text will be compliant with RFC 5322 and + RFC 2045 (among others). + :param + :param as_base64: If set to True, the response will be a URL-safe B64 output, else it'll be a raw string. + :return: The standardized raw text dump. either as a raw string or as a Base64 (url-safe) string. + """ + + if as_base64: return base64.urlsafe_b64encode(self.message.as_bytes()).decode() + else: return self.message.as_string() + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + # Create an instance of a mail message: + my_mail = GmailMessage( + from_email = "sender@gmail.com", + to_email = "recipient@gmail.com", + subject = "Bhopli is the best!", + cc_emails = None, + bcc_emails = None + ) + + # Add content to it: + my_mail.add_html( + """ + + + + + Sample HTML String + + + +

    Hello, Bhopli!

    +

    Bhopli is the best, most well-behaved cat in the known universe.

    + + + """ + ) + my_mail.add_text("This is how you should pet her 👇") + my_mail.add_inline_image(r"../../../../data/images/cat_petting.png") + my_mail.add_attachment(r"../../../../data/pdf/sample_label.pdf") + + # Get the raw contents of the message: + mail_raw = my_mail.get_raw_message(as_base64 = False) + print("RAW TYPE:", type(mail_raw)) + + # Try parsing it: + from utils_v2.string import json + from utils_v2.mail import mail_parser + mail_json = mail_parser.parse(mail_raw) + print("PARSED MAIL (JSON):", json.to_string(mail_json, default = str)) diff --git a/goog/controllers/gmail/json/messages/chatgpt_suggested_message_format.json b/goog/controllers/gmail/json/messages/chatgpt_suggested_message_format.json new file mode 100644 index 0000000..21bef48 --- /dev/null +++ b/goog/controllers/gmail/json/messages/chatgpt_suggested_message_format.json @@ -0,0 +1,69 @@ +{ + "_id": ObjectId("..."), // MongoDB auto-generated ID + "message_id": "unique-message-id", // Unique identifier for the email + "thread_id": "thread-id", // Optional: Group of related messages + "subject": "Subject of the email", + "from": { + "name": "Sender Name", // Name of the sender + "email": "sender@example.com" // Sender's email address + }, + "to": [ // List of recipients + { + "name": "Recipient Name", + "email": "recipient@example.com" + } + ], + "cc": [ // List of CC recipients (optional) + { + "name": "CC Name", + "email": "cc@example.com" + } + ], + "bcc": [ // List of BCC recipients (optional) + { + "name": "BCC Name", + "email": "bcc@example.com" + } + ], + "date": ISODate("2024-11-26T12:00:00Z"), // Date the email was sent + "headers": { // Raw headers from the email + "X-Priority": "3", + "Content-Type": "multipart/alternative; boundary=\"boundary\"", + "X-Mailer": "Mailer XYZ" + }, + "body": { // The body of the email, with parts if multipart + "text": "Plain text body content", // Plain text part (if any) + "html": "

    HTML body content

    ", // HTML part (if any) + "parts": [ // List of parts for multipart emails + { + "content_type": "text/plain", + "content_transfer_encoding": "base64", + "content": "base64-encoded-content-here" + }, + { + "content_type": "text/html", + "content_transfer_encoding": "base64", + "content": "base64-encoded-html-content-here" + } + ] + }, + "attachments": [ // Attachments in the email + { + "filename": "file1.pdf", + "content_type": "application/pdf", + "content_transfer_encoding": "base64", + "content": "base64-encoded-file-content" + }, + { + "filename": "image1.jpg", + "content_type": "image/jpeg", + "content_transfer_encoding": "base64", + "content": "base64-encoded-image-content" + } + ], + "flags": { // Optional flags for internal tracking + "read": false, + "spam": false + }, + "received_timestamp": ISODate("2024-11-26T12:01:00Z") // Time the email was received (optional) +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/formatted_message_list_20241126.json b/goog/controllers/gmail/json/messages/formatted_message_list_20241126.json new file mode 100644 index 0000000..5e50380 --- /dev/null +++ b/goog/controllers/gmail/json/messages/formatted_message_list_20241126.json @@ -0,0 +1,36 @@ +{ + "messages": { + "193669615aa33694": { + "threadId": "193669615aa33694" + }, + "19365d0239aa1aaf": { + "threadId": "19365d0239aa1aaf" + }, + "193641e1379da64d": { + "threadId": "193641e1379da64d" + }, + "193640e74d93dc9b": { + "threadId": "193640e74d93dc9b" + }, + "19363d6a7f50225a": { + "threadId": "19363d6a7f50225a" + }, + "19363ba8e2582133": { + "threadId": "19363ba8e2582133" + }, + "19362f9983e58ea6": { + "threadId": "19362f9983e58ea6" + }, + "19360aabcb976cfc": { + "threadId": "19360aabcb976cfc" + }, + "193604ad97c9fe62": { + "threadId": "193604ad97c9fe62" + }, + "1935e92672e67f22": { + "threadId": "1935e92672e67f22" + } + }, + "nextPageToken": "11954226706764006151", + "resultSizeEstimate": 402 +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_01_193669615aa33694_no_attachment_20241126.json b/goog/controllers/gmail/json/messages/raw_message_01_193669615aa33694_no_attachment_20241126.json new file mode 100644 index 0000000..3d9008e --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_01_193669615aa33694_no_attachment_20241126.json @@ -0,0 +1,148 @@ +{ + "id": "193669615aa33694", + "threadId": "193669615aa33694", + "labelIds": [ + "IMPORTANT", + "CATEGORY_UPDATES", + "INBOX" + ], + "snippet": "Khushal PS, Someone is attempting to reset the password of your account. When: Nov 26, 2024 04:48 AM Central European Standard Time Device: Google Chrome Windows (Desktop) Near: Luxembourg, Luxembourg", + "payload": { + "partId": "", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp1258653wrq; Mon, 25 Nov 2024 19:48:52 -0800 (PST)" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IHex3BNvuKbH0rDOVdVZr5VN+wGXuempHJ5NU47Pc6su+PhLTTyWxQVeZqbgHHqPxn1k368" + }, + { + "name": "X-Received", + "value": "by 2002:a05:6000:4904:b0:382:4eef:28a with SMTP id ffacd0b85a97d-38260bce857mr13224341f8f.43.1732592932057; Mon, 25 Nov 2024 19:48:52 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732592932; cv=none; d=google.com; s=arc-20240605; b=MGUuj+jr2ksXZS0o19wNISVfgnf59VtgpBi6dc45I4/NyDwg2NVtSewPcv4jOAcnGX H+mxaJV5fgziT52/Kd6U/n+MSCut6o9DvIPg5qNz4ahcTeuRo5n4K+yLmz5Rp2PvLuQs 1tALdDnwpNjbCjd+gYvOZHSfYovK3BZ3+B+utyiE0U57nYkdOhIBEJ/oGoy6OVAN+Lb5 lukod7ijj+dKdMcsw8SNO7JQWsjDMpG0LtUXtY0B44bKdF+LeBgYkzzNhiT5eedH7V3N 7cMvVw0ZCjLZKA1YH/CMKgTdwqgJqVWi3RvL4X/uCJxbBAOQtq/6JzPJCOneXVqEU3Wh my8A==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:bounces-to:mime-version:subject:message-id:to:from:date :dkim-signature:dkim-signature; bh=jxPSaVfaHN0N+lJ6K9ay8G6f4hb8T+t7HKX1DJ6mpfY=; fh=u/EceduMLbMJaVmVACWimtVNyu5iebWbNB9Q7JrDYgs=; b=Iq4DXicQhzSSrkkA+f9fABfl6pE1B6vhbNEJ/p5/5vAFtyJVzZCmhcBKT11U4gUHPk PopE3XbKRLAspJKz08ZlECgkXOpfT0ukUgCwyCMj+YBpf7iNRjMRqkw9bgW+INj0wdhm e+jPcPitmLhqI5zJqaKhbdK1Af66uL//OfwaZi0Wo/OGY/wP5C4SpCCFpW9n3acD7Fjz HyUwpB/ek0xzHYKscBTnjCovwmff0LCkgUcBAgNxf/Nze+++yd5FAh2v/asvfI4MRZT3 aQZZRsdLrzDVX1iiwpooCqKf8XJpmlC5JG/rOVhz01cgqLEpVEQXwxLUxpf+4JMJFbsx LRgQ==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@amazon.in header.s=micqgm67cqsvdipseryzt5t5odsvewta header.b=LswfTW3G; dkim=pass header.i=@amazonses.com header.s=uku4taia5b5tsbglxyj6zym32efj7xqv header.b=YyxLmGgS; spf=pass (google.com: domain of 202411260348515ca421ac8b144afa9c8567766550p0eu-c3tl5yxbh49vj7@bounces.amazon.in designates 54.240.1.2 as permitted sender) smtp.mailfrom=202411260348515ca421ac8b144afa9c8567766550p0eu-C3TL5YXBH49VJ7@bounces.amazon.in; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.in" + }, + { + "name": "Return-Path", + "value": "<202411260348515ca421ac8b144afa9c8567766550p0eu-C3TL5YXBH49VJ7@bounces.amazon.in>" + }, + { + "name": "Received", + "value": "from a1-2.smtp-out.eu-west-1.amazonses.com (a1-2.smtp-out.eu-west-1.amazonses.com. [54.240.1.2]) by mx.google.com with ESMTPS id ffacd0b85a97d-385be9920f4si1030431f8f.693.2024.11.25.19.48.51 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 25 Nov 2024 19:48:52 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of 202411260348515ca421ac8b144afa9c8567766550p0eu-c3tl5yxbh49vj7@bounces.amazon.in designates 54.240.1.2 as permitted sender) client-ip=54.240.1.2;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@amazon.in header.s=micqgm67cqsvdipseryzt5t5odsvewta header.b=LswfTW3G; dkim=pass header.i=@amazonses.com header.s=uku4taia5b5tsbglxyj6zym32efj7xqv header.b=YyxLmGgS; spf=pass (google.com: domain of 202411260348515ca421ac8b144afa9c8567766550p0eu-c3tl5yxbh49vj7@bounces.amazon.in designates 54.240.1.2 as permitted sender) smtp.mailfrom=202411260348515ca421ac8b144afa9c8567766550p0eu-C3TL5YXBH49VJ7@bounces.amazon.in; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.in" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=micqgm67cqsvdipseryzt5t5odsvewta; d=amazon.in; t=1732592931; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type; bh=LH5AoXgTmD6qrgNMmPg2N4Kjd+MdburdNGizfre6x3E=; b=LswfTW3GeZuY88a0WncujiGM27tYdnz6Av7797ZGsnTKvkeVWnWqYBMHcRH50Cgs QWcPBr4jmdQU9h3TpG9J+78+mXdrtdwhdz3K5fujCT02uy0oOK2uqvTrnPfHsBlkAip LpDrgn2P6RF7y72ddT/unLtQlsnmWZBLgXjBKZOo=" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=uku4taia5b5tsbglxyj6zym32efj7xqv; d=amazonses.com; t=1732592931; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type:Feedback-ID; bh=LH5AoXgTmD6qrgNMmPg2N4Kjd+MdburdNGizfre6x3E=; b=YyxLmGgSMzhlrPeg3A8LjAG8yfh270KXdGxCTA6Yq3TJSGytfPO8zz7Tnpq4n/0A skRS4H3ESkjUsX2RDrZ90YR5zp8sSZmRBzRi6oBoQokldSoICr/MzFp4dBS9gYu8zC/ OhWBqAiYL4hgBR//EkoyVt2QHKG3x7Gq+jVg9WIo=" + }, + { + "name": "Date", + "value": "Tue, 26 Nov 2024 03:48:51 +0000" + }, + { + "name": "From", + "value": "\"amazon.in\" " + }, + { + "name": "To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Message-ID", + "value": "<0102019366961300-e4b92b6b-20ce-4b13-bc9f-440655f4fc7d-000000@eu-west-1.amazonses.com>" + }, + { + "name": "Subject", + "value": "amazon.in: Password recovery" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"----=_Part_1336386_1018227011.1732592931577\"" + }, + { + "name": "X-AMAZON-MAIL-RELAY-TYPE", + "value": "notification" + }, + { + "name": "Bounces-to", + "value": "202411260348515ca421ac8b144afa9c8567766550p0eu-C3TL5YXBH49VJ7@bounces.amazon.in" + }, + { + "name": "X-AMAZON-METADATA", + "value": "CA=C3TL5YXBH49VJ7-CU=AO8IZF00FXJKW" + }, + { + "name": "X-Original-MessageID", + "value": "" + }, + { + "name": "Feedback-ID", + "value": "610684451::1.eu-west-1.UIAUrMfbpGrxavqnRE0yoZrAUBI9C7GRNUx/kUDo6B4=:AmazonSES" + }, + { + "name": "X-SES-Outgoing", + "value": "2024.11.26-54.240.1.2" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html; charset=utf-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 9148, + "data": "PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KPGhlYWQ-DQogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiLz4NCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIG1hcmdpbjowOw0KICAgICAgICAgICAgY29sb3I6IzMzMzsNCiAgICAgICAgfQ0KDQogICAgICAgIGEgew0KICAgICAgICAgICAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7DQogICAgICAgICAgICBjb2xvcjojMDA2Njk5Ow0KICAgICAgICB9DQoNCiAgICAgICAgcCB7DQogICAgICAgICAgICBtYXJnaW46MHB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgaW1nIHsNCiAgICAgICAgICAgIGJvcmRlcjowOw0KICAgICAgICAgICAgbWFyZ2luOjA7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIH0NCg0KICAgICAgICAjdGl0bGUgcHsNCiAgICAgICAgICAgIGZvbnQtc2l6ZToxNXB4Ow0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICJBbWF6b24gRW1iZXIiLCBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICAgICAgfQ0KDQogICAgPC9zdHlsZT4NCiAgICA8dGl0bGU-PC90aXRsZT4NCjwvaGVhZD4NCjxib2R5PjxpbWcgd2lkdGg9IjEiIGhlaWdodD0iMSIgc3JjPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9RFI5QUVRM0NVVkdEJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDM0ODUxNWNhNDIxYWM4YjE0NGFmYTljODU2Nzc2NjU1MHAwZXUmUj1EUVQxMVZSWks5UlcmVD1PJlU9aHR0cHMlM0ElMkYlMkZpbWFnZXMtZXUuc3NsLWltYWdlcy1hbWF6b24uY29tJTJGaW1hZ2VzJTJGRyUyRjAxJTJGbmF2JTJGdHJhbnNwLmdpZiZIPTZUQVQzQU5OOUFIS1BJTFVIUkVIN0FOQUxNMEEmcmVmXz1wZV8zMzI3MDMyMV82MTA2ODQ0NTFfb3BlbnMiIC8-DQo8dGFibGUgYWxpZ249ImNlbnRlciIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0icGFkZGluZy1ib3R0b206IDIwcHg7Ij4NCiAgICA8dGJvZHk-DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0ibWFyZ2luLXRvcDowcHg7IG1hcmdpbi1ib3R0b206IDBweDsgbWFyZ2luLWxlZnQ6IDIwcHg7IG1hcmdpbi1yaWdodDogMjBweDsiPg0KICAgICAgICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgICAgIDx0ciB3aWR0aD0iNTIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNTIwIiBoZWlnaHQ9IjUyIiBzdHlsZT0iYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2VhZWFlYTsgcGFkZGluZy10b3A6MTBweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHdpZHRoPSI1MjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDciIGlkPSJsb2dvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGlkPSJhbWF6b25Mb2dvSW1nIiBhbHQ9IkxvZ28gSW1hZ2UiIHdpZHRoPSIxMDciIGhlaWdodD0iYXV0byIgc3JjPSJodHRwczovL20ubWVkaWEtYW1hem9uLmNvbS9pbWFnZXMvRy8wMS9hdXRocG9ydGFsL3Rpdi9hbWF6b25fbG9nb19SR0IuX0NCNDI0ODg3ODIwXy5wbmciLz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsgZm9udC1zaXplOjE3cHg7IGZvbnQtZmFtaWx5OiAnQW1hem9uIEVtYmVyJywgQXJpYWwsIHNhbnMtc2VyaWY7IHBhZGRpbmctdG9wOiAxNXB4OyBwYWRkaW5nLWJvdHRvbTogMHB4OyBwYWRkaW5nLWxlZnQ6IDBweDsgcGFkZGluZy1yaWdodDogMXB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPktodXNoYWwgUCBTLDwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsgZm9udC1zaXplOjE3cHg7IGZvbnQtZmFtaWx5OiAnQW1hem9uIEVtYmVyJywgQXJpYWwsIHNhbnMtc2VyaWY7IHBhZGRpbmctdG9wOiAxNXB4OyBwYWRkaW5nLWJvdHRvbTogMTBweDsgcGFkZGluZy1sZWZ0OiAwcHg7IHBhZGRpbmctcmlnaHQ6IDFweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNvbWVvbmUgaXMgYXR0ZW1wdGluZyB0byByZXNldCB0aGUgcGFzc3dvcmQgb2YgeW91ciBhY2NvdW50LjwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQoNCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgYWxpZ249ImxlZnQiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9ImZvbnQtc2l6ZToxN3B4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgZm9udC1mYW1pbHk6ICdBbWF6b24gRW1iZXInLCBBcmlhbCwgc2Fucy1zZXJpZjsgdGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZy10b3A6IDEwcHg7IHBhZGRpbmctbGVmdDogMHB4OyBwYWRkaW5nLXJpZ2h0OiA1cHg7IiA-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hlbjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGZvbnQtZmFtaWx5OiAnQW1hem9uIEVtYmVyJywgQXJpYWwsIHNhbnMtc2VyaWY7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctdG9wOiAxMHB4OyBwYWRkaW5nLWxlZnQ6IDBweDsgcGFkZGluZy1yaWdodDogMXB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm92IDI2LCAyMDI0IDA0OjQ4IEFNIENlbnRyYWwgRXVyb3BlYW4gU3RhbmRhcmQgVGltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBmb250LWZhbWlseTogJ0FtYXpvbiBFbWJlcicsIEFyaWFsLCBzYW5zLXNlcmlmOyB0ZXh0LWFsaWduOiBsZWZ0OyBwYWRkaW5nLWxlZnQ6IDBweDsgcGFkZGluZy1yaWdodDogNXB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV2aWNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgZm9udC1mYW1pbHk6ICdBbWF6b24gRW1iZXInLCBBcmlhbCwgc2Fucy1zZXJpZjsgdGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZy1sZWZ0OiAwcHg7IHBhZGRpbmctcmlnaHQ6IDFweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdvb2dsZSBDaHJvbWUgV2luZG93cyAoRGVza3RvcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgZm9udC1mYW1pbHk6ICdBbWF6b24gRW1iZXInLCBBcmlhbCwgc2Fucy1zZXJpZjsgdGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZy1sZWZ0OiAwcHg7IHBhZGRpbmctcmlnaHQ6IDVweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5lYXI6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkID4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgZm9udC1mYW1pbHk6ICdBbWF6b24gRW1iZXInLCBBcmlhbCwgc2Fucy1zZXJpZjsgdGV4dC1hbGlnbjogbGVmdDsgcGFkZGluZy1sZWZ0OiAwcHg7IHBhZGRpbmctYm90dG9tOiAxMHB4OyBwYWRkaW5nLXJpZ2h0OiAxcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMdXhlbWJvdXJnLCBMdXhlbWJvdXJnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiBzdHlsZT0idGV4dC1hbGlnbjogbGVmdDsgZm9udC1zaXplOjE3cHg7IGZvbnQtZmFtaWx5OiAnQW1hem9uIEVtYmVyJywgQXJpYWwsIHNhbnMtc2VyaWY7IHBhZGRpbmctdG9wOiAxNXB4OyBwYWRkaW5nLWJvdHRvbTogMTBweDsgcGFkZGluZy1sZWZ0OiAwcHg7IHBhZGRpbmctcmlnaHQ6IDFweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA-SWYgdGhpcyB3YXMgeW91LCB5b3VyIHZlcmlmaWNhdGlvbiBjb2RlIGlzOjwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0QzRDNEMzsgdGV4dC1hbGlnbjogbGVmdDsgZm9udC1zaXplOjIwcHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LWZhbWlseTogJ0FtYXpvbiBFbWJlcicsIEFyaWFsLCBzYW5zLXNlcmlmOyBwYWRkaW5nLXRvcDogMTVweDsgcGFkZGluZy1ib3R0b206IDEwcHg7IHBhZGRpbmctbGVmdDogMTBweDsgcGFkZGluZy1yaWdodDogMXB4OyBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxMHB4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMTBweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMTBweDsgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDEwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiAgMzM2NjA1PC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiIgYWxpZ249ImxlZnQiIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0OyBmb250LXNpemU6MTdweDsgZm9udC1mYW1pbHk6ICdBbWF6b24gRW1iZXInLCBBcmlhbCwgc2Fucy1zZXJpZjsgcGFkZGluZy10b3A6IDE1cHg7IHBhZGRpbmctYm90dG9tOiAxMHB4OyBwYWRkaW5nLWxlZnQ6IDBweDsgcGFkZGluZy1yaWdodDogMXB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5JZiB5b3UgZGlkbiYjMzk7dCByZXF1ZXN0IGl0OiA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9RFI5QUVRM0NVVkdEJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDM0ODUxNWNhNDIxYWM4YjE0NGFmYTljODU2Nzc2NjU1MHAwZXUmUj0zRkxBS1VTRVNUR1YzJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmElMkZjJTJGciUyRkFDbHFWOUtwZGp1ZmFoRVRjdnFVaHhkTm8lM0ZyZWZfJTNEcGVfMzMyNzAzMjFfNjEwNjg0NDUxJkg9VVNDNFc2QU5CSVNHOFlKMFRMU1RJVUNNTEkwQSZyZWZfPXBlXzMzMjcwMzIxXzYxMDY4NDQ1MSI-IGNsaWNrIGhlcmUgdG8gZGVueS4gPC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI1MjAiIGhlaWdodD0iNDUiIGNvbHNwYW49IjIiIGFsaWduPSJsZWZ0IiBzdHlsZT0iZm9udC1zaXplOjE3cHg7IGZvbnQtZmFtaWx5OiAnQW1hem9uIEVtYmVyJywgQXJpYWwsIHNhbnMtc2VyaWY7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctbGVmdDogMHB4OyBwYWRkaW5nLWJvdHRvbTogMTBweDsgcGFkZGluZy10b3A6IDEwcHg7IHBhZGRpbmctcmlnaHQ6IDFweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9u4oCZdCBzaGFyZSBpdCB3aXRoIG90aGVycy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjUyMCIgc3R5bGU9ImZvbnQtZmFtaWx5OiAnQW1hem9uIEVtYmVyJywgQXJpYWwsIHNhbnMtc2VyaWY7IHRleHQtYWxpZ246IGxlZnQ7IHBhZGRpbmctbGVmdDogMHB4OyBwYWRkaW5nLWJvdHRvbTogMTBweDsgcGFkZGluZy10b3A6IDEwcHg7IHBhZGRpbmctcmlnaHQ6IDFweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9IndpZHRoOiA1MjBweDsgYm9yZGVyOiAxcHggc29saWQgIzgwODA4MDsgcGFkZGluZy10b3A6IDVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBwYWRkaW5nLXJpZ2h0OiAxMHB4OyBwYWRkaW5nLWJvdHRvbTogMjBweDsgbWFyZ2luLXRvcDogMjVweDsgbWFyZ2luLXJpZ2h0OiAwcHg7IG1hcmdpbi1sZWZ0OiAwcHg7IG1hcmdpbi1ib3R0b206IDhweDsgY29sb3I6ICM0NDQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgyIHN0eWxlPSJmb250LXdlaWdodDogNzAwOyBmb250LXNpemU6IDE1cHg7IHBhZGRpbmctYm90dG9tOiAxMHB4OyI-SXMgaXQgc2FmZSB0byBmb2xsb3cgdGhpcyBsaW5rPzwvaDI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBjb2xvcjogYmxhY2s7IHBvaW50ZXItZXZlbnRzOiBub25lOyBjdXJzb3I6IGRlZmF1bHQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsaW5rIHByb3ZpZGVkIGluIHRoaXMgZW1haWwgc3RhcnRzIHdpdGgg4oCcaHR0cHM6Ly93d3cuYW1hem9uLmlu4oCdLiBJZiB5b3UgcHJlZmVyLCBjb3B5IHRoZSBmb2xsb3dpbmcgbGluayBhbmQgcGFzdGUgaXQgaW50byBhIGJyb3dzZXIgdG8gdmlldy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxicj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgY29sb3I6IGJsYWNrOyBwb2ludGVyLWV2ZW50czogbm9uZTsgY3Vyc29yOiBkZWZhdWx0OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiA2MDAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cHM6Ly93d3cuYW1hem9uLmluL2EvYy9yL0FDbHFWOUtwZGp1ZmFoRVRjdnFVaHhkTm8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICA8L3Rib2R5Pg0KPC90YWJsZT4NCjxpbWcgd2lkdGg9IjEiIGhlaWdodD0iMSIgc3JjPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9RFI5QUVRM0NVVkdEJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDM0ODUxNWNhNDIxYWM4YjE0NGFmYTljODU2Nzc2NjU1MHAwZXUmUj0zMlQ0N0s3UFBPMFhOJlQ9RSZVPWh0dHBzJTNBJTJGJTJGaW1hZ2VzLWV1LnNzbC1pbWFnZXMtYW1hem9uLmNvbSUyRmltYWdlcyUyRkclMkYwMSUyRm5hdiUyRnRyYW5zcC5naWYmSD1GQkZFTjVTSVVGWTJBNFZTSkVFSzA1V1pRVFVBJnJlZl89cGVfMzMyNzAzMjFfNjEwNjg0NDUxX29wZW4iIC8-PC9ib2R5Pg0KPC9odG1sPg==" + } + } + ] + }, + "sizeEstimate": 14907, + "historyId": "527966", + "internalDate": "1732592931000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_02_19367930033154ca_with_attachment_20241126.json b/goog/controllers/gmail/json/messages/raw_message_02_19367930033154ca_with_attachment_20241126.json new file mode 100644 index 0000000..a9a6834 --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_02_19367930033154ca_with_attachment_20241126.json @@ -0,0 +1,258 @@ +{ + "id": "19367930033154ca", + "threadId": "19367930033154ca", + "labelIds": [ + "UNREAD", + "IMPORTANT", + "CATEGORY_PERSONAL", + "INBOX" + ], + "snippet": "Sample content. Inline graphics done. Sample monospaced How about some Headers? Hello, World! These are quotes. How about some emojis? \ud83d\ude1a\ud83d\ude05\ud83d\ude05\ud83e\udd70\ud83d\ude18\ud83d\ude01\ud83d\ude01 There's also an attachment!", + "payload": { + "partId": "", + "mimeType": "multipart/mixed", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp1327351wrq; Tue, 26 Nov 2024 00:25:08 -0800 (PST)" + }, + { + "name": "X-Received", + "value": "by 2002:a05:690c:6111:b0:6e3:fd6:6ccb with SMTP id 00721157ae682-6eee08c3459mr156525787b3.13.1732609507838; Tue, 26 Nov 2024 00:25:07 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732609507; cv=none; d=google.com; s=arc-20240605; b=VDostCh8Kr1QGeQoXgLjYyrkymtwKEVHTyPaNeSjy30Q0B4GTTIBIPbKgkL6UazG4T s92UnE+Br4HJUSsqbtOdKTV1Pwt9lI3EzASDMX3OVGccdViTyUgGjgNuagV2fUVQugYi BJWxLrWZXVVtKkLNqRDOEQgiPi6t869FTB4877V8dKxQs99Q8IBncekOq3f6+SmsFlIl U3l6EUgaV/7MFzNRofsmXFGEG0TLto+Xgx5bMQ8B0OpjSFXR2Va/1xF5BmrzJTLgL6N5 zct3VIRLMxkf+8v3oniTG7yaaCQMPLxOq1pKXhP/MfKzgvdo5r14/kAzsj05rQ/L2/rT 2OrQ==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=9NSLykdU3XzuxItzVTTQJjRRBR6yhJqdgYRarHa+VdY=; fh=KtxgdfxhT3MZUXDfdB/Mxp08o9TbOvoJMvz1V2wYTKk=; b=Xqtl2jfteUY2I+wdSwdllaqPKg1QP8hUyJpP/644zwGrOBdLbjCO8Po5C9KJfxUh7i H7UMWfEWkulB52WFTDU/54UY8lnX7iGZEMtT/4twKUGToWPPWeG/wmh/I4W9ZEmA/qXG OiRrBlJI3NJowsrnfoqXrpV/W5mz1SNuJBkj5k71+3vrPVlEmGwGmz8/MCG+RF2yV4nz QEVg613QkuThPEEsgYdHbfWDlF8jnGbAS+Lyt8ZdixVvO4/Gq5swuGUHihfeV+Fxt5Kv L2Wbqiq7UFJF9YJEtezJOdkdrTxs8dz6bTUZTrpWtRYxoBuH76HB+f9yrhOIRFTxor+9 18dA==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=\"Adx/Ch2H\"; spf=pass (google.com: domain of orangebhopli@gmail.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=orangebhopli@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com; dara=pass header.i=@gmail.com" + }, + { + "name": "Return-Path", + "value": "" + }, + { + "name": "Received", + "value": "from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id 00721157ae682-6eee01062easor78223267b3.12.2024.11.26.00.25.07 (Google Transport Security); Tue, 26 Nov 2024 00:25:07 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of orangebhopli@gmail.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=\"Adx/Ch2H\"; spf=pass (google.com: domain of orangebhopli@gmail.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=orangebhopli@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com; dara=pass header.i=@gmail.com" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1732609507; x=1733214307; dara=google.com; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=9NSLykdU3XzuxItzVTTQJjRRBR6yhJqdgYRarHa+VdY=; b=Adx/Ch2H1Vw5fzCEcIPf/EuHGviFMr1/Gw93WwruoabampXxraQ5hkcJNx0yi+zM2/ 9wlmVqcDwiWM1dFrkc1hPNMyyH4h7hCXjGsDbK8hkUE/Fk1AR51fhjliB9AZFkps+PUR 21CYTDMzWWlHjKlBpnM1axU9suvv04NqDZ8Hr7LAXysd9eF1ypoTWjwWMJ5QGKpoQo6W qf3m5yuqSXLAtbTKZN6K3qUO+S9ZRjUahw0eke7ieQ2uKR8dFwaoS899KhVBY5bZpLzr gEjYkNbzZGN4bp/LIJcHmgueZ5J0L6V+zaYMIqNRp3wOwAe41nZSAf6PvLxixLZoTvyH TmmA==" + }, + { + "name": "X-Google-DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732609507; x=1733214307; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=9NSLykdU3XzuxItzVTTQJjRRBR6yhJqdgYRarHa+VdY=; b=F5yE7IslZpO2UHCSg9jCYE645+q7dW9WO9S0DIb4oRcTlz/qgI1fwnnB0vlWvgXQxJ Af8/WUW6AJm/8mJ//SNXSDwE28OZiZqR+i/SYc0yontGepFawQAZg9xFRLspp7O/2UAL EHrkssz9noe2wPPdcPGYanXfoiSLtX/3XnrGCg1P5Y4jdy7p6624f87Xx+Mno1t8q2xh Odh2QrURKad50BqY+UB20+um9ommh4J0BOsD9WiVCfu5isvTCfwZYAtjYUJ48UVWLh3b kAPAaSic4g1zQzlOychUnqFB95VrrODUNUACfKBuIR0YbUdsgjMzn9p4RQ1LAgr9NfvY 62kw==" + }, + { + "name": "X-Forwarded-Encrypted", + "value": "i=1; AJvYcCVe+1Kjt1hhMEjYG2UyrzV/DvH4xn376Ya7lsLKkTIVIAJGmG8xKSkvvJAmXIAXRyYuWSNpPVXGyjSKXTgsLlU=@gmail.com" + }, + { + "name": "X-Gm-Message-State", + "value": "AOJu0Ywb3oN+4RLkTx99fCaTMOlGwSTJR7AWBy7IvxJyBYNwLV6Of7c2 vtYqtaRl1CcUgUXmGnXqjfQsSX6DT4LLNPGCsrrzk4VXfV26FJA1iaDFm/ey7pRaAucm5dGPHRO 9oG7H+96wM0pzmY3Tlb9LUEY3NIdSR9H2" + }, + { + "name": "X-Gm-Gg", + "value": "ASbGncuwgQwpQZrb7exEtts26PEAwkklAu9DD/4RvvBSiHYGDUD7+909oeyrMtfk66q IuA94Z8WcFFe3TabyhyXIjGTCEF5+Qg==" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IFy7wXSaJCDrrXclKRzxMFtyv1HrgyWSfgyomoDnvBS4NPu9KBdzHjvcekKjw9uKzJAj5R2iOl+mZuCt5sjIws=" + }, + { + "name": "X-Received", + "value": "by 2002:a05:690c:6701:b0:6ee:b5a6:a67a with SMTP id 00721157ae682-6eee0a402acmr176495297b3.28.1732609506221; Tue, 26 Nov 2024 00:25:06 -0800 (PST)" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "From", + "value": "TheBhopli " + }, + { + "name": "Date", + "value": "Tue, 26 Nov 2024 13:54:54 +0530" + }, + { + "name": "Message-ID", + "value": "" + }, + { + "name": "Subject", + "value": "Test Mail for GMail API." + }, + { + "name": "To", + "value": "\"pskhushal@gmail.com\" " + }, + { + "name": "Cc", + "value": "\"khushal@easyfi.net.in\" , \"bhushan.thakkar@gmail.com\" " + }, + { + "name": "Content-Type", + "value": "multipart/mixed; boundary=\"00000000000027d46c0627cc96ea\"" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "multipart/related", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "multipart/related; boundary=\"00000000000027d46c0627cc96e9\"" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0.0", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"00000000000027d46c0627cc96e8\"" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0.0.0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain; charset=\"UTF-8\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 236, + "data": "U2FtcGxlIGNvbnRlbnQuDQoNCltpbWFnZTogY2hhdC5wbmddDQoNCklubGluZSBncmFwaGljcyBkb25lLg0KDQpTYW1wbGUgbW9ub3NwYWNlZA0KDQoqSG93IGFib3V0IHNvbWUgSGVhZGVycz8qDQoNCkhlbGxvLCBXb3JsZCEgVGhlc2UgYXJlIHF1b3Rlcy4NCg0KDQpIb3cgYWJvdXQgc29tZSBlbW9qaXM_IPCfmJrwn5iF8J-YhfCfpbDwn5iY8J-YgfCfmIENClRoZXJlJ3MgYWxzbyBhbiAqYXR0YWNobWVudCohDQo=" + } + }, + { + "partId": "0.0.1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html; charset=\"UTF-8\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 675, + "data": "PGRpdiBkaXI9Imx0ciI-U2FtcGxlIGNvbnRlbnQuPGRpdj48YnI-PGRpdj48aW1nIHNyYz0iY2lkOmlpX20zeTZ0dTg1MCIgYWx0PSJjaGF0LnBuZyIgd2lkdGg9IjIyMiIgaGVpZ2h0PSIyMjIiIHN0eWxlPSJtYXJnaW4tcmlnaHQ6IDBweDsiPjwvZGl2PjxkaXY-PGJyPjwvZGl2PjxkaXY-SW5saW5lIGdyYXBoaWNzIGRvbmUuPC9kaXY-PGRpdj48YnI-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UiPlNhbXBsZSBtb25vc3BhY2VkPC9mb250PjwvZGl2PjxkaXY-PGJyPjwvZGl2PjxkaXY-PGI-PGZvbnQgc2l6ZT0iNiI-SG93IGFib3V0IHNvbWUgSGVhZGVycz88L2ZvbnQ-PC9iPjwvZGl2PjxkaXY-PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij5IZWxsbywgV29ybGQhIFRoZXNlIGFyZSBxdW90ZXMuPC9ibG9ja3F1b3RlPjxkaXY-PGJyPjwvZGl2PjxkaXY-SG93IGFib3V0IHNvbWUgZW1vamlzP8Kg8J-YmvCfmIXwn5iF8J-lsPCfmJjwn5iB8J-YgTxicj48L2Rpdj48L2Rpdj48ZGl2PlRoZXJlJiMzOTtzIGFsc28gYW4gPGk-PHU-YXR0YWNobWVudDwvdT48L2k-ITwvZGl2PjwvZGl2Pg0K" + } + } + ] + }, + { + "partId": "0.1", + "mimeType": "image/png", + "filename": "chat.png", + "headers": [ + { + "name": "Content-Type", + "value": "image/png; name=\"chat.png\"" + }, + { + "name": "Content-Disposition", + "value": "inline; filename=\"chat.png\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "base64" + }, + { + "name": "Content-ID", + "value": "" + }, + { + "name": "X-Attachment-Id", + "value": "ii_m3y6tu850" + } + ], + "body": { + "attachmentId": "ANGjdJ88SNHhnjq5-Alk71WYYaL72CUhJn6_geE_GP7JZKZdcSIR56LPGVklvFO_IuMFqeDkDT2U4r8SXTSMb-uBnNrio-NeXiW2p8vPWnV2yq-YaZxG0xBD6WILt5Qwg_43lv9_TGnjSvWn5QrGzusOttPluVRIWtv0-dksvYXrHDbS5MC0IYX4qpv8dbvGto5rgH_iIsIMav2aXbm5_o_mmxlxO9GavC8G9ZWD9BbuLlKKMJQAXgGXlfOlWA1Ukr5Cr0UO5LZbeTtVX3dZMYs3QfMwlGkVLT7Gam6aZfW8JduWhObFP9ghg2haF4tooXcUFNOPX7e2Axto-OmYAXLaPZRh-xpSzEObOeQv8gAHihoXlkA5Y_A2m45-emjdSiwff2Ui0VRZs96_DMGO", + "size": 17466 + } + } + ] + }, + { + "partId": "1", + "mimeType": "image/png", + "filename": "chat.png", + "headers": [ + { + "name": "Content-Type", + "value": "image/png; name=\"chat.png\"" + }, + { + "name": "Content-Disposition", + "value": "attachment; filename=\"chat.png\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "base64" + }, + { + "name": "Content-ID", + "value": "" + }, + { + "name": "X-Attachment-Id", + "value": "f_m3y6xx8e1" + } + ], + "body": { + "attachmentId": "ANGjdJ-XMpv18VYpIKT1zc45Su99KXSI3r3YaVquSLfKE3DqgQ7XjO7p4iHRHvc47lIr70rLBk2H8lLlMifTCFxFLMy0q_uFgsCHASCDeq-opjPkeDxC3BaxACeyeNWaZYANXgUCFYqCygTLkIoeggJDBxmzPn99baxvoJqcRLXROO1mSWGB4K0PLJcP35r8Y2D9lVRjSAJupzf7HLYLzimY1Q-X6Ge2qNCNnree-rS47FNXQgvFfVdV_x7jcvLE7JJl5cBBIyus-TtTulMk0RrFbcn5zKH7AniW6IF7v-mLOUzpDVye9tIiVqc6W4EdLeP3wmIaMVy4shsAdHkKtbjwLxicycke8Vi5hAV50s0pCllN26rSHakAA9zswG9q5z3cbS5LNMdEUpgWt6ON", + "size": 17466 + } + } + ] + }, + "sizeEstimate": 55270, + "historyId": "528587", + "internalDate": "1732609494000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_03_19365d0239aa1aaf_20241126.json b/goog/controllers/gmail/json/messages/raw_message_03_19365d0239aa1aaf_20241126.json new file mode 100644 index 0000000..1697bdc --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_03_19365d0239aa1aaf_20241126.json @@ -0,0 +1,175 @@ +{ + "id": "19365d0239aa1aaf", + "threadId": "19365d0239aa1aaf", + "labelIds": [ + "CATEGORY_PROMOTIONS", + "UNREAD", + "INBOX" + ], + "snippet": "Amazon.in Your Amazon.in Today's Deals Get Amazon App Hello Khushal PS, Are you looking for something in our ACCESSORY OR PART OR SUPPLY store? If so, you might be interested in these items.", + "payload": { + "partId": "", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp1199268wrq; Mon, 25 Nov 2024 16:12:39 -0800 (PST)" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IGrkPfvb+dSkwa9iS6Kivda2qwRAG9D9snZa0xCBnTtWrRkREL9rtlGKQGz3LviU5rqswOE" + }, + { + "name": "X-Received", + "value": "by 2002:a05:6512:5c1:b0:53d:d3cb:debb with SMTP id 2adb3069b0e04-53dd3cbdf8dmr6301124e87.0.1732579959442; Mon, 25 Nov 2024 16:12:39 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732579959; cv=none; d=google.com; s=arc-20240605; b=T0Yokutt7qdL5F2L8pFD9jy1sTZkKCQjCtzNVwWxLQnQLWddpXD69lwysx8hp6p9nP Ld/Kdy4Jg98AsGT9wsizztjLhBYB30vfpDRnlxjbmNQ42f/uZZgmdAsJ79uRfpJ9Nn6M ZXDRLgrUc3jFMoKlHBTEwVieL8tPaZ5magEYD4egIHS7CA+nIArfHz6aSb33oylx//5p PKYD+3f19u86uzbCEEdWbbNh/zfCkt31Rz3/3PY24DE9Cc9ZusKjbjQ66juEQiSV9W71 1xDNuIurQUXB+kk7ctRfy7OyuEIFMSN6UrKRwG20ge7uf8mz3jAnIzE6ouaej2BqI8Yk wQwQ==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:list-unsubscribe:list-unsubscribe-post:bounces-to :mime-version:subject:message-id:to:from:date:dkim-signature :dkim-signature; bh=ae6BFYuWr0k+7ooGQp/2cSWiFLurA8Xuta8hwCJJBCo=; fh=u/EceduMLbMJaVmVACWimtVNyu5iebWbNB9Q7JrDYgs=; b=CHLYewk0wxYzvOHRZrCpm/dKZmGowdrShKvKQ4v8wZnK754ewrNclJiBlUupwLrl51 Vbek14E9T2sW0yYGLghgWMmOskjKnx8hK7l2LwdD1hpegXReORvlSnIDAsIoftn3/5KF cHRYLlUVecVfDgj0fhKvvpA/9NNNc0R113RoyfJlGcv+Km8NhKpvZdIRpbvPzyFd5S4B aiOO7AztFhQaKYphmno1otSs/oXEPywWTwNT6ZyJ/qAwoHqwKrHzRu8GvphwsoimngTQ Fbo0+vFrZFWFrKBv6n7uxA9hWQv/jqssH8uJ0/RD9E3rmUSAQQlS6NCh6mU/7i0wiVLI 6aoA==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@amazon.in header.s=55spn7jg3iwyluzn4ej7wq3ev2vqedgu header.b=CjSOuKcT; dkim=pass header.i=@amazonses.com header.s=uku4taia5b5tsbglxyj6zym32efj7xqv header.b=Frviu8Z2; spf=pass (google.com: domain of 202411260012388bce9401ff544ee1b647d13d7450p0eu-c17nwh9w055t8b@bounces.amazon.in designates 54.240.0.92 as permitted sender) smtp.mailfrom=202411260012388bce9401ff544ee1b647d13d7450p0eu-C17NWH9W055T8B@bounces.amazon.in; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.in" + }, + { + "name": "Return-Path", + "value": "<202411260012388bce9401ff544ee1b647d13d7450p0eu-C17NWH9W055T8B@bounces.amazon.in>" + }, + { + "name": "Received", + "value": "from a0-92.smtp-out.eu-west-1.amazonses.com (a0-92.smtp-out.eu-west-1.amazonses.com. [54.240.0.92]) by mx.google.com with ESMTPS id a640c23a62f3a-aa5421552e6si288994166b.31.2024.11.25.16.12.39 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 25 Nov 2024 16:12:39 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of 202411260012388bce9401ff544ee1b647d13d7450p0eu-c17nwh9w055t8b@bounces.amazon.in designates 54.240.0.92 as permitted sender) client-ip=54.240.0.92;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@amazon.in header.s=55spn7jg3iwyluzn4ej7wq3ev2vqedgu header.b=CjSOuKcT; dkim=pass header.i=@amazonses.com header.s=uku4taia5b5tsbglxyj6zym32efj7xqv header.b=Frviu8Z2; spf=pass (google.com: domain of 202411260012388bce9401ff544ee1b647d13d7450p0eu-c17nwh9w055t8b@bounces.amazon.in designates 54.240.0.92 as permitted sender) smtp.mailfrom=202411260012388bce9401ff544ee1b647d13d7450p0eu-C17NWH9W055T8B@bounces.amazon.in; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.in" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=55spn7jg3iwyluzn4ej7wq3ev2vqedgu; d=amazon.in; t=1732579959; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type:List-Unsubscribe-Post:List-Unsubscribe; bh=07AqkIKTtFOwN0qQZIsK14iOi5M9FBw5xK/nDSihny0=; b=CjSOuKcT6144qJClJDfhA83J75Biy6AiZzwkz1rze/q29TcfgzOIwpacPSDoi7Un DUw0V0T5HsxjSaGw/G72tgb0saDuF4O+bqVqetsmjAnX61PsFFIxQXWjjLgApsPL1tv BHQIbkKctKw0UQeFGJHflfYzIIUnq4ECRRRCAKcY=" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=uku4taia5b5tsbglxyj6zym32efj7xqv; d=amazonses.com; t=1732579959; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type:List-Unsubscribe-Post:List-Unsubscribe:Feedback-ID; bh=07AqkIKTtFOwN0qQZIsK14iOi5M9FBw5xK/nDSihny0=; b=Frviu8Z24nZPNoNtEHMtr1G9zZuEOzjdBz2fwkAzpXiNjVuGh4ZAJxWpzEzbQ9SQ TxUOUfozpEGG5Cg3kPUMleQyFcfiqE63KLMcbasJlTIWzQXBpBNZHwKUvLCQYZyELaU BBo3cBXTMnKiQECLni+V2efPFroHEXCQ/onlojaU=" + }, + { + "name": "Date", + "value": "Tue, 26 Nov 2024 00:12:38 +0000" + }, + { + "name": "From", + "value": "\"Amazon.in\" " + }, + { + "name": "To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Message-ID", + "value": "<0102019365d02057-191fac4d-c476-4ca2-89d4-15b01d7efbd4-000000@eu-west-1.amazonses.com>" + }, + { + "name": "Subject", + "value": "Amkette USB Hub" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"----=_Part_4594082_890675294.1732579958850\"" + }, + { + "name": "X-AMAZON-MAIL-RELAY-TYPE", + "value": "notification" + }, + { + "name": "Bounces-to", + "value": "202411260012388bce9401ff544ee1b647d13d7450p0eu-C17NWH9W055T8B@bounces.amazon.in" + }, + { + "name": "X-AMAZON-METADATA", + "value": "CA=C17NWH9W055T8B-CU=AO8IZF00FXJKW" + }, + { + "name": "List-Unsubscribe-Post", + "value": "List-Unsubscribe=One-Click" + }, + { + "name": "List-Unsubscribe", + "value": "" + }, + { + "name": "X-Original-MessageID", + "value": "" + }, + { + "name": "Feedback-ID", + "value": "1217703571::1.eu-west-1.kjoQSiqb8G+7lWWiDVsxjM2m0ynYd4I6yEFlfoox6aY=:AmazonSES" + }, + { + "name": "X-SES-Outgoing", + "value": "2024.11.26-54.240.0.92" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 4887, + "data": "DQoNCg0KDQoNCg0KPT09PT09PT09PQ0KQU1BWk9OLklODQo9PT09PT09PT09DQoNCkFyZSB5b3UgbG9va2luZyBmb3Igc29tZXRoaW5nIGluIG91ciBBQ0NFU1NPUlkgT1IgUEFSVCBPUiBTVVBQTFkgc3RvcmU_IElmIHNvLCB5b3UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB0aGVzZSBpdGVtcy4NCiANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgDQoNCkFta2V0dGUgNCBQb3J0IFN1cGVyc3BlZWQgVVNCIEh1YiAzLjAgZm9yIFBDL0xhcHRvcHMsIFBvcnRhYmxlIERhdGEgSHViIHdpdGggSGktU3BlZWQgRGF0YSBUcmFuc2ZlciBVcCB0byA1IEdCUFMsIENoYXJnaW5nIEZ1bmN0aW9ufCBTdHJvbmcgYW5kIER1cmFibGUsIFBvd2VyIFN1cHBseSBQb3J0IGFuZCA4MCBjbSBMb25nIENhYmxlIChCbGFjaykNCmJ5IEFta2V0dGUNCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9wcm9kdWN0L0IwOEpIWVdKTVAvcmVmPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMV90aQ0KLi4uDQoNCg0KWkVCUk9OSUNTIDE1MEhiIDQgUG9ydCBVU0IgSHViIHdpdGggRGVkaWNhdGVkIE9uL09mZiBTd2l0Y2gsIExlZCBJbmRpY2F0b3JzLCA0NUNtIENhYmxlIExlbmd0aCwgT3B0aW9uYWwgUG93ZXIgSW5wdXQgUG9ydCwgTXVsdGkgRGV2aWNlIGFuZCBQbHVnIFBsYXkgVXNhZ2UNCmJ5IFpFQlJPTklDUw0KaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3Byb2R1Y3QvQjBCNUg4NDZIVC9yZWY9cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8yX3RpDQouLi4NCg0KDQpBUk9QQU5BIFVTQiAzLjEgR2VuIDEgL1VTQiAzLjAgSGlnaCBTcGVlZCA1R2JwcyBIdWIgZm9yIExhcHRvcCA0IFBvcnQgUG9ydGFibGUgQWRhcHRlciB3aXRoIEluZGl2aWR1YWwgUG93ZXIgT04vT2ZmIFN3aXRjaCBhbmQgSW5kaXZpZHVhbCBCbHVlIExFRCBJbmRpY2F0b3JzIE11bHRpLVBvcnQNCmJ5IEFST1BBTkENCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9wcm9kdWN0L0IwOUc5TUcxQlAvcmVmPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfM190aQ0KLi4uDQoNCg0KVFAtTGluayBVSDQwMCBVU0IgMy4wIDQtUG9ydCBQb3J0YWJsZSBEYXRhIEh1YiBmb3IgTWFjLCBpTWFjLCBNYWNCb29rIFBybyBBaXIsIFVsdHJhYm9va3MsIFRhYmxldCwgTGFwdG9wIGFuZCBBbnkgUEMsIFdpbmRvd3MsIE1hYyBPUyBYIGFuZCBMaW51eCBTeXN0ZW1zLSBCbGFjaw0KYnkgVFAtTGluaw0KaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3Byb2R1Y3QvQjAwVjRCR0QwMC9yZWY9cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF80X3RpDQouLi4NCg0KDQpbMSBNZXRlciBMb25nIENhYmxlLCA1R2JwcywgVVNCIDMuMSBHZW4gMV0gUVogVVNCIEh1YiBmb3IgTmV4dCBHZW4gT2ZmaWNlIFdvcmsgU3RhdGlvbiwgNCBQb3J0cywgVVNCIDMuMSBHZW4gMSBmb3IgUEMgYW5kIExhcHRvcHMNCmJ5IFFaDQpodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvcHJvZHVjdC9CMDExT0xQNkxHL3JlZj1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzVfdGkNCi4uLg0KDQoNClsxLjMgRmVldCBMb25nIENhYmxlLCA1R2JwcywgVVNCIDMuMSBHZW4gMV0gUVogVVNCIEh1YiBmb3IgTmV4dCBHZW4gT2ZmaWNlIFdvcmsgU3RhdGlvbiwgNCBQb3J0cywgVVNCIDMuMSBHZW4gMSBmb3IgUEMgYW5kIExhcHRvcHMNCmJ5IFFaDQpodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvcHJvZHVjdC9CMDExT05KVjdZL3JlZj1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzZfdGkNCi4uLg0KDQoNClBvcnRyb25pY3MgTXBvcnQgMzEgVVNCIEh1YiAoNC1pbi0xKSwgTXVsdGlwb3J0IEFkYXB0ZXIgd2l0aCAxIHggVVNCIDMuMCAmIDMgeCBVU0IgMi4wIFBvcnRzLCB1cCB0byA1IEdicHMgSGlnaCBTcGVlZCBEYXRhIFRyYW5zZmVyIGZvciBMYXB0b3AvUEMgKEdyZXkpDQpieSBQb3J0cm9uaWNzDQpodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvcHJvZHVjdC9CMDlNODg4OERNL3JlZj1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzdfdGkNCi4uLg0KDQoNCk9SSUNPIFVTQiAzLjAgSHViIDcgUG9ydHMgVVNCMy4wIFRyYW5zcGFyZW50IERlc2t0b3AgSFVCIHdpdGggQmx1ZSBJbmRpY2F0b3IgTGlnaHQgJiBEdWFsIFBvcnQgUG93ZXIgU3VwcGx5IHdpdGggMU0gQ2FibGUNCmJ5IE9SSUNPDQpodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvcHJvZHVjdC9CMDdLQlZSVjVIL3JlZj1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzhfdGkNCi4uLg0KDQoNClFaIEFjdGl2ZSBQb3dlcmVkIFVTQiBIdWIsIDEwIFBvcnQgVVNCIEh1YiB3aXRoIDEyViA1QSA2MFcgUG93ZXIgQWRhcHRlciwgVVNCIDMuMSBHZW4gMQ0KYnkgUVoNCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9wcm9kdWN0L0IwMU0wVDY0RU0vcmVmPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfOV90aQ0KLi4uDQoNCg0KWkVCUk9OSUNTIFplYi0xMDBIQiA0IFBvcnRzIFVTQiBIdWIgZm9yIExhcHRvcCwgUEMgQ29tcHV0ZXJzLCBQbHVnICYgUGxheSwgQmFja3dhcmQgQ29tcGF0aWJsZSAtIEJsYWNrDQpieSBaRUJST05JQ1MNCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9wcm9kdWN0L0IwN0dMTkpDMjUvcmVmPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMTBfdGkNCi4uLg0KDQoNClR1a3plciA0LVBvcnRzIFVTQiBBIHRvIFVTQiAzLjAgSFVCIHdpdGggSGlnaC1TcGVlZCBEYXRhIFRyYW5zZmVyICYgRmFzdCBDaGFyaW5nIFBvcnRzLCBDb21wYXRpYmxlIGZvciBNYWNCb29rIEFpciwgTWFjIE1pbmksIGlNYWMgUHJvLCBNaWNyb3NvZnQgU3VyZmFjZSwgVWx0cmFCb29rcywgTGFwdG9wLCBOb3RlYm9vaywgRGVza3RvcCAoV2hpdGUpDQpieSBUdWt6ZXINCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9wcm9kdWN0L0IwOFFKTktYOTQvcmVmPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMTFfdGkNCi4uLg0KDQoNClZlcmlsdXjCriBVU0IgSHViIDMuMCBmb3IgUEMsIDQtUG9ydCBIaWdoIFNwZWVkIFVTQiBIdWIgd2l0aCBBbHVtaW5pdW0gU2hlbGwsIFVTQiBQb3J0IEh1YiAzLjAgQ29tcGF0aWJsZSBmb3IgUEMsIE1hY0Jvb2ssIE1hYyBQcm8sIE1hYyBNaW5pLCBpTWFjLCBTdXJmYWNlIFBybywgWFBTLCBQQyAoR3JleSkNCmJ5IFZlcmlsdXgNCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9wcm9kdWN0L0IwOTE2NTI1VDMvcmVmPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMTJfdGkNCi4uLg0KDQpTZWUgc2ltaWxhciBwcm9kdWN0cw0KaHR0cDovL3d3dy5hbWF6b24uaW4vZ3AvYj9pZT1VVEYtOCZub2RlPTEzNzUyNDgwMzEgDQoNCj09PT09PT09PT0NCkFtYXpvbi5pbg0KaHR0cDovL3d3dy5hbWF6b24uaW4vcmVmPXBlX2Zvb3Rlci8NCg0KQ29ubmVjdCB3aXRoIFVzDQpPbiBGYWNlYm9vaw0KaHR0cDovL3d3dy5hbWF6b24uaW4vZ3AvcmVkaXJlY3QuaHRtbC9yZWY9cGVfNDIzMzcxXzM4NDc4OTMxX3BlXzBfMzQzNl9wZV9mYl9mdHIvP2xvY2F0aW9uPWh0dHA6Ly93d3cuZmFjZWJvb2suY29tL0FtYXpvbklOJnRva2VuPTIwNzVENUVBQzdCQjIxNDA4OTcyOEUyMTgzRkQzOTE3MDZENDFFOTQNCg0KT24gVHdpdHRlcg0KaHR0cDovL3d3dy5hbWF6b24uaW4vZ3AvcmVkaXJlY3QuaHRtbC9yZWY9cGVfNDIzMzcxXzM4NDc4OTMxX3BlXzBfMzQzNl9wZV90d19mdHIvP2xvY2F0aW9uPWh0dHA6Ly90d2l0dGVyLmNvbS9BbWF6b25JTiZ0b2tlbj1BMzA5REZCRkNCMUUzN0E4MDhGRjUzMTkzNDg1NURDODE3RjEzMEI2DQoNCj09PT09PT09PT0NCg0KV2UgaG9wZSB5b3UgZm91bmQgdGhpcyBtZXNzYWdlIHRvIGJlIHVzZWZ1bC4gSG93ZXZlciwgaWYgeW91J2QgcmF0aGVyIG5vdCByZWNlaXZlIGZ1dHVyZSBlLW1haWxzIG9mIHRoaXMgc29ydCBmcm9tIEFtYXpvbi5pbiwgcGxlYXNlIHZpc2l0IHRoZSBvcHQtb3V0IGxpbmsgaGVyZToNCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi8vZ3AvZ3NzL28vMTFYTHowVmxkclFGOWpweU1PbksybUlTY2wxLjdqT291VXZ6QnE4anlmM3RWYmlUS1FlZVJNaWdaSWVlTUlQVzMuDQoNClBsZWFzZSBub3RlIHRoYXQgcHJvZHVjdCBwcmljZXMgYW5kIGF2YWlsYWJpbGl0eSBhcmUgc3ViamVjdCB0byBjaGFuZ2UuIFByaWNlcyBhbmQgYXZhaWxhYmlsaXR5IHdlcmUgYWNjdXJhdGUgYXQgdGhlIHRpbWUgdGhpcyBuZXdzbGV0dGVyIHdhcyBzZW50OyBob3dldmVyLCB0aGV5IG1heSBkaWZmZXIgZnJvbSB0aG9zZSB5b3Ugc2VlIHdoZW4geW91IHZpc2l0IEFtYXpvbi5pbi4gDQoNCg0KDQpBbWF6b24uaW4gTWFya2V0cGxhY2UgcGxhdGZvcm06IFByb2R1Y3RzIHNvbGQgYnkgYSBNYXJrZXRwbGFjZSBzZWxsZXIgYXJlIHN1YmplY3QgdG8gdGhhdCBzZWxsZXIncyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiBzYWxlLiBTZWUgd3d3LkFtYXpvbi5pbiBmb3IgZGV0YWlscy4NCg0KUmVmZXJlbmNlOiAxMjE3NzAzNTcxDQoNClRoaXMgbWVzc2FnZSB3YXMgc2VudCB0byB0aGUgZm9sbG93aW5nIGUtbWFpbCBhZGRyZXNzOiBwc2todXNoYWxAZ21haWwuY29tDQoNCg0K" + } + }, + { + "partId": "1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html; charset=utf-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 174865, + "data": "DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICAgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KICAgIDxoZWFkPg0KICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI-DQogICAgICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ0YXJnZXQtZGVuc2l0eWRwaT1kZXZpY2UtZHBpIj4NCiAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZSA9IDEuMCwgbWF4aW11bS1zY2FsZSA9IDEuMCIgLz4NCiAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4ud2lkZ2V0SGVhZGVyDQp7DQp0ZXh0LWRlY29yYXRpb246bm9uZTsNCmNvbG9yOiNFNDc5MTE7DQpmb250LXNpemU6MTVweDsNCmZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOw0KZm9udC13ZWlnaHQ6Ym9sZDsNCn0NCi5idG4tbGVhcm5tb3JlLXNtYWxsDQp7IA0KYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZjdkZmE1LCNmMGMxNGIpOw0KYm9yZGVyLXJhZGl1czogNXB4OyANCmZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgDQpmb250LXNpemU6IDEycHg7DQpmb250LXdlaWdodDogbm9ybWFsOw0KYm9yZGVyLWNvbG9yOiAjYTg4NzM0ICM5YzdlMzEgIzg0NmEyOSAhaW1wb3J0YW50Ow0KYm9yZGVyLXN0eWxlOnNvbGlkICFpbXBvcnRhbnQ7DQpib3JkZXItd2lkdGg6MXB4ICFpbXBvcnRhbnQ7DQpib3JkZXItY29sbGFwc2U6aW5pdGlhbCAhaW1wb3J0YW50Ow0KfQ0KLmJ0bi1hZGR0b2xpc3Qtc21hbGwNCnsNCmJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2Y3ZjhmYSwjZTdlOWVjKTsNCmJvcmRlci1yYWRpdXM6IDVweDsNCmZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgDQpmb250LXNpemU6IDEycHg7DQpmb250LXdlaWdodDogbm9ybWFsOw0KYm9yZGVyLWNvbG9yOiAjYWRiMWI4ICNhMmE2YWMgIzhkOTA5NiAhaW1wb3J0YW50Ow0KYm9yZGVyLXN0eWxlOnNvbGlkICFpbXBvcnRhbnQ7DQpib3JkZXItd2lkdGg6MXB4ICFpbXBvcnRhbnQ7DQptaW4td2lkdGg6IDEwMHB4Ow0KYm9yZGVyLWNvbGxhcHNlOmluaXRpYWwgIWltcG9ydGFudDsNCn0gDQpzcGFuLm1haW5tZXNzYWdlIHsNCiAgICBmb250LXNpemU6IDM0cHg7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBsaW5lLWhlaWdodDogMTsNCiAgICBjb2xvcjogI0ZGOTkwMDsNCiAgICBmb250LXdlaWdodDogNTAwOw0KICAgIG1hcmdpbi1ib3R0b206IDVweDsNCn0NCi5vbWFfcHJfaW1hZ2Ugew0KICAgIGRpc3BsYXk6YmxvY2s7DQogIA0KfQ0KLmVtYWlsX3N1cGVyX3N1YmplY3QgYSB7DQogICAgY29sb3I6ICMzMzY2OTkgIWltcG9ydGFudDsNCn0NCi5jdGEtYnRuIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDNDM1Ow0KICAgIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KLmJ0bi1sZWFybm1vcmUtYmlnIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZDNDM1Ow0KICAgIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KLmJ0bi1hZGR0b2xpc3QtYmlnIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRTdFN0MyOw0KICAgIGJvcmRlci1yYWRpdXM6IDVweDsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgZm9udC1zaXplOiAxMnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KLmVtYWlsLXN1cGVyLXN1YmplY3Qgew0KICAgIGZvbnQtZmFtaWx5OiB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDlweDsNCiAgICBsaW5lLWhlaWdodDogMTFweDsNCiAgICBjb2xvcjogIzU1NTsNCn0NCi5oZWFkZXItbWVudSB7DQogICAgZm9udC1mYW1pbHk6IGFyaWFsLCB2ZXJkYW5hLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICBjb2xvcjogcmdiKDUxLCAxMDIsIDE1Myk7DQogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KLmludHJvLXRleHQgew0KICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICBjb2xvcjogIzMzMzMzMzsNCiAgICBmb250LXdlaWdodDogbm9ybWFsOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGxpbmUtaGVpZ2h0OiAxNnB4Ow0KICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7DQogICAgcGFkZGluZzogNnB4IDE1cHggMTJweCAxNXB4Ow0KfQ0KLmZhcm1oZWFkIHsNCiAgICBmb250LWZhbWlseTogYXJpYWw7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KICAgIGNvbG9yOiAjZTQ3OTExOw0KICAgIGxpbmUtaGVpZ2h0OiAxNnB4Ow0KICAgIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KLmZhcm1oZWFkLWZvbnQgew0KICAgIGZvbnQtZmFtaWx5OiBhcmlhbDsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgY29sb3I6ICNlNDc5MTE7DQogICAgbGluZS1oZWlnaHQ6IDE2cHg7DQp9DQoubGlua2Zhcm0tY29sLXMxIHsNCiAgICBmb250LWZhbWlseTogYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDE0cHg7DQp9DQoubGlua2Zhcm0tY29sLXMyIHsNCiAgICBmb250LWZhbWlseTogYXJpYWwsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDEycHg7DQp9DQoubGlua2Zhcm0tbGluay1zMSB7DQogICAgY29sb3I6ICM2NjY7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KLmxlZ2FsLXRleHQgew0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBTYW5zLVNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICBjb2xvcjogIzY2Ng0KfQ0KLmxlZ2FsLXRleHQtYzEgew0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBTYW5zLVNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICBjb2xvcjogIzk5OTsNCn0NCi5sZWdhbC10ZXh0LWMyIHsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgU2Fucy1TZXJpZjsNCiAgICBmb250LXNpemU6IDEwcHg7DQogICAgY29sb3I6ICNiZmJmYmY7DQp9DQoubGVnYWwtdGV4dC1jMyB7DQogICAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQogICAgZm9udC1zaXplOiA3cHQ7DQogICAgY29sb3I6ICMzRTdDQkI7DQp9DQouc2FsdXRhdGlvbi10ZXh0IHsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgY29sb3I6ICMzMDM5NDI7DQogICAgZm9udC1zaXplOiAxNHB4Ow0KICAgIGNvbG9yOiAjMzAzOTQyOw0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQp9DQpib2R5IHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlM2UzOw0KfQ0KYm9keVt5YWhvb10gew0KICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogbm9uZTsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlM2UzOw0KICAgIG1hcmdpbjogMDsNCiAgICBwYWRkaW5nOiAwOw0KICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KfQ0KLlJlYWRNc2dCb2R5IHsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlM2UzOw0KfQ0KLkV4dGVybmFsQ2xhc3Mgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2UzZTM7DQp9DQpodG1sIHsNCiAgICB3aWR0aDogMTAwJTsNCn0NCmJvZHlbeWFob29dIHRhYmxlIHsNCiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KfQ0KYm9keVt5YWhvb10gLmJ0biB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgdGV4dC1hbGlnbjogY2VudGVyIWltcG9ydGFudDsNCn0NCmJvZHlbeWFob29dIC5mYXJtLXJvdyB7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICBwYWRkaW5nOiAzcHg7DQogICAgY29sb3I6ICMzMzMzMzMNCn0NCmJvZHlbeWFob29dIC50b3AxMC1pbWctV2lkdGggew0KICAgIHdpZHRoOiAyOTBweCFpbXBvcnRhbnQ7DQogICAgdGV4dC1hbGlnbjogY2VudGVyDQp9DQpzcGFuLm1haW5tZXNzYWdlIHsNCiAgICBmb250LXNpemU6IDM0cHg7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBsaW5lLWhlaWdodDogMTsNCiAgICBjb2xvcjogI0ZGOTkwMDsNCiAgICBmb250LXdlaWdodDogNTAwDQp9DQpib2R5W3lhaG9vXSAuaW1hZ2UtY3NzbG90LW5vcm1hbCBpbWcgew0KICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7DQp9DQpib2R5W3lhaG9vXSB0ZFtjbGFzcz0ibGNvbCJdIGltZyB7DQogICAgd2lkdGg6IDE3NXB4ICFpbXBvcnRhbnQ7DQogICAgaGVpZ2h0OiAxNzVweCAhaW1wb3J0YW50Ow0KfQ0KLnNlZl9sZWdhbF9mb290ZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNFM0UzRTM7DQp9DQouc2VmX2Zvb3Rlcl9jb25uZWN0IHsNCiAgICBib3JkZXItYm90dG9tOiAzcHggc29saWQgIzg4ODg4ODsNCiAgICBoZWlnaHQ6IDBweCAhaW1wb3J0YW50Ow0KICAgIG1heC1oZWlnaHQ6IDBweCAhaW1wb3J0YW50Ow0KICAgIGZvbnQtc2l6ZTogMHB4Ow0KICAgIG1hcmdpbjogMDsNCiAgICB3aWR0aDogMTAwJTsNCn0NCmJvZHlbeWFob29dIC5zZWZfc3BhY2VyIGRpdiB7DQogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCJodHRwczovL2ltYWdlcy1uYS5zc2wtaW1hZ2VzLWFtYXpvbi5jb20vaW1hZ2VzL0cvMDEvdGVtcGxhdGUvc2VjdGlvbi1kaXZfNjQweDguanBnIikgIWltcG9ydGFudDsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRkZGOw0KICAgIGhlaWdodDogMTBweCAhaW1wb3J0YW50Ow0KICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQp9DQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY4MHB4KSB7DQogICAgLm1vYmlsZS1oaWRlLWdtYWlsIHsNCiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBvdmVyZmxvdzpoaWRkZW4gIWltcG9ydGFudDsNCiAgICAgICAgbXNvLWhpZGU6YWxsICFpbXBvcnRhbnQ7DQogICAgICAgIGxpbmUtaGVpZ2h0OiAwcHggIWltcG9ydGFudDsNCiAgICB9DQogICAgLm1vYmlsZS1oaWRlLWdtYWlsIHRhYmxlew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIG92ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50Ow0KICAgICAgICBtc28taGlkZTphbGwgIWltcG9ydGFudDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDBweCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICANCiAgICBib2R5W3lhaG9vXSAuZGV2aWNlV2lkdGggew0KICAgICAgICB3aWR0aDogMTAwJSFpbXBvcnRhbnQNCiAgICB9DQogICAgYm9keVt5YWhvb10gdGRbY2xhc3M9ImNvbCJdIGEgaW1nIHsNCiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICAgICAgbWF4LXdpZHRoOiA2MHB4ICFpbXBvcnRhbnQ7DQogICAgICAgIGhlaWdodDogYXV0byAhaW1wb3J0YW50Ow0KICAgICAgICBtaW4td2lkdGg6IDQxcHggIWltcG9ydGFudDsNCiAgICB9DQogICAgdGRbY2xhc3M9ImNvbCJdIHsNCiAgICAgICAgd2lkdGg6IDMwJSAhaW1wb3J0YW50Ow0KICAgICAgICBtYXgtd2lkdGg6IDYwcHggIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLmZhcm1MaW5rcyB7DQogICAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7DQogICAgICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLmZhcm1MaW5rcyB0ZCB7DQogICAgICAgIHRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gdGRbY2xhc3M9ImZhcm1Db250YWluZXIiXSB7DQogICAgICAgIHdpZHRoOiA1MCUgIWltcG9ydGFudDsNCiAgICAgICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2Zvb3Rlcl9saW5rZmFybSB0ZCB7DQogICAgICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5zZWZfZm9vdGVyX2xpbmtmYXJtIHRhYmxlIHsNCiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlZl9sZWdhbF9mb290ZXIsDQogICAgYm9keVt5YWhvb10gLnNlZl9zcGFjZXIsDQogICAgYm9keVt5YWhvb10gLnNlZl9mb290ZXJfY29ubmVjdCwNCiAgICBib2R5W3lhaG9vXSAuc2VmX2xlZ2FsX2Zvb3RlciwNCiAgICBib2R5W3lhaG9vXSAuc2VmX2Zvb3Rlcl9saW5rZmFybSB7DQogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5zZWZfZm9vdGVyX2xpbmtmYXJtIHRyOmxhc3QtY2hpbGQgdGQsDQogICAgYm9keVt5YWhvb10gLnNlZl9mb290ZXJfbGlua2Zhcm0gdHI6Zmlyc3QtY2hpbGQgdGQgew0KICAgICAgICB3aWR0aDogMTAwJTsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlZl9mb290ZXJfbGlua2Zhcm0gdHIgdGQgdGFibGUgew0KICAgICAgICB3aWR0aDogMTAwJTsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLmJ0biB7DQogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlciFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIHRkW2NsYXNzPSJ4LXNpdGUtdGFibGV0Il0gew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5zZXBlcmF0b3Igew0KICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuc2VwZXJhdG9yIGltZyB7DQogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgICAgIGhlaWdodDogYXV0bzsNCiAgICB9DQp9DQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KSB7DQogICAgYm9keVt5YWhvb10gLnRvcDEwLWltZy1XaWR0aCB7DQogICAgICAgIHdpZHRoOiA0NDBweCFpbXBvcnRhbnQ7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcg0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuY2VudGVyIHsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLmZvb3RlckxpbmtzIHsNCiAgICAgICAgd2lkdGg6IDMyJTsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweA0KICAgIH0NCiAgICBib2R5W3lhaG9vXSB0ZFtjbGFzcz0ibGNvbCJdLA0KICAgIGJvZHlbeWFob29dIHRkW2NsYXNzPSJyY29sIl0gew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgICAgICBmbG9hdDogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50Ow0KICAgICAgICBtYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuZmFybUxpbmtzIHsNCiAgICAgICAgbWluLXdpZHRoOiAxNDhweCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuZmFybUJvdHRvbSB7DQogICAgICAgIHdpZHRoOiAxMDAlIWltcG9ydGFudA0KICAgIH0NCiAgICBib2R5W3lhaG9vXSB0ZFtjbGFzcz0icGVfYXNpbiJdIHsNCiAgICAgICAgcGFkZGluZzogNHB4IDE1cHggNHB4IDE1cHggIWltcG9ydGFudDsNCiAgICB9DQp9DQpAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDUxNXB4KSB7DQogICAgYm9keVt5YWhvb10gLmxvZ29Ub3Agew0KICAgICAgICB3aWR0aDogMTAwJSFpbXBvcnRhbnQNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnRvcDEwLWltZy1XaWR0aCB7DQogICAgICAgIHdpZHRoOiAyOTBweCFpbXBvcnRhbnQ7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcg0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuY2VudGVyIHsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLmZvb3RlckxpbmtzIHsNCiAgICAgICAgd2lkdGg6IDMyJTsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDBweA0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuYnRuIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlciFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIHRkW2NsYXNzPSJ4LXNpdGUiXSwNCiAgICBib2R5W3lhaG9vXSAueC1zaXRlIHsNCiAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlZl9mb290ZXJfbGlua2Zhcm0gew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5zZWZfc3BhY2VyIHsNCiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2Zvb3Rlcl9jb25uZWN0IHsNCiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlZl9sZWdhbF9mb290ZXIgew0KICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAubG9nb1RvcCAuY2VudGVyIGEgew0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLmxvZ29Ub3AgdGQgew0KICAgICAgICBwYWRkaW5nOiByaWdodDogMHB4ICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5hbWF6b25Mb2dvIHsNCiAgICAgICAgcGFkZGluZzogMCAxMHB4ICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC50b3BNZW51IHsNCiAgICAgICAgcGFkZGluZzogMCAwIDVweCAwICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5jcy1pbWFnZS1zbG90IHsNCiAgICAgICAgbWFyZ2luOiBhdXRvOw0KICAgIH0NCn0NCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTk5cHgpIHsNCiAgICBib2R5W3lhaG9vXSB0ZFtjbGFzcz0icGFja0NvbCJdIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7DQogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7DQogICAgICAgIG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7DQogICAgfQ0KfQ0KICAgICAgICA8L3N0eWxlPg0KICAgIDwvaGVhZD4NCiAgICA8Ym9keT48aW1nIHdpZHRoPSIxIiBoZWlnaHQ9IjEiIHNyYz0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MkhJNlRJSTEwTUhRWiZUPU8mVT1odHRwcyUzQSUyRiUyRmltYWdlcy1ldS5zc2wtaW1hZ2VzLWFtYXpvbi5jb20lMkZpbWFnZXMlMkZHJTJGMDElMkZuYXYlMkZ0cmFuc3AuZ2lmJkg9NlJFS0lGUFBDWlROOVhXUE9FQVBFSU5FRERJQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfb3BlbnMiIC8-DQogICAgDQogICAgDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJtb2JpbGUtaGlkZS1nbWFpbCI-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxIiBjbGFzcz0iaGlkZSIgc3R5bGU9Im1pbi13aWR0aDo3MDBweCAhaW1wb3J0YW50OyBmb250LXNpemU6MHB4O2xpbmUtaGVpZ2h0OjBweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBoZWlnaHQ9IjEiIHN0eWxlPSJtaW4td2lkdGg6IDcwMHB4ICFpbXBvcnRhbnQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyIgLz4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgIA0KICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjEwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNlM2UzZTMiDQogICAgICAgICAgICB5YWhvbz0iZml4Ij4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiPg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCg0KPHRhYmxlIHdpZHRoPSI2NDAiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0iZGV2aWNlV2lkdGgiPg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6MCAwIDEwcHggMDsgZm9udC1zaXplOjA7IGhlaWdodDowOyIgY2xhc3M9Ingtc2l0ZSIgdmFsaWduPSJib3R0b20iPg0KICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCI-DQogICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgPC90YWJsZT4NCg0KICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiBjbGFzcz0iaGVhZGVyLWNzc2xvdCI-DQoNCg0KDQogICAgDQoNCiAgICANCg0KICAgIA0KICAgICAgIA0KICAgICAgICAgDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KPC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQo8L3RhYmxlPg0KDQo8dGFibGUgd2lkdGg9IjY0MCIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJkZXZpY2VXaWR0aCI-DQogICAgPHRyPg0KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJoZWFkZXItY3NzbG90Ij4NCiAgICAgICAgDQoNCg0KDQogICAgDQogICAgICAgDQogICAgICAgICANCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KPC90ZD4NCiAgICA8L3RyPg0KDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjQwIiBoZWlnaHQ9IjYiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIg0KICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRldmljZVdpZHRoIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNlM2UzZTMiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJib3JkZXItYm90dG9tOiA2cHggc29saWQgI0ZGOTkwMDsgaGVpZ2h0OiAwcHggIWltcG9ydGFudDsgbWF4LWhlaWdodDogMHB4ICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTowcHg7IG1hcmdpbjogMDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4mbmJzcDs8L3A-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSI2NDAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgIGJnY29sb3I9IiNmZmZmZmYiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2ZmZmZmZiIgY2xhc3M9ImRldmljZVdpZHRoIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGhlaWdodD0iNXB4IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYWxpZ249ImNlbnRlciIgY2xhc3M9ImRldmljZVdpZHRoIj4NCiAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQ-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgdmFsaWduPSJtaWRkbGUiID4NCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEJlZ2luIFNpbXBsZSBUZW1wbGF0ZSAtLT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI-DQogICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCkgew0KICAgIGJvZHlbeWFob29dIC5sb2dvVG9wLCAubG9nb1RvcCB0YWJsZSAgeyB3aWR0aDogMzAwcHggIWltcG9ydGFudDsgfQ0KICAgIGJvZHlbeWFob29dIC5sb2dvVG9wIC5zZWZfbG9nb19jb250ZW50IHsgDQogICAgcGFkZGluZzogMTBweCAyMHB4IDAgMjBweCAhaW1wb3J0YW50OyANCiAgICBib3JkZXItdG9wOiBzb2xpZCA0cHggI2Y2OTQwNCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAubG9nb1RvcCAuc3BhY2VyIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9DQogICAgYm9keVt5YWhvb10gLmxvZ29Ub3AgLnRvcE1lbnUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0NCiAgICBib2R5W3lhaG9vXSAubG9nb1RvcCwgLmxvZ29Ub3AgdGQgeyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfQ0KICAgIGJvZHlbeWFob29dIC5zZWZfbG9nb19oZWFkZXIsIGJvZHlbeWFob29dIC5zZWZfbG9nb19oZWFkZXIgdGFibGUgIHsgd2lkdGg6IDMwMHB4ICFpbXBvcnRhbnQ7IH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2xvZ29faGVhZGVyIC5zZWZfbG9nb19jb250ZW50IHsNCiAgICBwYWRkaW5nOiAxMHB4IDIwcHggMCAyMHB4ICFpbXBvcnRhbnQ7DQogICAgYm9yZGVyLXRvcDogc29saWQgNHB4ICNmNjk0MDQgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlZl9sb2dvX2hlYWRlciwgYm9keVt5YWhvb10gLnNlZl9sb2dvX2hlYWRlciB0YWJsZSAgeyB3aWR0aDogMzAwcHggIWltcG9ydGFudDsgfQ0KICAgICAgICBib2R5W3lhaG9vXSAuc2VmX2xvZ29faGVhZGVyIC5zZWZfbG9nb19jb250ZW50IHsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHggMjBweCAwIDIwcHggIWltcG9ydGFudDsNCiAgICAgICAgICAgIGJvcmRlci10b3A6IHNvbGlkIDRweCAjZjY5NDA0ICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2xvZ29faGVhZGVyIC5zcGFjZXIgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2xvZ29faGVhZGVyIC5zZWZfaGVhZGVyX21lbnUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2xvZ29faGVhZGVyIHRyLCBib2R5W3lhaG9vXSAuc2VmX2xvZ29faGVhZGVyIHRkIHsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0NCiAgICB9DQo8L3N0eWxlPg0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgIGJvZHlbeWFob29dIC5zZXBlcmF0b3Ige3dpZHRoOiAxMDAlICFpbXBvcnRhbnQ7fQ0KICAgIGJvZHlbeWFob29dIC5zZXBlcmF0b3IgaW1nIHt3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBoZWlnaHQ6IGF1dG87fQ0KPC9zdHlsZT4NCjx0YWJsZSBiZ2NvbG9yPSIjRkZGRkZGIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImxvZ29Ub3AiIGFsaWduPSJsZWZ0Ij4NCiAgICA8dGJvZHk-DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY2VudGVyIj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xQUg4SFZHUThKTEc5JlQ9QyZVPWh0dHAlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9zZWZfbG9nbyZIPThLSDZPVUVIRUQ2UFlaRkFEVE4yNVZNWkNMQ0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3NlZl9sb2dvIj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9pbWFnZXMtZXUuc3NsLWltYWdlcy1hbWF6b24uY29tL2ltYWdlcy9HLzMxL2VtYWlsL2luL2xvZ28vYW1hem9uX3ByaW1lX2xvZ29faW5fMTUweDQ4LmpwZyIgYWx0PSJBbWF6b24uaW4iIGJvcmRlcj0iMCIgaHNwYWNlPSI2IiB2c3BhY2U9IjYiPg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgIDwvdGQ-DQogICAgICAgIDwvdHI-DQogICAgPC90Ym9keT4NCjwvdGFibGU-DQo8dGFibGUgY2xhc3M9ImxvZ29Ub3AgIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIxMCIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJyaWdodCI-DQogICAgPHRib2R5Pg0KICAgICAgICA8dHI-DQogICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiBjbGFzcz0idG9wTWVudSI-DQogICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9Im1hcmdpbjowIGF1dG87Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj00MEFWT01XNUxORU8mVD1DJlU9aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnlvdXJzdG9yZSUyRmhvbWUlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX3lvdXJzdG9yZSUyRiZIPVpWVjA5ME5WWjJDNjJRQVhLMUNMS0tRU0FKUUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX3lvdXJzdG9yZSIgc3R5bGU9ImZvbnQtZmFtaWx5OiBhcmlhbCx2ZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IHJnYig1MSwgMTAyLCAxNTMpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtd2VpZ2h0OiBib2xkO3RleHQtYWxpZ246Y2VudGVyOyB3b3JkLXdyYXA6IG5vcm1hbCAhIGltcG9ydGFudDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3VyIEFtYXpvbi5pbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiIgd2lkdGg9IjgiPiZuYnNwOzwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNjY2MiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ij48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIiB3aWR0aD0iMTIiPiZuYnNwOzwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9mLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPUQyN1c3RFNPVUMwSiZUPUMmVT1odHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcmVkaXJlY3QuaHRtbCUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfZGVhbHMlM0Zsb2NhdGlvbiUzRGh0dHAlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZnb2xkYm94Jkg9VVpMQllPMDIwTlE1MkNZOU1NWlJKRFpHWURZQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfZGVhbHMiIHN0eWxlPSJmb250LWZhbWlseTogYXJpYWwsdmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiByZ2IoNTEsIDEwMiwgMTUzKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZDt0ZXh0LWFsaWduOmNlbnRlcjsgd29yZC13cmFwOiBub3JtYWwgISBpbXBvcnRhbnQ7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9kYXkncyBEZWFscw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiIgd2lkdGg9IjgiPiZuYnNwOzwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNjY2MiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ij48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIiB3aWR0aD0iOCI-Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL2YuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9Mkk5WFBLMURNNDFZRyZUPUMmVT1odHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcmVkaXJlY3QuaHRtbCUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfYXBwJTJGJTNGbG9jYXRpb24lM0RodHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRm1zaG9wJkg9R0RZRUZSTFNJUEpQVVlRTFNYSENTVFFOSjdNQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfYXBwIiBzdHlsZT0iZm9udC1mYW1pbHk6IGFyaWFsLHZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogcmdiKDUxLCAxMDIsIDE1Myk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7IHdvcmQtd3JhcDogbm9ybWFsICEgaW1wb3J0YW50OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldCBBbWF6b24gQXBwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIiB3aWR0aD0iOCIgY2xhc3M9Ingtc2l0ZSI-Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgIDwvdGQ-DQogICAgICAgIDwvdHI-DQogICAgPC90Ym9keT4NCjwvdGFibGU-DQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVuZCBTaW1wbGUgVGVtcGxhdGUgLS0-DQogICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KPCEtLSAgRW5kIEhFQURFUiAtLT48dGFibGUgd2lkdGg9IjY0MCIgY2xhc3M9ImRldmljZVdpZHRoIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYWxpZ249ImNlbnRlciIgYmdjb2xvcj0iI0ZGRkZGRiI-DQogICAgPHRyPg0KICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI-DQogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9pbWFnZXMtbmEuc3NsLWltYWdlcy1hbWF6b24uY29tL2ltYWdlcy9HLzE1L2VtYWlsL3RlbXBsYXRlL3N0dWRlbnQvY3VzdG9tLXJ1bGVfNjQwLl9DQjM4Njg1NjEyOV8uZ2lmIg0KICAgICAgICAgICAgICAgIGFsdD0iPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ICIgYm9yZGVyPSIwIiBhbGlnbj0ibWlkZGxlIiBjbGFzcz0iZGV2aWNlV2lkdGgiDQogICAgICAgICAgICAgICAgc3R5bGU9ImJpY3ViaWM7IG1heC13aWR0aDo2NDBweDsgbWF4LWhlaWdodDo4cHg7IGNvbG9yOiNDQ0NDQ0M7IGxpbmUtaGVpZ2h0OjFweCINCiAgICAgICAgICAgICAgICAvPg0KICAgICAgICA8L3RkPg0KICAgIDwvdHI-DQo8L3RhYmxlPg0KDQoNCiAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIDx0YWJsZSBhbGlnbj0iY2VudGVyIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IHdpZHRoOjEwMCU7IiA-DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iQWxleGEtYmFubmVyIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249Im1pZGRsZSI-DQoNCg0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICA8L3RhYmxlPg0KICAgICAgICANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICANCg0KICAgIDx0YWJsZSAgd2lkdGg9IjYxMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxNSIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGV2aWNlV2lkdGgiIHN0eWxlPSJ3aWR0aDoxMDAlOyI-DQogICAgPHRib2R5Pg0KICAgICAgPHRyPg0KICAgICAgICA8dGQgY2xhc3M9ImludHJvLXRleHQiIGFsaWduPSJsZWZ0IiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij4NCiAgICAgICAgICA8c3BhbiBjbGFzcz0ic2FsdXRhdGlvbi10ZXh0Ij4NCiAgICAgICAgICAgICAgICBIZWxsbyBLaHVzaGFsIFAgUywNCiAgICAgICAgICAgICAgDQogICAgICAgICAgDQogICAgICAgICAgPGJyPkFyZSB5b3UgbG9va2luZyBmb3Igc29tZXRoaW5nIGluIG91ciA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xV0JRSEs3QUdHV0UzJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkYlM0Zub2RlJTNEMTM3NTI0ODAzMSUyNnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxJkg9Mk5NR1dKQUlMUVpDQUNOUzFBR1FQSjFEWjBVQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzEiPkFDQ0VTU09SWSBPUiBQQVJUIE9SIFNVUFBMWTwvYT4gc3RvcmU_IElmIHNvLCB5b3UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB0aGVzZSBpdGVtcy4NCiANCiAgICAgICAgPC9zcGFuPg0KDQogICAgICAgIDwvdGQ-DQogICAgICA8L3RyPg0KICAgIDwvdGJvZHk-DQo8L3RhYmxlPg0KPHRhYmxlIHdpZHRoPSI2NDAiIGNsYXNzPSJkZXZpY2VXaWR0aCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGFsaWduPSJjZW50ZXIiIGJnY29sb3I9IiNGRkZGRkYiPg0KICAgIDx0cj4NCiAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPg0KICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vaW1hZ2VzLW5hLnNzbC1pbWFnZXMtYW1hem9uLmNvbS9pbWFnZXMvRy8xNS9lbWFpbC90ZW1wbGF0ZS9zdHVkZW50L2N1c3RvbS1ydWxlXzY0MC5fQ0IzODY4NTYxMjlfLmdpZiINCiAgICAgICAgICAgICAgICBhbHQ9Ij0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSAiIGJvcmRlcj0iMCIgYWxpZ249Im1pZGRsZSIgY2xhc3M9ImRldmljZVdpZHRoIg0KICAgICAgICAgICAgICAgIHN0eWxlPSJiaWN1YmljOyBtYXgtd2lkdGg6NjQwcHg7IG1heC1oZWlnaHQ6OHB4OyBjb2xvcjojQ0NDQ0NDOyBsaW5lLWhlaWdodDoxcHgiDQogICAgICAgICAgICAgICAgLz4NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCiAgICANCiAgICANCiAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgYmdjb2xvcj0iI0ZGRkZGRiIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0id2lkZ2V0X2hlYWRlciIgYWxpZ249ImNlbnRlciIgc3R5bGU9Im1pbi13aWR0aDoxMDAlOyI-DQogICAgPHRyPg0KICAgICAgICA8dGQgY29sc3Bhbj0iMyIgd2lkdGg9IjEwMCUiPg0KICAgICAgICAgICAgPGRpdiB3aWR0aD0iMTAwJSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZTo4cHg7bGluZS1oZWlnaHQ6OHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgIDwvdGQ-DQogICAgPC90cj4NCiAgICA8dHI-DQogICAgICAgIDx0ZCB3aWR0aD0iMyUiPg0KICAgICAgICAgICAgPGRpdiB3aWR0aD0iMTUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MXB4O2xpbmUtaGVpZ2h0OjFweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICA8L3RkPg0KICAgICAgICA8dGQgaGVpZ2h0PSIxNiIgd2lkdGg9Ijk3JSI-DQogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBiZ2NvbG9yPSIjRkZGRkZGIiBjZWxsc3BhY2luZz0iMiIgYWxpZ249ImxlZnQiIGNlbGxwYWRkaW5nPSIwIiBjbGFzcz0id2lkZ2V0X2NvbnRlbnQiPg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiB2YWxpZ249ImJvdHRvbSIgY2xhc3M9ImNhdGVnb3J5Ij4gPHNwYW4gY2xhc3M9IndpZGdldEhlYWRlciIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiNFNDc5MTE7Zm9udC1zaXplOjE1cHg7Zm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6Ym9sZDsiPkFDQ0VTU09SWSBPUiBQQVJUIE9SIFNVUFBMWTwvc3Bhbj4gPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCI-DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxMCIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxcHg7bGluZS1oZWlnaHQ6MXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgIDwvdGQ-DQogICAgPC90cj4NCiAgICAgPHRyPg0KICAgICAgICAgPHRkIGNvbHNwYW49IjMiPg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogPHRhYmxlIHdpZHRoPSI5NyUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0ic2VwZXJhdG9yIiBzdHlsZT0ibWluLXdpZHRoOjk3JTsiPg0KICAgIDx0Ym9keT4NCiAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxMDAlIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICAgPHRyIGhlaWdodD0iMSI-DQogICAgICAgICAgICA8dGQgYmdjb2xvcj0iI2VhZWJlYyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI-DQogICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMTAwJSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxcHg7bGluZS1oZWlnaHQ6MXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEwMCUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgIDwvdGJvZHk-DQo8L3RhYmxlPg0KICAgICAgICAgPC90ZD4NCiAgICAgPC90cj4NCiAgICANCjwvdGFibGU-DQogICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICANCiAgICAgICAgDQoNCiAgICANCiAgICANCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIAkgICAgICAgIA0KICAgIA0KDQogICAgDQogICAgDQogICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICAgICAgICANCiAgICAgICAgDQogICAgDQogICAgDQoNCg0KDQoNCg0KPHRhYmxlIHdpZHRoPSI2NDAiPg0KICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNSI-DQogICAgICAgICA8ZGl2IHdpZHRoPSIxNSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjYyMCIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0IiBjbGFzcz0icHJfY29udGFpbmVyIj4NCiAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9Imxpc3RfcHJvZHVjdCI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE1MCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJwcl9pbWFnZSI-DQogICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9S0VSTVRBWFdXVkcyJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwOEpIWVdKTVAlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzFfaW0mSD1VQTFDVkFOVFFYVzQ3TkIyQ0ZBQkJEUlo1UVdBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8xX2ltIj4NCiAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vbS5tZWRpYS1hbWF6b24uY29tL2ltYWdlcy9JLzMxUUlPOXdjR1pMLl9TUjUwMCw1MDBfLl9TTDE0MF8uanBnIiBjbGFzcz0icHJfaW1hZ2VfMTc1IHByX2ltYWdlX2Rlc2t0b3AiIGFsdD0iQW1rZXR0ZSA0IFBvcnQgU3VwZXJzcGVlZCBVU0IgSHViIDMuMCBmb3IgUEMvTGFwdG9wcywgUG9ydGFibGUgRGF0YSBIdWIgd2l0aCBIaS1TcGVlZCBEYXRhIFRyYW5zZmVyIFVwIHRvIDUgR0JQUywgQ2hhcmdpbmcgRnVuY3Rpb258IFN0cm9uZyBhbmQgRHVyYWJsZSwgUG93ZXIgU3VwcGx5IFBvcnQgYW5kIDgwIGNtIExvbmcgQ2FibGUgKEJsYWNrKSIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjM2NSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl90aXRsZSI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICANCg0KDQogICAgDQoNCg0KICAgIA0KDQoNCg0KDQoNCjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtYWxpZ246bGVmdDtjb2xvcjojMzM2Njk5OyI-DQogICAgIDxhIGNsYXNzPSJvbWFfcHJfdGl0bGUiIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPVU3NjJXRFJVMkIxVCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDhKSFlXSk1QJTNGcmVmJTNEZW1fMXBfMV90aSUyNnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxJkg9VlNSWUQ3UUNCQlBISERKRlJLTFpaUFZISlpXQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzEiIHN0eWxlPSJmb250LXNpemU6IDE0cHg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjb2xvcjojMzM2Njk5OyI-DQogICAgICAgICAgQW1rZXR0ZSA0IFBvcnQgU3VwZXJzcGVlZCBVU0IgSHViIDMuMCBmb3IgUEMvTGFwdG9wcywgUG9ydGFibGUuLi48L2E-DQo8L3NwYW4-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9ieWxpbmUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQoNCg0KDQoNCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICAgICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgIA0KICAgIA0KICAgIA0KDQogICAgDQogICAgICAgIDxzcGFuIGNsYXNzPSJvbWEtcHItYmwiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsU2Fucy1TZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzMzMzt0ZXh0LWFsaWduOmxlZnQ7Ij4NCiAgICAgICAgICAgICA8YnI-IGJ5DQogICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9Mkw1N04zUkRTM0NLJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRnN0b3JlcyUyRkFta2V0dGUlMkZwYWdlJTJGNjUxRTBENTAtNTE3Ni00RTlFLTg3NTYtRUEwRDkyQTk3Qzg4JTNGcmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfYXN0X2JsbiUyNnN0b3JlX3JlZiUzRGJsX2FzdF9kcF9icmFuZExvZ29fc3RvJkg9R1hVVUtLR09PNVFENThRN01JSTFTVkcwUUc0QSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfYXN0X2JsbiIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjojMzM2Njk5OyI-QW1rZXR0ZTwvYT4NCiAgICAgICAgPC9zcGFuPg0KICAgIA0KDQogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0ic3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX2xpc3QiPg0KICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTS5SLlAuOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9saXN0Ij4gICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpa2U-4oK5MSwzOTkuMDA8L3N0cmlrZT4gICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX291ciI-DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmljZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJwcl9wcmljZV9oaWdobGlnaHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrk5MjguMDAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IFNhdmU6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJvbWFfcHJfcHJpY2VfdmFsX3NhdmluZ3MiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oK5NDcxLjAwIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzNCUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KDQoNCg0KDQoNCg0KICAgIA0KDQoNCg0KCQ0KDQoNCg0KDQoNCg0KDQoJDQoNCg0KDQoJDQoNCgkNCg0KICAgIA0KCSAgICAgDQogICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgPHRyIGNsYXNzPSJwcl9tZXJjaGFudCI-DQogICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgY29sb3I6IzU1NTU1NTsgZm9udC1zaXplOjEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBTb2xkIGJ5IA0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJSQVY0MUNJWEYzTUEmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZhYWclMkZtYWluJTNGaWUlM0RVVEY4JTI2YXNpbiUzREIwOEpIWVdKTVAlMjZpc0FtYXpvbkZ1bGZpbGxlZCUzRDElMjZtYXJrZXRwbGFjZUlEJTNEQTIxVEpSVVVONEtHViUyNnByb3RvY29sJTNEY3VycmVudCUyNnNlbGxlciUzREFKNlNJWkM4WVFEWlglMjZzc2htUGF0aCUzRCUyNnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxJkg9QkFQVkszTUFTVlBTUkxUV1M0TldBT1hDNVdRQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzEiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC13ZWlnaHQ6bm9ybWFsOyBmb250LXNpemU6MTJweDtjb2xvcjogIzMzNjY5OTsiPkNsaWNrdGVjaCBSZXRhaWwgUHJpdmF0ZSBMdGQ8L2E-IGFuZCANCiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDsiPkZ1bGZpbGxlZCBieSBBbWF6b248L3NwYW4-Lg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8L3NwYW4-IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICANCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDUiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCg0KDQo8ZGl2IGNsYXNzPSJwcl9sZWFybl9tb3JlIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyI-DQogICAgICAgIDx0YWJsZSBjbGFzcz0iYnRuLWxlYXJubW9yZS1zbWFsbCIgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyIgc3R5bGU9ImNvbG9yOiAjMTExOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgIHdoaXRlLXNwYWNlOiBub3dyYXA7YmFja2dyb3VuZC1jb2xvcjogI0ZFQzY1MDsgZm9udC1zaXplOjEwcHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgIDx0ZCBub3dyYXA-DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPUFETFVZOUpBNkEyRSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDhKSFlXSk1QJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8xX2xtJkg9V0taMEoyNzVBS1Y1NkZBMlJFTTVUV1BRVkhTQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMV9sbSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMTExOyI-DQogICAgICAgICAgICAgICAgICAgICAgICBMZWFybiBtb3JlDQogICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCjwvZGl2Pg0KDQoNCg0KIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPiA8dGFibGUgd2lkdGg9IjYyMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJzZXBlcmF0b3IiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjZWFlYmVjIiB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjFweDtsaW5lLWhlaWdodDoxcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgPC90YWJsZT4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgIDwvdHI-DQo8L3RhYmxlPg0KICAgIA0KICAgIA0KICAgIA0KDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQoNCg0KDQoNCg0KPHRhYmxlIHdpZHRoPSI2NDAiPg0KICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNSI-DQogICAgICAgICA8ZGl2IHdpZHRoPSIxNSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjYyMCIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0IiBjbGFzcz0icHJfY29udGFpbmVyIj4NCiAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9Imxpc3RfcHJvZHVjdCI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE1MCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJwcl9pbWFnZSI-DQogICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MUgxNkRQUU1VRUIyTSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMEI1SDg0NkhUJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8yX2ltJkg9UElaSU9TTkZHU0FCRVlQSlRET1Y1SFlCWktDQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMl9pbSI-DQogICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL20ubWVkaWEtYW1hem9uLmNvbS9pbWFnZXMvSS8zMVU1UURIaUI3TC5fU1I1MDAsNTAwXy5fU0wxNDBfLmpwZyIgY2xhc3M9InByX2ltYWdlXzE3NSBwcl9pbWFnZV9kZXNrdG9wIiBhbHQ9IlpFQlJPTklDUyAxNTBIYiA0IFBvcnQgVVNCIEh1YiB3aXRoIERlZGljYXRlZCBPbi9PZmYgU3dpdGNoLCBMZWQgSW5kaWNhdG9ycywgNDVDbSBDYWJsZSBMZW5ndGgsIE9wdGlvbmFsIFBvd2VyIElucHV0IFBvcnQsIE11bHRpIERldmljZSBhbmQgUGx1ZyBQbGF5IFVzYWdlIiBib3JkZXI9IjAiPg0KICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzY1IiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPg0KICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3RpdGxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLFNhbnMtU2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMzMzY2OTk7Ij4NCiAgICAgPGEgY2xhc3M9Im9tYV9wcl90aXRsZSIgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MjVIMkJSU0tOVEU3RCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMEI1SDg0NkhUJTNGcmVmJTNEZW1fMXBfMl90aSUyNnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxJkg9RlBGTzNLNDM3TjhBNTZSQlBBUjA1WVMxVDRNQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzEiIHN0eWxlPSJmb250LXNpemU6IDE0cHg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjb2xvcjojMzM2Njk5OyI-DQogICAgICAgICAgWkVCUk9OSUNTIDE1MEhiIDQgUG9ydCBVU0IgSHViIHdpdGggRGVkaWNhdGVkIE9uL09mZiBTd2l0Y2gsLi4uPC9hPg0KPC9zcGFuPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfYnlsaW5lIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgICAgIA0KDQogICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICA8c3BhbiBjbGFzcz0ib21hLXByLWJsIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLFNhbnMtU2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpsZWZ0OyI-DQogICAgICAgICAgICAgPGJyPiBieQ0KICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJBMU5VT1NPUzlHRlomVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGc3RvcmVzJTJGWmVicm9uaWNzJTJGcGFnZSUyRkVBNjhGQzI3LTIxMzUtNDYyNi1BRjE5LTgyOTZGQTQ0NjQyOSUzRnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4mSD1DMThOWVJKWUFVQTFaWjhZRlZUUEgxWlk5NklBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9hc3RfYmxuIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiMzMzY2OTk7Ij5aRUJST05JQ1M8L2E-DQogICAgICAgIDwvc3Bhbj4NCiAgICANCg0KIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InNwYWNlciI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9saXN0Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uUi5QLjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfbGlzdCI-ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaWtlPuKCuTY5OS4wMDwvc3RyaWtlPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYWwgUHJpY2U6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0icHJfcHJpY2VfaGlnaGxpZ2h0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oK5MTk5LjAwICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX3NhdmluZ3MiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBTYXZlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuTUwMC4wMCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNzIlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCg0KDQoNCg0KDQoNCiAgICANCg0KDQoNCgkNCg0KDQoNCg0KDQoNCg0KCQ0KDQoNCg0KCQ0KDQoJDQoNCiAgICANCgkgICAgIA0KICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgIDx0ciBjbGFzcz0icHJfbWVyY2hhbnQiPg0KICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IHRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGNvbG9yOiM1NTU1NTU7IGZvbnQtc2l6ZToxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgU29sZCBieSANCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zNDJLVFdBSTNZNExRJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGYWFnJTJGbWFpbiUzRmllJTNEVVRGOCUyNmFzaW4lM0RCMEI1SDg0NkhUJTI2aXNBbWF6b25GdWxmaWxsZWQlM0QxJTI2bWFya2V0cGxhY2VJRCUzREEyMVRKUlVVTjRLR1YlMjZwcm90b2NvbCUzRGN1cnJlbnQlMjZzZWxsZXIlM0RBSjZTSVpDOFlRRFpYJTI2c3NobVBhdGglM0QlMjZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MSZIPUJBWkFBREVLRzI4TzFTV01ITEJIQ1VVQTdZSUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgZm9udC1zaXplOjEycHg7Y29sb3I6ICMzMzY2OTk7Ij5DbGlja3RlY2ggUmV0YWlsIFByaXZhdGUgTHRkPC9hPiBhbmQgDQogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij5GdWxmaWxsZWQgYnkgQW1hem9uPC9zcGFuPi4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPC9zcGFuPiANCiAgICAgICAgICAgIDwvdGQ-DQogICAgICAgIDwvdHI-DQogICAgDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTA1IiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQoNCg0KPGRpdiBjbGFzcz0icHJfbGVhcm5fbW9yZSIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsiPg0KICAgICAgICA8dGFibGUgY2xhc3M9ImJ0bi1sZWFybm1vcmUtc21hbGwiICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiIHN0eWxlPSJjb2xvcjogIzExMTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7ICB3aGl0ZS1zcGFjZTogbm93cmFwO2JhY2tncm91bmQtY29sb3I6ICNGRUM2NTA7IGZvbnQtc2l6ZToxMHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czogNXB4OyI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQgbm93cmFwPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zN1dIOUVRR0dSTDBGJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwQjVIODQ2SFQlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzJfbG0mSD1FT1pSSTdSUVZUUjNaU1BDRU1HS0paTzdKODBBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8yX2xtIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249Im1pZGRsZSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMxMTE7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIExlYXJuIG1vcmUNCiAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICA8L3RhYmxlPg0KPC9kaXY-DQoNCg0KDQogDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgIDwvdGFibGU-IDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2xhc3M9InNlcGVyYXRvciI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNlYWViZWMiIHdpZHRoPSI2MjAiIGhlaWdodD0iMSI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MXB4O2xpbmUtaGVpZ2h0OjFweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iMTUiPg0KICAgICAgICAgPGRpdiB3aWR0aD0iMTUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxNXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICA8L3RkPg0KICAgPC90cj4NCjwvdGFibGU-DQogICAgDQogICAgDQogICAgDQoNCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCg0KDQoNCg0KDQo8dGFibGUgd2lkdGg9IjY0MCI-DQogICA8dHI-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iNjIwIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiIGNsYXNzPSJwcl9jb250YWluZXIiPg0KICAgICAgICAgPHRhYmxlIHdpZHRoPSI2MjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0ibGlzdF9wcm9kdWN0Ij4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTUwIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgY2xhc3M9InByX2ltYWdlIj4NCiAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj1FMFJBVUk2NktOU00mVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA5RzlNRzFCUCUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfM19pbSZIPVlaT09IQ1VPWDZSWEpVQTFOUVYzWUI2QTlSQUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzNfaW0iPg0KICAgICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9tLm1lZGlhLWFtYXpvbi5jb20vaW1hZ2VzL0kvNDErMGtZUXVxbkwuX1NSNTAwLDUwMF8uX1NMMTQwXy5qcGciIGNsYXNzPSJwcl9pbWFnZV8xNzUgcHJfaW1hZ2VfZGVza3RvcCIgYWx0PSJBUk9QQU5BIFVTQiAzLjEgR2VuIDEgL1VTQiAzLjAgSGlnaCBTcGVlZCA1R2JwcyBIdWIgZm9yIExhcHRvcCA0IFBvcnQgUG9ydGFibGUgQWRhcHRlciB3aXRoIEluZGl2aWR1YWwgUG93ZXIgT04vT2ZmIFN3aXRjaCBhbmQgSW5kaXZpZHVhbCBCbHVlIExFRCBJbmRpY2F0b3JzIE11bHRpLVBvcnQiIGJvcmRlcj0iMCI-DQogICAgICAgICAgICA8L2E-DQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzNjUiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI-DQogICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfdGl0bGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQoNCg0KDQo8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsU2Fucy1TZXJpZjtmb250LXNpemU6MTVweDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWFsaWduOmxlZnQ7Y29sb3I6IzMzNjY5OTsiPg0KICAgICA8YSBjbGFzcz0ib21hX3ByX3RpdGxlIiBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zNFZZWlBHNTBLNkdHJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwOUc5TUcxQlAlM0ZyZWYlM0RlbV8xcF8zX3RpJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1TMFBKUE1ZRVVJN1A4VUZKR0hIWlAxRU9HRVNBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGNvbG9yOiMzMzY2OTk7Ij4NCiAgICAgICAgICBBUk9QQU5BIFVTQiAzLjEgR2VuIDEgL1VTQiAzLjAgSGlnaCBTcGVlZCA1R2JwcyBIdWIgZm9yIExhcHRvcC4uLjwvYT4NCjwvc3Bhbj4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX2J5bGluZSI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KDQoNCg0KDQoNCg0KDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCg0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgDQogICAgDQoNCiAgICANCiAgICAgICAgPHNwYW4gY2xhc3M9Im9tYS1wci1ibCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMzMzO3RleHQtYWxpZ246bGVmdDsiPg0KICAgICAgICAgICAgIDxicj4gYnkNCiAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zMDE5NEYyMDE3RFcwJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRnN0b3JlcyUyRmFyb3BhbmElMkZwYWdlJTJGNDFDODNDRTAtNkUwMS00OTBBLUFEN0YtOUY0NjdFQTBBREVGJTNGcmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfYXN0X2JsbiUyNnN0b3JlX3JlZiUzRGJsX2FzdF9kcF9icmFuZExvZ29fc3RvJkg9Q0hVQ0tTSDFDTUFFMkc0TDFQNUZYSURUMlhJQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfYXN0X2JsbiIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjojMzM2Njk5OyI-QVJPUEFOQTwvYT4NCiAgICAgICAgPC9zcGFuPg0KICAgIA0KDQogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0ic3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX2xpc3QiPg0KICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTS5SLlAuOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9saXN0Ij4gICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpa2U-4oK5MSw1OTkuMDA8L3N0cmlrZT4gICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX291ciI-DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmljZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJwcl9wcmljZV9oaWdobGlnaHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrk4OTkuMDAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IFNhdmU6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJvbWFfcHJfcHJpY2VfdmFsX3NhdmluZ3MiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oK5NzAwLjAwIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg0NCUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KDQoNCg0KDQoNCg0KICAgIA0KDQoNCg0KCQ0KDQoNCg0KDQoNCg0KDQoJDQoNCg0KDQoJDQoNCgkNCg0KICAgIA0KCSAgICAgDQogICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgPHRyIGNsYXNzPSJwcl9tZXJjaGFudCI-DQogICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgY29sb3I6IzU1NTU1NTsgZm9udC1zaXplOjEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBTb2xkIGJ5IA0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTM1UzZUMDRMTVJFS00mVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZhYWclMkZtYWluJTNGaWUlM0RVVEY4JTI2YXNpbiUzREIwOUc5TUcxQlAlMjZpc0FtYXpvbkZ1bGZpbGxlZCUzRDElMjZtYXJrZXRwbGFjZUlEJTNEQTIxVEpSVVVONEtHViUyNnByb3RvY29sJTNEY3VycmVudCUyNnNlbGxlciUzREEzSUdPR05WR005R0JUJTI2c3NobVBhdGglM0QlMjZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MSZIPVpWNExYUk1IN1JOVTVGRUdCNFlQSFIzT01ZWUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgZm9udC1zaXplOjEycHg7Y29sb3I6ICMzMzY2OTk7Ij5BUk9QQU5BPC9hPiBhbmQgDQogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij5GdWxmaWxsZWQgYnkgQW1hem9uPC9zcGFuPi4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPC9zcGFuPiANCiAgICAgICAgICAgIDwvdGQ-DQogICAgICAgIDwvdHI-DQogICAgDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTA1IiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQoNCg0KPGRpdiBjbGFzcz0icHJfbGVhcm5fbW9yZSIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsiPg0KICAgICAgICA8dGFibGUgY2xhc3M9ImJ0bi1sZWFybm1vcmUtc21hbGwiICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiIHN0eWxlPSJjb2xvcjogIzExMTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7ICB3aGl0ZS1zcGFjZTogbm93cmFwO2JhY2tncm91bmQtY29sb3I6ICNGRUM2NTA7IGZvbnQtc2l6ZToxMHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czogNXB4OyI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQgbm93cmFwPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zOERKNVdJUDFHRThDJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwOUc5TUcxQlAlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzNfbG0mSD1KV1NIWjZMUEcyVEtVTEpNTEVNVjdCSDJaMFlBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8zX2xtIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249Im1pZGRsZSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMxMTE7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIExlYXJuIG1vcmUNCiAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICA8L3RhYmxlPg0KPC9kaXY-DQoNCg0KDQogDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgIDwvdGFibGU-IDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2xhc3M9InNlcGVyYXRvciI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNlYWViZWMiIHdpZHRoPSI2MjAiIGhlaWdodD0iMSI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MXB4O2xpbmUtaGVpZ2h0OjFweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iMTUiPg0KICAgICAgICAgPGRpdiB3aWR0aD0iMTUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxNXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICA8L3RkPg0KICAgPC90cj4NCjwvdGFibGU-DQogICAgDQogICAgDQogICAgDQoNCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCg0KDQoNCg0KDQo8dGFibGUgd2lkdGg9IjY0MCI-DQogICA8dHI-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iNjIwIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiIGNsYXNzPSJwcl9jb250YWluZXIiPg0KICAgICAgICAgPHRhYmxlIHdpZHRoPSI2MjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0ibGlzdF9wcm9kdWN0Ij4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTUwIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgY2xhc3M9InByX2ltYWdlIj4NCiAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zODQwWFMyRDZCNkpTJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwMFY0QkdEMDAlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzRfaW0mSD1QVUZBOTdEQlhGSlpVWjVWS0NJWEcxWTJUN09BJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF80X2ltIj4NCiAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vbS5tZWRpYS1hbWF6b24uY29tL2ltYWdlcy9JLzQxK0F1OVRlRGhMLl9TUjUwMCwzMjBfLl9TTDE0MF8uanBnIiBjbGFzcz0icHJfaW1hZ2VfMTc1IHByX2ltYWdlX2Rlc2t0b3AiIGFsdD0iVFAtTGluayBVSDQwMCBVU0IgMy4wIDQtUG9ydCBQb3J0YWJsZSBEYXRhIEh1YiBmb3IgTWFjLCBpTWFjLCBNYWNCb29rIFBybyBBaXIsIFVsdHJhYm9va3MsIFRhYmxldCwgTGFwdG9wIGFuZCBBbnkgUEMsIFdpbmRvd3MsIE1hYyBPUyBYIGFuZCBMaW51eCBTeXN0ZW1zLSBCbGFjayIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjM2NSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl90aXRsZSI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KDQoNCg0KDQoNCjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtYWxpZ246bGVmdDtjb2xvcjojMzM2Njk5OyI-DQogICAgIDxhIGNsYXNzPSJvbWFfcHJfdGl0bGUiIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJIWkFNTTlBOFBPMjcmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjAwVjRCR0QwMCUzRnJlZiUzRGVtXzFwXzRfdGklMjZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MSZIPUZYWVMxTFVFR0hGV01XNlVDVktNUkxFSkxPV0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxIiBzdHlsZT0iZm9udC1zaXplOiAxNHB4OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgY29sb3I6IzMzNjY5OTsiPg0KICAgICAgICAgIFRQLUxpbmsgVUg0MDAgVVNCIDMuMCA0LVBvcnQgUG9ydGFibGUgRGF0YSBIdWIgZm9yIE1hYywgaU1hYywuLi48L2E-DQo8L3NwYW4-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9ieWxpbmUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQoNCg0KDQoNCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICAgICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgIA0KICAgIA0KICAgIA0KDQogICAgDQogICAgICAgIDxzcGFuIGNsYXNzPSJvbWEtcHItYmwiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsU2Fucy1TZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzMzMzt0ZXh0LWFsaWduOmxlZnQ7Ij4NCiAgICAgICAgICAgICA8YnI-IGJ5DQogICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9Tk1MUVlCVkhZSlQxJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRnN0b3JlcyUyRlRQLUxJTktJTkRJQVBWVExURCUyRnBhZ2UlMkZEMjBCMTgxOS1FRTVFLTRCNDgtOUQ5MS1CNTBEM0ZFNDMxRTIlM0ZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9hc3RfYmxuJTI2c3RvcmVfcmVmJTNEYmxfYXN0X2RwX2JyYW5kTG9nb19zdG8mSD1YNzI5MUFKUEpSWFpGWUdIUUdSMVlEVlNBMU1BJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9hc3RfYmxuIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiMzMzY2OTk7Ij5UUC1MaW5rPC9hPg0KICAgICAgICA8L3NwYW4-DQogICAgDQoNCiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2VfbGlzdCI-DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNLlIuUC46DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJvbWFfcHJfcHJpY2VfdmFsX2xpc3QiPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmlrZT7igrkxLDQ5OS4wMDwvc3RyaWtlPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9InByX3ByaWNlX2hpZ2hsaWdodCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuTg5OS4wMCAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgU2F2ZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrk2MDAuMDAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDQwJSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQoNCg0KDQoNCg0KDQogICAgDQoNCg0KDQoJDQoNCg0KDQoNCg0KDQoNCgkNCg0KDQoNCgkNCg0KCQ0KDQogICAgDQoJICAgICANCiAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICA8dHIgY2xhc3M9InByX21lcmNoYW50Ij4NCiAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC13ZWlnaHQ6bm9ybWFsOyBjb2xvcjojNTU1NTU1OyBmb250LXNpemU6MTJweDsiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIFNvbGQgYnkgDQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MUZVQTBTRVlGRTNRMyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmFhZyUyRm1haW4lM0ZpZSUzRFVURjglMjZhc2luJTNEQjAwVjRCR0QwMCUyNmlzQW1hem9uRnVsZmlsbGVkJTNEMSUyNm1hcmtldHBsYWNlSUQlM0RBMjFUSlJVVU40S0dWJTI2cHJvdG9jb2wlM0RjdXJyZW50JTI2c2VsbGVyJTNEQUo2U0laQzhZUURaWCUyNnNzaG1QYXRoJTNEJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1OSVpMMUswQVlPWEVBVjA4R0kwRktIWktBQUlBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGZvbnQtc2l6ZToxMnB4O2NvbG9yOiAjMzM2Njk5OyI-Q2xpY2t0ZWNoIFJldGFpbCBQcml2YXRlIEx0ZDwvYT4gYW5kIA0KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI-RnVsZmlsbGVkIGJ5IEFtYXpvbjwvc3Bhbj4uDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDwvc3Bhbj4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgIA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwNSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KDQoNCjxkaXYgY2xhc3M9InByX2xlYXJuX21vcmUiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ij4NCiAgICAgICAgPHRhYmxlIGNsYXNzPSJidG4tbGVhcm5tb3JlLXNtYWxsIiAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIiBzdHlsZT0iY29sb3I6ICMxMTE7IHRleHQtZGVjb3JhdGlvbjpub25lOyAgd2hpdGUtc3BhY2U6IG5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiAjRkVDNjUwOyBmb250LXNpemU6MTBweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9NDZHWDFNTzNCRUpIJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwMFY0QkdEMDAlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzRfbG0mSD1YVU5BT0VYTkZYUEw4OE1MVEVCNlA1QVA2VUlBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF80X2xtIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249Im1pZGRsZSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMxMTE7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIExlYXJuIG1vcmUNCiAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICA8L3RhYmxlPg0KPC9kaXY-DQoNCg0KDQogDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgIDwvdGFibGU-IDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2xhc3M9InNlcGVyYXRvciI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNlYWViZWMiIHdpZHRoPSI2MjAiIGhlaWdodD0iMSI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MXB4O2xpbmUtaGVpZ2h0OjFweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iMTUiPg0KICAgICAgICAgPGRpdiB3aWR0aD0iMTUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxNXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICA8L3RkPg0KICAgPC90cj4NCjwvdGFibGU-DQogICAgDQogICAgDQogICAgDQoNCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCg0KDQoNCg0KDQo8dGFibGUgd2lkdGg9IjY0MCI-DQogICA8dHI-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iNjIwIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiIGNsYXNzPSJwcl9jb250YWluZXIiPg0KICAgICAgICAgPHRhYmxlIHdpZHRoPSI2MjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0ibGlzdF9wcm9kdWN0Ij4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTUwIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgY2xhc3M9InByX2ltYWdlIj4NCiAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xTElBWERKRk5CTlVHJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwMTFPTFA2TEclMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzVfaW0mSD1DTVhBSjJXRFRPTlVIMVpCSENXRkNPRkZPRlNBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF81X2ltIj4NCiAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vbS5tZWRpYS1hbWF6b24uY29tL2ltYWdlcy9JLzMxaTNHNUE0cWRMLl9TUjUwMCw1MDBfLl9TTDE0MF8uanBnIiBjbGFzcz0icHJfaW1hZ2VfMTc1IHByX2ltYWdlX2Rlc2t0b3AiIGFsdD0iWzEgTWV0ZXIgTG9uZyBDYWJsZSwgNUdicHMsIFVTQiAzLjEgR2VuIDFdIFFaIFVTQiBIdWIgZm9yIE5leHQgR2VuIE9mZmljZSBXb3JrIFN0YXRpb24sIDQgUG9ydHMsIFVTQiAzLjEgR2VuIDEgZm9yIFBDIGFuZCBMYXB0b3BzIiBib3JkZXI9IjAiPg0KICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzY1IiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPg0KICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3RpdGxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLFNhbnMtU2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMzMzY2OTk7Ij4NCiAgICAgPGEgY2xhc3M9Im9tYV9wcl90aXRsZSIgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9V0hTRjFCM0hEM1JGJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwMTFPTFA2TEclM0ZyZWYlM0RlbV8xcF81X3RpJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1GNEhEUE9LTFpIMkNBQk9KTkpBSzJYSExYRVlBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGNvbG9yOiMzMzY2OTk7Ij4NCiAgICAgICAgICBbMSBNZXRlciBMb25nIENhYmxlLCA1R2JwcywgVVNCIDMuMSBHZW4gMV0gUVogVVNCIEh1YiBmb3IgTmV4dC4uLjwvYT4NCjwvc3Bhbj4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX2J5bGluZSI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KDQoNCg0KDQoNCg0KDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCg0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgDQogICAgDQoNCiAgICANCiAgICAgICAgPHNwYW4gY2xhc3M9Im9tYS1wci1ibCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMzMzO3RleHQtYWxpZ246bGVmdDsiPg0KICAgICAgICAgICAgIDxicj4gYnkNCiAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xRlJYR0szVElVVkpPJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRnN0b3JlcyUyRlFaJTJGcGFnZSUyRkI3MDI1NTVDLUIyQjMtNDhENi05NjQ3LUFFRTYzOUU3MDZGMiUzRnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4lMjZzdG9yZV9yZWYlM0RibF9hc3RfZHBfYnJhbmRMb2dvX3N0byZIPVNKT1IwWVdVWUZDSkVUN1NaQUo0Q0hSUDdTNEEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IzMzNjY5OTsiPlFaPC9hPg0KICAgICAgICA8L3NwYW4-DQogICAgDQoNCiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2VfbGlzdCI-DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNLlIuUC46DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJvbWFfcHJfcHJpY2VfdmFsX2xpc3QiPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmlrZT7igrkxLDI2MC4wMDwvc3RyaWtlPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9InByX3ByaWNlX2hpZ2hsaWdodCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuTg4Mi4wMCAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgU2F2ZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrkzNzguMDAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDMwJSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQoNCg0KDQoNCg0KDQogICAgDQoNCg0KDQoJDQoNCg0KDQoNCg0KDQoNCgkNCg0KDQoNCgkNCg0KCQ0KDQogICAgDQoJICAgICANCiAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICA8dHIgY2xhc3M9InByX21lcmNoYW50Ij4NCiAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC13ZWlnaHQ6bm9ybWFsOyBjb2xvcjojNTU1NTU1OyBmb250LXNpemU6MTJweDsiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIFNvbGQgYnkgDQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MlZDMVpET01CUk1GNSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmFhZyUyRm1haW4lM0ZpZSUzRFVURjglMjZhc2luJTNEQjAxMU9MUDZMRyUyNmlzQW1hem9uRnVsZmlsbGVkJTNEMSUyNm1hcmtldHBsYWNlSUQlM0RBMjFUSlJVVU40S0dWJTI2cHJvdG9jb2wlM0RjdXJyZW50JTI2c2VsbGVyJTNEQUo2U0laQzhZUURaWCUyNnNzaG1QYXRoJTNEJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1MT0FJSVFOU0FST1JPVjZEQlVSU1BRS0NXQVVBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGZvbnQtc2l6ZToxMnB4O2NvbG9yOiAjMzM2Njk5OyI-Q2xpY2t0ZWNoIFJldGFpbCBQcml2YXRlIEx0ZDwvYT4gYW5kIA0KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI-RnVsZmlsbGVkIGJ5IEFtYXpvbjwvc3Bhbj4uDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDwvc3Bhbj4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgIA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwNSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KDQoNCjxkaXYgY2xhc3M9InByX2xlYXJuX21vcmUiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ij4NCiAgICAgICAgPHRhYmxlIGNsYXNzPSJidG4tbGVhcm5tb3JlLXNtYWxsIiAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIiBzdHlsZT0iY29sb3I6ICMxMTE7IHRleHQtZGVjb3JhdGlvbjpub25lOyAgd2hpdGUtc3BhY2U6IG5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiAjRkVDNjUwOyBmb250LXNpemU6MTBweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9NU1MVVpGUFFBTldIJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwMTFPTFA2TEclMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzVfbG0mSD05Q0w5SkxITEdJMEFGU0tYS1NYS0ZQU0FJVUNBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF81X2xtIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249Im1pZGRsZSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMxMTE7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIExlYXJuIG1vcmUNCiAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICA8L3RhYmxlPg0KPC9kaXY-DQoNCg0KDQogDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgIDwvdGFibGU-IDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgY2xhc3M9InNlcGVyYXRvciI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNlYWViZWMiIHdpZHRoPSI2MjAiIGhlaWdodD0iMSI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MXB4O2xpbmUtaGVpZ2h0OjFweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSI2MjAiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iMTUiPg0KICAgICAgICAgPGRpdiB3aWR0aD0iMTUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxNXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICA8L3RkPg0KICAgPC90cj4NCjwvdGFibGU-DQogICAgDQogICAgDQogICAgDQoNCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCg0KDQoNCg0KDQo8dGFibGUgd2lkdGg9IjY0MCI-DQogICA8dHI-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgICAgIDx0ZCB3aWR0aD0iNjIwIiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiIGNsYXNzPSJwcl9jb250YWluZXIiPg0KICAgICAgICAgPHRhYmxlIHdpZHRoPSI2MjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBjbGFzcz0ibGlzdF9wcm9kdWN0Ij4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTUwIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgY2xhc3M9InByX2ltYWdlIj4NCiAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj1WOUlOTzlORVBSUUUmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjAxMU9OSlY3WSUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfNl9pbSZIPVFUTkZSUUpNUlpBTDNYT1JFUEVROTlDVFNNVUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzZfaW0iPg0KICAgICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9tLm1lZGlhLWFtYXpvbi5jb20vaW1hZ2VzL0kvMzFZbW11WEpiUEwuX1NSNTAwLDUwMF8uX1NMMTQwXy5qcGciIGNsYXNzPSJwcl9pbWFnZV8xNzUgcHJfaW1hZ2VfZGVza3RvcCIgYWx0PSJbMS4zIEZlZXQgTG9uZyBDYWJsZSwgNUdicHMsIFVTQiAzLjEgR2VuIDFdIFFaIFVTQiBIdWIgZm9yIE5leHQgR2VuIE9mZmljZSBXb3JrIFN0YXRpb24sIDQgUG9ydHMsIFVTQiAzLjEgR2VuIDEgZm9yIFBDIGFuZCBMYXB0b3BzIiBib3JkZXI9IjAiPg0KICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzY1IiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPg0KICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3RpdGxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLFNhbnMtU2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMzMzY2OTk7Ij4NCiAgICAgPGEgY2xhc3M9Im9tYV9wcl90aXRsZSIgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MUJDRkNYVVVPOTJVMCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDExT05KVjdZJTNGcmVmJTNEZW1fMXBfNl90aSUyNnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxJkg9TkxUSU9ZVkNMTUM3T0xJRFJNU0FUNEJLUFNTQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzEiIHN0eWxlPSJmb250LXNpemU6IDE0cHg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjb2xvcjojMzM2Njk5OyI-DQogICAgICAgICAgWzEuMyBGZWV0IExvbmcgQ2FibGUsIDVHYnBzLCBVU0IgMy4xIEdlbiAxXSBRWiBVU0IgSHViIGZvci4uLjwvYT4NCjwvc3Bhbj4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX2J5bGluZSI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KDQoNCg0KDQoNCg0KDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgICAgICANCg0KICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgDQogICAgDQogICAgDQoNCiAgICANCiAgICAgICAgPHNwYW4gY2xhc3M9Im9tYS1wci1ibCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMzMzO3RleHQtYWxpZ246bGVmdDsiPg0KICAgICAgICAgICAgIDxicj4gYnkNCiAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zU09MWDY0MTM1NVVBJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRnN0b3JlcyUyRlFaJTJGcGFnZSUyRkI3MDI1NTVDLUIyQjMtNDhENi05NjQ3LUFFRTYzOUU3MDZGMiUzRnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4lMjZzdG9yZV9yZWYlM0RibF9hc3RfZHBfYnJhbmRMb2dvX3N0byZIPU9EOUlBSlUzRFdFM0NPVkdBVlAwUjhBQk5ST0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IzMzNjY5OTsiPlFaPC9hPg0KICAgICAgICA8L3NwYW4-DQogICAgDQoNCiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2VfbGlzdCI-DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNLlIuUC46DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJvbWFfcHJfcHJpY2VfdmFsX2xpc3QiPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cmlrZT7igrkxLDI0Mi4wMDwvc3RyaWtlPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9InByX3ByaWNlX2hpZ2hsaWdodCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuTkzNi4wMCAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgU2F2ZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrkzMDYuMDAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDI1JSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQoNCg0KDQoNCg0KDQogICAgDQoNCg0KDQoJDQoNCg0KDQoNCg0KDQoNCgkNCg0KDQoNCgkNCg0KCQ0KDQogICAgDQoJICAgICANCiAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICA8dHIgY2xhc3M9InByX21lcmNoYW50Ij4NCiAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC13ZWlnaHQ6bm9ybWFsOyBjb2xvcjojNTU1NTU1OyBmb250LXNpemU6MTJweDsiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIFNvbGQgYnkgDQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9M0tJSEdSMlAyVllDTyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmFhZyUyRm1haW4lM0ZpZSUzRFVURjglMjZhc2luJTNEQjAxMU9OSlY3WSUyNmlzQW1hem9uRnVsZmlsbGVkJTNEMSUyNm1hcmtldHBsYWNlSUQlM0RBMjFUSlJVVU40S0dWJTI2cHJvdG9jb2wlM0RjdXJyZW50JTI2c2VsbGVyJTNEQUo2U0laQzhZUURaWCUyNnNzaG1QYXRoJTNEJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1DOEFTQkM0QURZQ043T1JTSVhJM1ZJQ0hORVNBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGZvbnQtc2l6ZToxMnB4O2NvbG9yOiAjMzM2Njk5OyI-Q2xpY2t0ZWNoIFJldGFpbCBQcml2YXRlIEx0ZDwvYT4gYW5kIA0KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI-RnVsZmlsbGVkIGJ5IEFtYXpvbjwvc3Bhbj4uDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDwvc3Bhbj4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgIA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwNSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KDQoNCjxkaXYgY2xhc3M9InByX2xlYXJuX21vcmUiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ij4NCiAgICAgICAgPHRhYmxlIGNsYXNzPSJidG4tbGVhcm5tb3JlLXNtYWxsIiAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIiBzdHlsZT0iY29sb3I6ICMxMTE7IHRleHQtZGVjb3JhdGlvbjpub25lOyAgd2hpdGUtc3BhY2U6IG5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiAjRkVDNjUwOyBmb250LXNpemU6MTBweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MlpaT1JaQVBKVlBCQyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDExT05KVjdZJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF82X2xtJkg9MVQ2R01GMDhUWkRZTEpRSTVUVElKT0dYVjJPQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfNl9sbSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMTExOyI-DQogICAgICAgICAgICAgICAgICAgICAgICBMZWFybiBtb3JlDQogICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCjwvZGl2Pg0KDQoNCg0KIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPiA8dGFibGUgd2lkdGg9IjYyMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJzZXBlcmF0b3IiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjZWFlYmVjIiB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjFweDtsaW5lLWhlaWdodDoxcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgPC90YWJsZT4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgIDwvdHI-DQo8L3RhYmxlPg0KICAgIA0KICAgIA0KICAgIA0KDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQoNCg0KDQoNCg0KPHRhYmxlIHdpZHRoPSI2NDAiPg0KICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNSI-DQogICAgICAgICA8ZGl2IHdpZHRoPSIxNSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjYyMCIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0IiBjbGFzcz0icHJfY29udGFpbmVyIj4NCiAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9Imxpc3RfcHJvZHVjdCI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE1MCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJwcl9pbWFnZSI-DQogICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9M0dXWE5XR1RKN1U5OSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDlNODg4OERNJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF83X2ltJkg9U09BT0VWVUdOU05BSkNHT1dIS05BWEpKS1o0QSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfN19pbSI-DQogICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL20ubWVkaWEtYW1hem9uLmNvbS9pbWFnZXMvSS8yMVVLSXdmMElWTC5fU1I1MDAsNTAwXy5fU0wxNDBfLmpwZyIgY2xhc3M9InByX2ltYWdlXzE3NSBwcl9pbWFnZV9kZXNrdG9wIiBhbHQ9IlBvcnRyb25pY3MgTXBvcnQgMzEgVVNCIEh1YiAoNC1pbi0xKSwgTXVsdGlwb3J0IEFkYXB0ZXIgd2l0aCAxIHggVVNCIDMuMCAmYW1wOyAzIHggVVNCIDIuMCBQb3J0cywgdXAgdG8gNSBHYnBzIEhpZ2ggU3BlZWQgRGF0YSBUcmFuc2ZlciBmb3IgTGFwdG9wL1BDIChHcmV5KSIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjM2NSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl90aXRsZSI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KDQoNCg0KDQoNCjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtYWxpZ246bGVmdDtjb2xvcjojMzM2Njk5OyI-DQogICAgIDxhIGNsYXNzPSJvbWFfcHJfdGl0bGUiIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPUlNTDdYN1lVTVdFWiZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDlNODg4OERNJTNGcmVmJTNEZW1fMXBfN190aSUyNnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxJkg9MkFVUVVVWk9PUVY4NzBKT0ZMVEs5QTZBTVpHQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzEiIHN0eWxlPSJmb250LXNpemU6IDE0cHg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjb2xvcjojMzM2Njk5OyI-DQogICAgICAgICAgUG9ydHJvbmljcyBNcG9ydCAzMSBVU0IgSHViICg0LWluLTEpLCBNdWx0aXBvcnQgQWRhcHRlciB3aXRoIDEuLi48L2E-DQo8L3NwYW4-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9ieWxpbmUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQoNCg0KDQoNCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICAgICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgIA0KICAgIA0KICAgIA0KDQogICAgDQogICAgICAgIDxzcGFuIGNsYXNzPSJvbWEtcHItYmwiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsU2Fucy1TZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzMzMzt0ZXh0LWFsaWduOmxlZnQ7Ij4NCiAgICAgICAgICAgICA8YnI-IGJ5DQogICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MzQ0NU5XUldBVDAzSiZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZzdG9yZXMlMkZQb3J0cm9uaWNzJTJGcGFnZSUyRjgyQ0M4MjRCLTE5QUMtNEE0NS04NzJELTU5ODg4QTEwRUZERiUzRnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4lMjZzdG9yZV9yZWYlM0RibF9hc3RfZHBfYnJhbmRMb2dvX3N0byZIPTFQUDhEVlBBUTBUMkhHWVRCM0cwVklHSFVCUUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IzMzNjY5OTsiPlBvcnRyb25pY3M8L2E-DQogICAgICAgIDwvc3Bhbj4NCiAgICANCg0KIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InNwYWNlciI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9saXN0Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uUi5QLjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfbGlzdCI-ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaWtlPuKCuTc5OS4wMDwvc3RyaWtlPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9InByX3ByaWNlX2hpZ2hsaWdodCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuTM0OS4wMCAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgU2F2ZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrk0NTAuMDAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDU2JSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQoNCg0KDQoNCg0KDQogICAgDQoNCg0KDQoJDQoNCg0KDQoNCg0KDQoNCgkNCg0KDQoNCgkNCg0KCQ0KDQogICAgDQoJICAgICANCiAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICA8dHIgY2xhc3M9InByX21lcmNoYW50Ij4NCiAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC13ZWlnaHQ6bm9ybWFsOyBjb2xvcjojNTU1NTU1OyBmb250LXNpemU6MTJweDsiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIFNvbGQgYnkgDQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9M1MzM1hVSDNPRU01NiZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmFhZyUyRm1haW4lM0ZpZSUzRFVURjglMjZhc2luJTNEQjA5TTg4ODhETSUyNmlzQW1hem9uRnVsZmlsbGVkJTNEMSUyNm1hcmtldHBsYWNlSUQlM0RBMjFUSlJVVU40S0dWJTI2cHJvdG9jb2wlM0RjdXJyZW50JTI2c2VsbGVyJTNEQUo2U0laQzhZUURaWCUyNnNzaG1QYXRoJTNEJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1QTlVPVkFVU0hZS1hBMTZQQUFIOFFJN0dQQkVBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGZvbnQtc2l6ZToxMnB4O2NvbG9yOiAjMzM2Njk5OyI-Q2xpY2t0ZWNoIFJldGFpbCBQcml2YXRlIEx0ZDwvYT4gYW5kIA0KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI-RnVsZmlsbGVkIGJ5IEFtYXpvbjwvc3Bhbj4uDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDwvc3Bhbj4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgIA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwNSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KDQoNCjxkaXYgY2xhc3M9InByX2xlYXJuX21vcmUiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ij4NCiAgICAgICAgPHRhYmxlIGNsYXNzPSJidG4tbGVhcm5tb3JlLXNtYWxsIiAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIiBzdHlsZT0iY29sb3I6ICMxMTE7IHRleHQtZGVjb3JhdGlvbjpub25lOyAgd2hpdGUtc3BhY2U6IG5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiAjRkVDNjUwOyBmb250LXNpemU6MTBweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MTJYS0gwMFI3TDFaMyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDlNODg4OERNJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF83X2xtJkg9VFdLU0pDTFE1TDJCWUFXSVdBRFc0TEtUWTBNQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfN19sbSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMTExOyI-DQogICAgICAgICAgICAgICAgICAgICAgICBMZWFybiBtb3JlDQogICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCjwvZGl2Pg0KDQoNCg0KIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPiA8dGFibGUgd2lkdGg9IjYyMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJzZXBlcmF0b3IiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjZWFlYmVjIiB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjFweDtsaW5lLWhlaWdodDoxcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgPC90YWJsZT4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgIDwvdHI-DQo8L3RhYmxlPg0KICAgIA0KICAgIA0KICAgIA0KDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQoNCg0KDQoNCg0KPHRhYmxlIHdpZHRoPSI2NDAiPg0KICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNSI-DQogICAgICAgICA8ZGl2IHdpZHRoPSIxNSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjYyMCIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0IiBjbGFzcz0icHJfY29udGFpbmVyIj4NCiAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9Imxpc3RfcHJvZHVjdCI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE1MCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJwcl9pbWFnZSI-DQogICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MTZISzFaWU9JR043SyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDdLQlZSVjVIJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF84X2ltJkg9SkNKV1RMQkJWSE9MS0FXWDFOUVJTVVo5UEtXQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfOF9pbSI-DQogICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL20ubWVkaWEtYW1hem9uLmNvbS9pbWFnZXMvSS81MVVoYTJsK1Y5TC5fU1I1MDAsNTAwXy5fU0wxNDBfLmpwZyIgY2xhc3M9InByX2ltYWdlXzE3NSBwcl9pbWFnZV9kZXNrdG9wIiBhbHQ9Ik9SSUNPIFVTQiAzLjAgSHViIDcgUG9ydHMgVVNCMy4wIFRyYW5zcGFyZW50IERlc2t0b3AgSFVCIHdpdGggQmx1ZSBJbmRpY2F0b3IgTGlnaHQgJmFtcDsgRHVhbCBQb3J0IFBvd2VyIFN1cHBseSB3aXRoIDFNIENhYmxlIiBib3JkZXI9IjAiPg0KICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzY1IiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPg0KICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3RpdGxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLFNhbnMtU2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMzMzY2OTk7Ij4NCiAgICAgPGEgY2xhc3M9Im9tYV9wcl90aXRsZSIgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9TUkwNTZMUUcyTFo1JlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwN0tCVlJWNUglM0ZyZWYlM0RlbV8xcF84X3RpJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1PRkpNTlhVSlRGT08wSU5XRldGSExWSFJIS0VBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGNvbG9yOiMzMzY2OTk7Ij4NCiAgICAgICAgICBPUklDTyBVU0IgMy4wIEh1YiA3IFBvcnRzIFVTQjMuMCBUcmFuc3BhcmVudCBEZXNrdG9wIEhVQiB3aXRoLi4uPC9hPg0KPC9zcGFuPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfYnlsaW5lIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgICAgIA0KDQogICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICA8c3BhbiBjbGFzcz0ib21hLXByLWJsIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLFNhbnMtU2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpsZWZ0OyI-DQogICAgICAgICAgICAgPGJyPiBieQ0KICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPU9VOU43U0dLS0JHOSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZzdG9yZXMlMkZPUklDTyUyRnBhZ2UlMkY5RDUzQTQ4OC04QUMxLTQwRDktOUM4QS1FRjI2MzlCRUIwNjElM0ZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9hc3RfYmxuJTI2c3RvcmVfcmVmJTNEYmxfYXN0X2RwX2JyYW5kTG9nb19zdG8mSD1IQTZBQ0ZXTElMQkFVRldaQUtTVU9DREg2TE9BJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9hc3RfYmxuIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiMzMzY2OTk7Ij5PUklDTzwvYT4NCiAgICAgICAgPC9zcGFuPg0KICAgIA0KDQogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0ic3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX2xpc3QiPg0KICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTS5SLlAuOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9saXN0Ij4gICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpa2U-4oK5MSw4OTkuMDA8L3N0cmlrZT4gICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX291ciI-DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmljZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJwcl9wcmljZV9oaWdobGlnaHQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrkxLDc5OS4wMCAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgU2F2ZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrkxMDAuMDAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDUlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCg0KDQoNCg0KDQoNCiAgICANCg0KDQoNCgkNCg0KDQoNCg0KDQoNCg0KCQ0KDQoNCg0KCQ0KDQoJDQoNCiAgICANCgkgICAgIA0KICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgIDx0ciBjbGFzcz0icHJfbWVyY2hhbnQiPg0KICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IHRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGNvbG9yOiM1NTU1NTU7IGZvbnQtc2l6ZToxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgU29sZCBieSANCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zWTFOWEU1RzNHR1UmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZhYWclMkZtYWluJTNGaWUlM0RVVEY4JTI2YXNpbiUzREIwN0tCVlJWNUglMjZpc0FtYXpvbkZ1bGZpbGxlZCUzRDElMjZtYXJrZXRwbGFjZUlEJTNEQTIxVEpSVVVONEtHViUyNnByb3RvY29sJTNEY3VycmVudCUyNnNlbGxlciUzREEzVFVZTFpDUDQzQzZFJTI2c3NobVBhdGglM0QlMjZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MSZIPU5IN09MRU5GVDJJVElRSUpDRVkzQzdESjBQWUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgZm9udC1zaXplOjEycHg7Y29sb3I6ICMzMzY2OTk7Ij5PUklDTyBEaXJlY3QgU3RvcmU8L2E-IGFuZCANCiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDsiPkZ1bGZpbGxlZCBieSBBbWF6b248L3NwYW4-Lg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8L3NwYW4-IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICANCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDUiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCg0KDQo8ZGl2IGNsYXNzPSJwcl9sZWFybl9tb3JlIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyI-DQogICAgICAgIDx0YWJsZSBjbGFzcz0iYnRuLWxlYXJubW9yZS1zbWFsbCIgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyIgc3R5bGU9ImNvbG9yOiAjMTExOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgIHdoaXRlLXNwYWNlOiBub3dyYXA7YmFja2dyb3VuZC1jb2xvcjogI0ZFQzY1MDsgZm9udC1zaXplOjEwcHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgIDx0ZCBub3dyYXA-DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTIxS01QNkJHNjlHSUwmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA3S0JWUlY1SCUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfOF9sbSZIPUdXQUY5Q1NISU8ySlRFU05NTU1aVzJMS0NJV0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzhfbG0iIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0ibWlkZGxlIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzExMTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgTGVhcm4gbW9yZQ0KICAgICAgICAgICAgICAgICAgICA8L2E-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgIDwvdGFibGU-DQo8L2Rpdj4NCg0KDQoNCiANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgPC90YWJsZT4gPHRhYmxlIHdpZHRoPSI2MjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0ic2VwZXJhdG9yIj4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjYyMCIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMSI-DQogICAgICAgICAgICAgICAgICA8dGQgYmdjb2xvcj0iI2VhZWJlYyIgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxIj4NCiAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjYyMCIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxcHg7bGluZS1oZWlnaHQ6MXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjYyMCIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgIDwvdGFibGU-DQogICAgICA8L3RkPg0KICAgICAgPHRkIHdpZHRoPSIxNSI-DQogICAgICAgICA8ZGl2IHdpZHRoPSIxNSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgIDwvdGQ-DQogICA8L3RyPg0KPC90YWJsZT4NCiAgICANCiAgICANCiAgICANCg0KDQogICAgDQoNCiAgICANCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KDQoNCg0KDQoNCjx0YWJsZSB3aWR0aD0iNjQwIj4NCiAgIDx0cj4NCiAgICAgIDx0ZCB3aWR0aD0iMTUiPg0KICAgICAgICAgPGRpdiB3aWR0aD0iMTUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxNXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICA8L3RkPg0KICAgICAgPHRkIHdpZHRoPSI2MjAiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCIgY2xhc3M9InByX2NvbnRhaW5lciI-DQogICAgICAgICA8dGFibGUgd2lkdGg9IjYyMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJsaXN0X3Byb2R1Y3QiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNTAiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiBjbGFzcz0icHJfaW1hZ2UiPg0KICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJORUlXVlNJNFEzVlgmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjAxTTBUNjRFTSUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfOV9pbSZIPTFHS1A0U0hWTTBQQUZJWUJVSlBYSDZJVFhPT0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzlfaW0iPg0KICAgICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9tLm1lZGlhLWFtYXpvbi5jb20vaW1hZ2VzL0kvMzFvOTRVU25SQUwuX1NSNTAwLDUwMF8uX1NMMTQwXy5qcGciIGNsYXNzPSJwcl9pbWFnZV8xNzUgcHJfaW1hZ2VfZGVza3RvcCIgYWx0PSJRWiBBY3RpdmUgUG93ZXJlZCBVU0IgSHViLCAxMCBQb3J0IFVTQiBIdWIgd2l0aCAxMlYgNUEgNjBXIFBvd2VyIEFkYXB0ZXIsIFVTQiAzLjEgR2VuIDEiIGJvcmRlcj0iMCI-DQogICAgICAgICAgICA8L2E-DQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzNjUiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI-DQogICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfdGl0bGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQoNCg0KDQo8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsU2Fucy1TZXJpZjtmb250LXNpemU6MTVweDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWFsaWduOmxlZnQ7Y29sb3I6IzMzNjY5OTsiPg0KICAgICA8YSBjbGFzcz0ib21hX3ByX3RpdGxlIiBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zNlBDSUNISjFCMTNZJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwMU0wVDY0RU0lM0ZyZWYlM0RlbV8xcF85X3RpJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1TWFFVS0I3Rk1BTkhHNkZHMkZDNDNLTExUNUdBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGNvbG9yOiMzMzY2OTk7Ij4NCiAgICAgICAgICBRWiBBY3RpdmUgUG93ZXJlZCBVU0IgSHViLCAxMCBQb3J0IFVTQiBIdWIgd2l0aCAxMlYgNUEgNjBXLi4uPC9hPg0KPC9zcGFuPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfYnlsaW5lIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgICAgIA0KDQogICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICA8c3BhbiBjbGFzcz0ib21hLXByLWJsIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLFNhbnMtU2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpsZWZ0OyI-DQogICAgICAgICAgICAgPGJyPiBieQ0KICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTNDNTJRMVowT0tHWlYmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGc3RvcmVzJTJGUVolMkZwYWdlJTJGQjcwMjU1NUMtQjJCMy00OEQ2LTk2NDctQUVFNjM5RTcwNkYyJTNGcmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfYXN0X2JsbiUyNnN0b3JlX3JlZiUzRGJsX2FzdF9kcF9icmFuZExvZ29fc3RvJkg9TVJGVUtDRlYxMERRQUsxWFJVS1NBSFlGSUQ4QSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfYXN0X2JsbiIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjojMzM2Njk5OyI-UVo8L2E-DQogICAgICAgIDwvc3Bhbj4NCiAgICANCg0KIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InNwYWNlciI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9saXN0Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uUi5QLjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfbGlzdCI-ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaWtlPuKCuTQsOTE0LjAwPC9zdHJpa2U-ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9vdXIiPg0KICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpY2U6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0icHJfcHJpY2VfaGlnaGxpZ2h0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oK5NCwzNDQuMDAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWW91IFNhdmU6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJvbWFfcHJfcHJpY2VfdmFsX3NhdmluZ3MiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oK5NTcwLjAwIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxMiUpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KDQoNCg0KDQoNCg0KICAgIA0KDQoNCg0KCQ0KDQoNCg0KDQoNCg0KDQoJDQoNCg0KDQoJDQoNCgkNCg0KICAgIA0KCSAgICAgDQogICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgPHRyIGNsYXNzPSJwcl9tZXJjaGFudCI-DQogICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgY29sb3I6IzU1NTU1NTsgZm9udC1zaXplOjEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBTb2xkIGJ5IA0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPUpSS1o3QzdQSFE0VyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmFhZyUyRm1haW4lM0ZpZSUzRFVURjglMjZhc2luJTNEQjAxTTBUNjRFTSUyNmlzQW1hem9uRnVsZmlsbGVkJTNEMSUyNm1hcmtldHBsYWNlSUQlM0RBMjFUSlJVVU40S0dWJTI2cHJvdG9jb2wlM0RjdXJyZW50JTI2c2VsbGVyJTNEQUo2U0laQzhZUURaWCUyNnNzaG1QYXRoJTNEJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1NRU9aNkcxQzMxQ0hVN0VIWUQ3RFVEVVpRR0lBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGZvbnQtc2l6ZToxMnB4O2NvbG9yOiAjMzM2Njk5OyI-Q2xpY2t0ZWNoIFJldGFpbCBQcml2YXRlIEx0ZDwvYT4gYW5kIA0KICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI-RnVsZmlsbGVkIGJ5IEFtYXpvbjwvc3Bhbj4uDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDwvc3Bhbj4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgIA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwNSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiPg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KDQoNCjxkaXYgY2xhc3M9InByX2xlYXJuX21vcmUiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ij4NCiAgICAgICAgPHRhYmxlIGNsYXNzPSJidG4tbGVhcm5tb3JlLXNtYWxsIiAgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIiBzdHlsZT0iY29sb3I6ICMxMTE7IHRleHQtZGVjb3JhdGlvbjpub25lOyAgd2hpdGUtc3BhY2U6IG5vd3JhcDtiYWNrZ3JvdW5kLWNvbG9yOiAjRkVDNjUwOyBmb250LXNpemU6MTBweDsgdGV4dC1hbGlnbjpjZW50ZXI7IGJvcmRlci1yYWRpdXM6IDVweDsiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIG5vd3JhcD4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MkFYRlE2VUFEWE5HWCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDFNMFQ2NEVNJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF85X2xtJkg9QlNLWU40UUQ4Qk1UVVlJN05JTjMyR0hJM0lTQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfOV9sbSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMTExOyI-DQogICAgICAgICAgICAgICAgICAgICAgICBMZWFybiBtb3JlDQogICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCjwvZGl2Pg0KDQoNCg0KIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPiA8dGFibGUgd2lkdGg9IjYyMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJzZXBlcmF0b3IiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjZWFlYmVjIiB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjFweDtsaW5lLWhlaWdodDoxcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgPC90YWJsZT4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgIDwvdHI-DQo8L3RhYmxlPg0KICAgIA0KICAgIA0KICAgIA0KDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQoNCg0KDQoNCg0KPHRhYmxlIHdpZHRoPSI2NDAiPg0KICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNSI-DQogICAgICAgICA8ZGl2IHdpZHRoPSIxNSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjYyMCIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0IiBjbGFzcz0icHJfY29udGFpbmVyIj4NCiAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9Imxpc3RfcHJvZHVjdCI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE1MCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJwcl9pbWFnZSI-DQogICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MjBHMFNVMVpVNjVLTyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDdHTE5KQzI1JTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8xMF9pbSZIPVpKOUE4T1JYWTQ2SUFXWUlPUFZXWkZaRVlPR0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzEwX2ltIj4NCiAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vbS5tZWRpYS1hbWF6b24uY29tL2ltYWdlcy9JLzQxM1ptYkhsQUtMLl9TUjUwMCw1MDBfLl9TTDE0MF8uanBnIiBjbGFzcz0icHJfaW1hZ2VfMTc1IHByX2ltYWdlX2Rlc2t0b3AiIGFsdD0iWkVCUk9OSUNTIFplYi0xMDBIQiA0IFBvcnRzIFVTQiBIdWIgZm9yIExhcHRvcCwgUEMgQ29tcHV0ZXJzLCBQbHVnICZhbXA7IFBsYXksIEJhY2t3YXJkIENvbXBhdGlibGUgLSBCbGFjayIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjM2NSIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0Ij4NCiAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl90aXRsZSI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCg0KDQoNCg0KDQoNCjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtYWxpZ246bGVmdDtjb2xvcjojMzM2Njk5OyI-DQogICAgIDxhIGNsYXNzPSJvbWFfcHJfdGl0bGUiIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTE4RjEwNjhXQTJNVlYmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA3R0xOSkMyNSUzRnJlZiUzRGVtXzFwXzEwX3RpJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1UTk9USldXRjk1RkFPNUNBMVFSRk9aSkJYQ0tBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGNvbG9yOiMzMzY2OTk7Ij4NCiAgICAgICAgICBaRUJST05JQ1MgWmViLTEwMEhCIDQgUG9ydHMgVVNCIEh1YiBmb3IgTGFwdG9wLCBQQyBDb21wdXRlcnMsLi4uPC9hPg0KPC9zcGFuPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfYnlsaW5lIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgICAgIA0KDQogICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICA8c3BhbiBjbGFzcz0ib21hLXByLWJsIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLFNhbnMtU2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpsZWZ0OyI-DQogICAgICAgICAgICAgPGJyPiBieQ0KICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTFBSE43T1JOVkNaRVEmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGc3RvcmVzJTJGWmVicm9uaWNzJTJGcGFnZSUyRkVBNjhGQzI3LTIxMzUtNDYyNi1BRjE5LTgyOTZGQTQ0NjQyOSUzRnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4mSD1UV0VEU0pSVDBDUEpGR05ITFJMTVRVNkUxQkNBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9hc3RfYmxuIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiMzMzY2OTk7Ij5aRUJST05JQ1M8L2E-DQogICAgICAgIDwvc3Bhbj4NCiAgICANCg0KIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InNwYWNlciI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9saXN0Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uUi5QLjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfbGlzdCI-ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaWtlPuKCuTM5OS4wMDwvc3RyaWtlPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYWwgUHJpY2U6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0icHJfcHJpY2VfaGlnaGxpZ2h0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oK5MjQ5LjAwICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX3NhdmluZ3MiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBTYXZlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuTE1MC4wMCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzglKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCg0KDQoNCg0KDQoNCiAgICANCg0KDQoNCgkNCg0KDQoNCg0KDQoNCg0KCQ0KDQoNCg0KCQ0KDQoJDQoNCiAgICANCgkgICAgIA0KICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgIDx0ciBjbGFzcz0icHJfbWVyY2hhbnQiPg0KICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IHRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGNvbG9yOiM1NTU1NTU7IGZvbnQtc2l6ZToxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgU29sZCBieSANCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xTU9GN0dVV0w0U1BWJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGYWFnJTJGbWFpbiUzRmllJTNEVVRGOCUyNmFzaW4lM0RCMDdHTE5KQzI1JTI2aXNBbWF6b25GdWxmaWxsZWQlM0QxJTI2bWFya2V0cGxhY2VJRCUzREEyMVRKUlVVTjRLR1YlMjZwcm90b2NvbCUzRGN1cnJlbnQlMjZzZWxsZXIlM0RBSjZTSVpDOFlRRFpYJTI2c3NobVBhdGglM0QlMjZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MSZIPVlXS0tSV1hZSVZNTVFBNDlPR0hYTFpHS0ZQUUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgZm9udC1zaXplOjEycHg7Y29sb3I6ICMzMzY2OTk7Ij5DbGlja3RlY2ggUmV0YWlsIFByaXZhdGUgTHRkPC9hPiBhbmQgDQogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij5GdWxmaWxsZWQgYnkgQW1hem9uPC9zcGFuPi4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPC9zcGFuPiANCiAgICAgICAgICAgIDwvdGQ-DQogICAgICAgIDwvdHI-DQogICAgDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTA1IiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQoNCg0KPGRpdiBjbGFzcz0icHJfbGVhcm5fbW9yZSIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsiPg0KICAgICAgICA8dGFibGUgY2xhc3M9ImJ0bi1sZWFybm1vcmUtc21hbGwiICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiIHN0eWxlPSJjb2xvcjogIzExMTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7ICB3aGl0ZS1zcGFjZTogbm93cmFwO2JhY2tncm91bmQtY29sb3I6ICNGRUM2NTA7IGZvbnQtc2l6ZToxMHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czogNXB4OyI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQgbm93cmFwPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj1ZVTVTVFlBTFRXV0MmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA3R0xOSkMyNSUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMTBfbG0mSD1FNFdYQTU4VzE5QURXRUVSVDBBR0JXOUpRRkFBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8xMF9sbSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMTExOyI-DQogICAgICAgICAgICAgICAgICAgICAgICBMZWFybiBtb3JlDQogICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCjwvZGl2Pg0KDQoNCg0KIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPiA8dGFibGUgd2lkdGg9IjYyMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJzZXBlcmF0b3IiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjZWFlYmVjIiB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjFweDtsaW5lLWhlaWdodDoxcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgPC90YWJsZT4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgIDwvdHI-DQo8L3RhYmxlPg0KICAgIA0KICAgIA0KICAgIA0KDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQoNCg0KDQoNCg0KPHRhYmxlIHdpZHRoPSI2NDAiPg0KICAgPHRyPg0KICAgICAgPHRkIHdpZHRoPSIxNSI-DQogICAgICAgICA8ZGl2IHdpZHRoPSIxNSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjYyMCIgdmFsaWduPSJ0b3AiIGFsaWduPSJsZWZ0IiBjbGFzcz0icHJfY29udGFpbmVyIj4NCiAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9Imxpc3RfcHJvZHVjdCI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE1MCIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIGNsYXNzPSJwcl9pbWFnZSI-DQogICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9M0MxSzdGUFJQUE0xMSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDhRSk5LWDk0JTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8xMV9pbSZIPVVHSVpCMzVBNUFZMkhLT1ZVMlBXR01OREtPUUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzExX2ltIj4NCiAgICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vbS5tZWRpYS1hbWF6b24uY29tL2ltYWdlcy9JLzQxdUcwLVd6QWxMLl9TUjUwMCw1MDBfLl9TTDE0MF8uanBnIiBjbGFzcz0icHJfaW1hZ2VfMTc1IHByX2ltYWdlX2Rlc2t0b3AiIGFsdD0iVHVremVyIDQtUG9ydHMgVVNCIEEgdG8gVVNCIDMuMCBIVUIgd2l0aCBIaWdoLVNwZWVkIERhdGEgVHJhbnNmZXIgJmFtcDsgRmFzdCBDaGFyaW5nIFBvcnRzLCBDb21wYXRpYmxlIGZvciBNYWNCb29rIEFpciwgTWFjIE1pbmksIGlNYWMgUHJvLCBNaWNyb3NvZnQgU3VyZmFjZSwgVWx0cmFCb29rcywgTGFwdG9wLCBOb3RlYm9vaywgRGVza3RvcCAoV2hpdGUpIiBib3JkZXI9IjAiPg0KICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMzY1IiB2YWxpZ249InRvcCIgYWxpZ249ImxlZnQiPg0KICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3RpdGxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLFNhbnMtU2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMzMzY2OTk7Ij4NCiAgICAgPGEgY2xhc3M9Im9tYV9wcl90aXRsZSIgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9M0c5OFJLSlpYQ0lKQSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDhRSk5LWDk0JTNGcmVmJTNEZW1fMXBfMTFfdGklMjZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MSZIPVFORkVMQlYyVldGUDFRRkdNVVBENkdXNFVaR0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxIiBzdHlsZT0iZm9udC1zaXplOiAxNHB4OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgY29sb3I6IzMzNjY5OTsiPg0KICAgICAgICAgIFR1a3plciA0LVBvcnRzIFVTQiBBIHRvIFVTQiAzLjAgSFVCIHdpdGggSGlnaC1TcGVlZCBEYXRhLi4uPC9hPg0KPC9zcGFuPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfYnlsaW5lIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQoNCg0KDQoNCg0KDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgDQogICAgICAgIA0KDQogICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICANCiAgICANCiAgICANCg0KICAgIA0KICAgICAgICA8c3BhbiBjbGFzcz0ib21hLXByLWJsIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLFNhbnMtU2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpsZWZ0OyI-DQogICAgICAgICAgICAgPGJyPiBieQ0KICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJaSjY1WU9EWDVGTjkmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGc3RvcmVzJTJGVHVremVyJTJGcGFnZSUyRjIzRjIxRkUzLTU1QkUtNDE1Ri05QzA1LUE4M0NGNEIyMTIxMSUzRnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4lMjZzdG9yZV9yZWYlM0RibF9hc3RfZHBfYnJhbmRMb2dvX3N0byZIPVlJQ0dPVTRaQjlONTZBUUxBNVIyWVRNSFQ3V0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IzMzNjY5OTsiPlR1a3plcjwvYT4NCiAgICAgICAgPC9zcGFuPg0KICAgIA0KDQogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0ic3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX2xpc3QiPg0KICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTS5SLlAuOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9saXN0Ij4gICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpa2U-4oK5MSw1OTkuMDA8L3N0cmlrZT4gICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX291ciI-DQogICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcl9wcmljZV9sYWJlbCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWFsIFByaWNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9InByX3ByaWNlX2hpZ2hsaWdodCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuTU5OS4wMCAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgU2F2ZToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDigrkxLDAwMC4wMCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNjMlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCg0KDQoNCg0KDQoNCiAgICANCg0KDQoNCgkNCg0KDQoNCg0KDQoNCg0KCQ0KDQoNCg0KCQ0KDQoJDQoNCiAgICANCgkgICAgIA0KICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgIDx0ciBjbGFzcz0icHJfbWVyY2hhbnQiPg0KICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IHRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGNvbG9yOiM1NTU1NTU7IGZvbnQtc2l6ZToxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgU29sZCBieSANCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xSlhYSVhERk9TQ05KJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGYWFnJTJGbWFpbiUzRmllJTNEVVRGOCUyNmFzaW4lM0RCMDhRSk5LWDk0JTI2aXNBbWF6b25GdWxmaWxsZWQlM0QxJTI2bWFya2V0cGxhY2VJRCUzREEyMVRKUlVVTjRLR1YlMjZwcm90b2NvbCUzRGN1cnJlbnQlMjZzZWxsZXIlM0RBSjZTSVpDOFlRRFpYJTI2c3NobVBhdGglM0QlMjZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MSZIPVVJN1A4SlRRWFVJTkJVQ0FITzE0Tk1BWldHV0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgZm9udC1zaXplOjEycHg7Y29sb3I6ICMzMzY2OTk7Ij5DbGlja3RlY2ggUmV0YWlsIFByaXZhdGUgTHRkPC9hPiBhbmQgDQogICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij5GdWxmaWxsZWQgYnkgQW1hem9uPC9zcGFuPi4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPC9zcGFuPiANCiAgICAgICAgICAgIDwvdGQ-DQogICAgICAgIDwvdHI-DQogICAgDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTA1IiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQoNCg0KPGRpdiBjbGFzcz0icHJfbGVhcm5fbW9yZSIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImRpc3BsYXk6IGlubGluZS1ibG9jazsiPg0KICAgICAgICA8dGFibGUgY2xhc3M9ImJ0bi1sZWFybm1vcmUtc21hbGwiICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiIHN0eWxlPSJjb2xvcjogIzExMTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7ICB3aGl0ZS1zcGFjZTogbm93cmFwO2JhY2tncm91bmQtY29sb3I6ICNGRUM2NTA7IGZvbnQtc2l6ZToxMHB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czogNXB4OyI-DQogICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICA8dGQgbm93cmFwPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0yUjBXWURBVkRLMlpCJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwOFFKTktYOTQlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2VtXzFwXzExX2xtJkg9WENaSlNJTlJWQkxJV0xUTUNHUUFYV1RBVDdFQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMTFfbG0iIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0ibWlkZGxlIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzExMTsiPg0KICAgICAgICAgICAgICAgICAgICAgICAgTGVhcm4gbW9yZQ0KICAgICAgICAgICAgICAgICAgICA8L2E-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgIDwvdGFibGU-DQo8L2Rpdj4NCg0KDQoNCiANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgPC90YWJsZT4gPHRhYmxlIHdpZHRoPSI2MjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0ic2VwZXJhdG9yIj4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjYyMCIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMSI-DQogICAgICAgICAgICAgICAgICA8dGQgYmdjb2xvcj0iI2VhZWJlYyIgd2lkdGg9IjYyMCIgaGVpZ2h0PSIxIj4NCiAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjYyMCIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxcHg7bGluZS1oZWlnaHQ6MXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjYyMCIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgIDwvdGFibGU-DQogICAgICA8L3RkPg0KICAgICAgPHRkIHdpZHRoPSIxNSI-DQogICAgICAgICA8ZGl2IHdpZHRoPSIxNSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgIDwvdGQ-DQogICA8L3RyPg0KPC90YWJsZT4NCiAgICANCiAgICANCiAgICANCg0KDQogICAgDQoNCiAgICANCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KDQoNCg0KDQoNCjx0YWJsZSB3aWR0aD0iNjQwIj4NCiAgIDx0cj4NCiAgICAgIDx0ZCB3aWR0aD0iMTUiPg0KICAgICAgICAgPGRpdiB3aWR0aD0iMTUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTVweDtsaW5lLWhlaWdodDoxNXB4OyI-Jm5ic3A7PC9kaXY-DQogICAgICA8L3RkPg0KICAgICAgPHRkIHdpZHRoPSI2MjAiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCIgY2xhc3M9InByX2NvbnRhaW5lciI-DQogICAgICAgICA8dGFibGUgd2lkdGg9IjYyMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGNsYXNzPSJsaXN0X3Byb2R1Y3QiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNTAiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiBjbGFzcz0icHJfaW1hZ2UiPg0KICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJaNE1BUjk2UTlNMlImVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA5MTY1MjVUMyUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMTJfaW0mSD1ITjNOQUYwNTNaMDdSVktWSFlEUFhBUDRBU0lBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8xMl9pbSI-DQogICAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL20ubWVkaWEtYW1hem9uLmNvbS9pbWFnZXMvSS80MTNoTndoc29WUy5fU1I1MDAsNTAwXy5fU0wxNDBfLmpwZyIgY2xhc3M9InByX2ltYWdlXzE3NSBwcl9pbWFnZV9kZXNrdG9wIiBhbHQ9IlZlcmlsdXjCriBVU0IgSHViIDMuMCBmb3IgUEMsIDQtUG9ydCBIaWdoIFNwZWVkIFVTQiBIdWIgd2l0aCBBbHVtaW5pdW0gU2hlbGwsIFVTQiBQb3J0IEh1YiAzLjAgQ29tcGF0aWJsZSBmb3IgUEMsIE1hY0Jvb2ssIE1hYyBQcm8sIE1hYyBNaW5pLCBpTWFjLCBTdXJmYWNlIFBybywgWFBTLCBQQyAoR3JleSkiIGJvcmRlcj0iMCI-DQogICAgICAgICAgICA8L2E-DQogICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzNjUiIHZhbGlnbj0idG9wIiBhbGlnbj0ibGVmdCI-DQogICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfdGl0bGUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQoNCg0KDQo8c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsU2Fucy1TZXJpZjtmb250LXNpemU6MTVweDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWFsaWduOmxlZnQ7Y29sb3I6IzMzNjY5OTsiPg0KICAgICA8YSBjbGFzcz0ib21hX3ByX3RpdGxlIiBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zQlROUU9IWkpWOE0mVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA5MTY1MjVUMyUzRnJlZiUzRGVtXzFwXzEyX3RpJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1JUURLRFFNT0c2RFdPQTFHUjdaQ1ZBUFFGREdBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGNvbG9yOiMzMzY2OTk7Ij4NCiAgICAgICAgICBWZXJpbHV4wq4gVVNCIEh1YiAzLjAgZm9yIFBDLCA0LVBvcnQgSGlnaCBTcGVlZCBVU0IgSHViIHdpdGguLi48L2E-DQo8L3NwYW4-IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9ieWxpbmUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQoNCg0KDQoNCg0KDQoNCg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICANCiAgICAgICAgDQoNCiAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgICAgICANCg0KDQogICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIA0KICAgICAgICAgICAgDQogICAgICAgIA0KICAgIA0KICAgIA0KDQogICAgDQogICAgICAgIDxzcGFuIGNsYXNzPSJvbWEtcHItYmwiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2EsU2Fucy1TZXJpZjtmb250LXNpemU6MTJweDtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzMzMzt0ZXh0LWFsaWduOmxlZnQ7Ij4NCiAgICAgICAgICAgICA8YnI-IGJ5DQogICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MVpXTjIxRTkyNTJQWSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZzdG9yZXMlMkZWZXJpbHV4JTJGcGFnZSUyRkYzRDE2QUM1LTIwOTItNEY2RS1CN0M0LTZBMTRCRUQyNDExNSUzRnJlZl8lM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4lMjZzdG9yZV9yZWYlM0RibF9hc3RfZHBfYnJhbmRMb2dvX3N0byZIPUtMQllaVklLWFdMOUpIWEFPR09DNFBVQUtUMEEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX2FzdF9ibG4iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IzMzNjY5OTsiPlZlcmlsdXg8L2E-DQogICAgICAgIDwvc3Bhbj4NCiAgICANCg0KIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InNwYWNlciI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9saXN0Ij4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uUi5QLjoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfbGlzdCI-ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaWtlPuKCuTgzOS4wMDwvc3RyaWtlPiAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlYWwgUHJpY2U6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0icHJfcHJpY2VfaGlnaGxpZ2h0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4oK5Mjk5LjAwICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3ByaWNlX3NhdmluZ3MiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBTYXZlOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKCuTU0MC4wMCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNjQlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCg0KDQoNCg0KDQoNCiAgICANCg0KDQoNCgkNCg0KDQoNCg0KDQoNCg0KCQ0KDQoNCg0KCQ0KDQoJDQoNCiAgICANCgkgICAgIA0KICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgIDx0ciBjbGFzcz0icHJfbWVyY2hhbnQiPg0KICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IHRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGNvbG9yOiM1NTU1NTU7IGZvbnQtc2l6ZToxMnB4OyI-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgU29sZCBieSANCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xOVNDVE04UkFGMkdGJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGYWFnJTJGbWFpbiUzRmllJTNEVVRGOCUyNmFzaW4lM0RCMDkxNjUyNVQzJTI2aXNBbWF6b25GdWxmaWxsZWQlM0QxJTI2bWFya2V0cGxhY2VJRCUzREEyMVRKUlVVTjRLR1YlMjZwcm90b2NvbCUzRGN1cnJlbnQlMjZzZWxsZXIlM0RBMkpKMUFRV1pHRU44NyUyNnNzaG1QYXRoJTNEJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1USVJVVUNYNUpURkNROElRNkpSWDNST1lJQ0VBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGZvbnQtc2l6ZToxMnB4O2NvbG9yOiAjMzM2Njk5OyI-RXhwcmVzcyBNYXg8L2E-IGFuZCANCiAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDsiPkZ1bGZpbGxlZCBieSBBbWF6b248L3NwYW4-Lg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8L3NwYW4-IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgPC90cj4NCiAgICANCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDUiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIj4NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCg0KDQo8ZGl2IGNsYXNzPSJwcl9sZWFybl9tb3JlIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyI-DQogICAgICAgIDx0YWJsZSBjbGFzcz0iYnRuLWxlYXJubW9yZS1zbWFsbCIgIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyIgc3R5bGU9ImNvbG9yOiAjMTExOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgIHdoaXRlLXNwYWNlOiBub3dyYXA7YmFja2dyb3VuZC1jb2xvcjogI0ZFQzY1MDsgZm9udC1zaXplOjEwcHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOiA1cHg7Ij4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgIDx0ZCBub3dyYXA-DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTMyTFdIWEtHOVQ3MTgmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA5MTY1MjVUMyUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfZW1fMXBfMTJfbG0mSD1MM0xFRUYyTkJLSklVT0ROU1VFOEtWWkpUVFFBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9lbV8xcF8xMl9sbSIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMTExOyI-DQogICAgICAgICAgICAgICAgICAgICAgICBMZWFybiBtb3JlDQogICAgICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCjwvZGl2Pg0KDQoNCg0KIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICA8L3RhYmxlPiA8dGFibGUgd2lkdGg9IjYyMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJzZXBlcmF0b3IiPg0KICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIxIj4NCiAgICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjZWFlYmVjIiB3aWR0aD0iNjIwIiBoZWlnaHQ9IjEiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjFweDtsaW5lLWhlaWdodDoxcHg7Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPHRyIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2MjAiIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iNjIwIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgPC90YWJsZT4NCiAgICAgIDwvdGQ-DQogICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bGluZS1oZWlnaHQ6MTVweDsiPiZuYnNwOzwvZGl2Pg0KICAgICAgPC90ZD4NCiAgIDwvdHI-DQo8L3RhYmxlPg0KICAgIA0KICAgIA0KICAgIA0KDQoNCg0KDQogICAgICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KDQogICAgDQogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCiAgICAgICAgLnNlZl9zcGFjZXIgew0KICAgICAgICAgICAgdmlzaWJpbGl0eTpoaWRkZW47DQogICAgICAgIH0NCiAgICANCiAgICAgICAgDQogICAgICAgIA0KICAgIDwvc3R5bGU-DQogICAgDQogICAgDQogICAgDQogICAgDQoNCg0KPHRhYmxlIGNsYXNzPSJjcy1zbG90IGRldmljZVdpZHRoIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgIHdpZHRoPSI2NDAiPg0KICAgIDx0cj4NCiAgICAgICAgPHRkPg0KICAgICAgICAgICAgDQogICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8dGFibGUgYWxpZ249ImNlbnRlciIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDoxMDAlOyIgPg0KICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZvb3Rlci1iYW5uZXIiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0ibWlkZGxlIj4NCg0KDQoNCiAgICANCg0KICAgIA0KICAgICAgIA0KICAgICAgICAgDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyLWJhbm5lciIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPg0KDQoNCg0KICAgIA0KDQogICAgDQoNCiAgICANCg0KICAgIA0KICAgICAgIA0KICAgICAgICAgDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmb290ZXItYmFubmVyIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249Im1pZGRsZSI-DQoNCg0KDQogICAgDQoNCiAgICANCg0KICAgIA0KDQogICAgDQoNCiAgICANCiAgICAgICANCiAgICAgICAgIA0KICAgIA0KDQogICAgDQoNCiAgICANCg0KDQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICANCiAgICAgICAgPC90ZD4NCiAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkPg0KDQo8dGFibGUgd2lkdGg9IjY0MCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJkZXZpY2VXaWR0aCBzZWZfZm9vdGVyX2xpbmtmYXJtIg0KICAgIHZhbGlnbj0ibWlkZGxlIj4NCiAgICA8dHI-DQogICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgIGNsYXNzPSJsaW5rZmFybSIgc3R5bGU9ImZvbnQtZmFtaWx5OkhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ij4NCiAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjQwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYWxpZ249ImNlbnRlciIgY2xhc3M9ImRldmljZVdpZHRoIHNlZl9mb290ZXJfbGlua2Zhcm0iIGJnY29sb3I9IiNGRkZGRkYiIHZhbGlnbj0ibWlkZGxlIj4NCiAgICA8dHI-DQogICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI0ZGRkZGRiIgY2xhc3M9ImxpbmtmYXJtIiBzdHlsZT0iZm9udC1mYW1pbHk6SGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsiPg0KICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSIxMCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiNGRkZGRkYiIGNsYXNzPSJmYXJtIj4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImxlZnQiIGNsYXNzPSJmYXJtaGVhZCIgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNlNDc5MTE7bGluZS1oZWlnaHQ6MTZweDsgZm9udC13ZWlnaHQ6Ym9sZDsiPjxmb250IGZhY2U9ImFyaWFsLCB2ZXJkYW5hLGEgc2Fucy1zZXJpZiIgc2l6ZT0iMyIgY29sb3I9IiNlNDc5MTEiIHN0eWxlPSJmb250LWZhbWlseTphcmlhbDtmb250LXNpemU6MTRweDtjb2xvcjojZTQ3OTExO2xpbmUtaGVpZ2h0OjE2cHgiPkZpbmQgR3JlYXQgRGVhbHMgb24gTWlsbGlvbnMgb2YgUHJvZHVjdHM8L2ZvbnQ-PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHgiIGNsYXNzPSJzZWZfZm9vdGVyX2xpbmtmYXJtIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTU1IiB2YWxpZ249InRvcCIgY2xhc3M9ImZhcm0xIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHgiIHdpZHRoPSI5NSUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MU1DSkFBNDhKNFJETSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9Cb29rcyUyRiUzRm5vZGUlM0Q5NzYzODkwMzEmSD1BR0U4RUNETVBOUTZTRDNFUVhNTFYySk1FWjRBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9Cb29rcyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkJvb2tzPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9M0lRSjJYUk9WR1g0NSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9lQm9va3MlMkYlM0Zub2RlJTNEMTYzNDc1MzAzMSZIPUtYWFBVWU1LOUlRSkFPRldEUFIxQ1ZOV1EzUUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX2xmX2VCb29rcyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPktpbmRsZSBlQm9va3M8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zUlBIVDNIWUM2UU5QJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlM0Zub2RlJTNEOTg0MDA5NzAzMSUyNnJlZiUzRHBlX2xmX0tlUmVhZGVyJTI2cmVmXyUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzEmSD1PODZJQVpPQ1BBNTZJMFcwUFBZREVFU0pGVThBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MSIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPktpbmRsZSBlLXJlYWRlcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJDTFIwT1Q0MElVVU8mVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZHAlMkZCMDBRSkRPRUFPJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9LUFcmSD02Mks5QzFCRVZDT1VYRE9XU1pUOVFIRFFHRVlBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9LUFciIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5LaW5kbGUgUGFwZXJ3aGl0ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTNCR0I5N1JJSzdHNEYmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfbGZfTXVzaWMlMkYlM0Zub2RlJTNEOTc2NDQ1MDMxJkg9SjFHSTc3ME9ITFdSVTRPSjRHMFBBRVhKQlBTQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfbGZfTXVzaWMiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5NdXNpYyw8L2E-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPUZPSUVENUQyWU9ETyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9Nb3ZpZXMlMkYlM0Zub2RlJTNEOTc2NDE2MDMxJkg9V1ZOVTdKSUpBRkFCUkRVVktSTEtQV1NNV0hDQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfbGZfTW92aWVzIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-TW92aWVzPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9M001MjkyUUxPTDRXTCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9WRyUyRiUzRm5vZGUlM0Q5NzY0NjAwMzEmSD1EUEpXRTNJOFM1RVVMTEtEVTBDR1JKU0FRWTBBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9WRyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPlZpZGVvIEdhbWVzPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTgwIiB2YWxpZ249InRvcCIgY2xhc3M9ImZhcm0yIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHgiIHdpZHRoPSI5NSUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MU4wRkdTS0NBVkM4SyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9Nb2JpbGVzJTJGJTNGbm9kZSUzRDEzODk0MDEwMzEmSD1YTk9BUkFZV0hXTkJFSkFITEVGU1hBTzJNQ0NBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9Nb2JpbGVzIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-TW9iaWxlcyAmYW1wOyA8L2E-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MTNDTFpXRDA5VUVLTCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9UYWJsZXRzJTJGJTNGbm9kZSUzRDEzNzU0NTgwMzEmSD1aTFZENTFWUVAwTU5HQ1hVWTJYTUYwWExFR1NBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9UYWJsZXRzIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-VGFibGV0czwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPUIxQThZWURDQjZEVSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9Db21wcyUyRiUzRm5vZGUlM0Q5NzYzOTIwMzEmSD1DSklTVDdJMExNWkpRV1lJSk5FRFpPSlVIQVVBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9Db21wcyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkNvbXB1dGVycyAmYW1wOyBBY2Nlc3NvcmllczwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPUZHVUU0UVRVNlhCVyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9sZl9DYW1lcmElMkYlM0Zub2RlJTNEMTM4ODk3NzAzMSZIPURaQUVMRldLSERYUlJUSTk1QlY3QUhLR01GV0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX2xmX0NhbWVyYSIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkNhbWVyYXMsPC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTFPR1E1QkdNQUgyQkUmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfQVZUViUyRiUzRm5vZGUlM0QxNTc1NDA3MDMxJkg9SkpVVkFOR0xRWDNZSTdVUUk0Q1U3S0JGVE40QSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfQVZUViIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPiBBdWRpbyAmIFZpZGVvPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MjBHTUlXOEJUTUU2SiZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9NdXNpY2FsSW5zdHIlMkYlM0Zub2RlJTNEMzY3NzY5NzAzMSZIPThPWVBSRUFaMkpLMVZGWjRQVVNMWkdTQUpORUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX011c2ljYWxJbnN0ciIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPk11c2ljYWwgSW5zdHJ1bWVudHM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zSUIzRUE2OUNOMzBGJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX1Nwb3J0cyUyRiUzRm5vZGUlM0QxOTg0NDQzMDMxJkg9TVo1UE5JSExIWVVSSzFJWUVQV08wMFpHNzE4QSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfU3BvcnRzIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-U3BvcnRzICYgRml0bmVzczwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTExVkVXOFNKVDEzR1MmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfSEslMkYlM0Zub2RlJTNEOTc2NDQyMDMxJkg9MDFRTUlHWktBTEVDSUpGU1VFMk1BQUxDWVhXQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfSEsiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5Ib21lICYgS2l0Y2hlbjwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEzNSIgdmFsaWduPSJ0b3AiIGNsYXNzPSJmYXJtMyI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4IiB3aWR0aD0iOTUlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIyIiBjZWxscGFkZGluZz0iMCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTRTQTVJNUlRV1M4WSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9DbG90aGluZyUyRiUzRm5vZGUlM0QxNTcxMjcxMDMxJkg9V09LS0UxTFBIQlU3TUhCWkdENjhXUkJITlZPQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfQ2xvdGhpbmciIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5DbG90aGluZywgQWNjZXNzb3JpZXM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj1HOVE2NDgxS1NSTzEmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfV2F0Y2hlcyUyRiUzRm5vZGUlM0QxMzUwMzg3MDMxJkg9RzJZTFQyVkNaVUlQVUpBTVBBMDJORFg5TkM0QSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfV2F0Y2hlcyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPldhdGNoZXMsPC9hPiA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj00WE40TkxGOTNGQlAmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfSmV3ZWxsZXJ5JTJGJTNGbm9kZSUzRDE5NTEwNDgwMzEmSD1HMUVHRjlGM0I1TDBSNEVUV0JWS1ZISUkxVjhBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9KZXdlbGxlcnkiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5KZXdlbGxlcnk8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xUUxHNTE0QjFKOFFXJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX0hhbmRiYWdzJTJGJTNGbm9kZSUzRDE5ODMzMzgwMzEmSD1STElCS0JPMERTWUdWUzJCV09MUlhNRk0yRThBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9IYW5kYmFncyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkhhbmRiYWdzICYgPC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTFRWTI4Vk1DNDIySlMmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfTHVnZ2FnZSUyRiUzRm5vZGUlM0QyNDU0MTY5MDMxJkg9OUFMWlQ5VEY0S0RJTVhPN0xZVDhDQ1ZHUlRFQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfTHVnZ2FnZSIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkx1Z2dhZ2U8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj1NV1IwQ0FRNFFCMzEmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfU2hvZXMlMkYlM0Zub2RlJTNEMTk4MzM5NjAzMSZIPTE4SEdQT0dYQ0dYRExISkJTUklUOFhLUzdaQUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX1Nob2VzIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-U2hvZXM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0xSFEwVUE5V1VMNklaJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX0JlYXV0eSUyRiUzRm5vZGUlM0QxMzU1MDE2MDMxJkg9Vzg3MDJGUlpRSlBKQUdSMVJNNFlFVjM4RFcwQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfQmVhdXR5IiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-QmVhdXR5ICYgPC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJPUVhVVjVJMVBLMEImVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfSGVhbHRoJTJGJTNGbm9kZSUzRDEzNTAzODQwMzEmSD1aOTBITlpBRUFUUkYwOFZBM1FDWDZMRkFPNk1BJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9IZWFsdGgiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5IZWFsdGg8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zUDlRWVRZTDVBTTdKJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX1RveXMlMkYlM0Zub2RlJTNEMTM1MDM4MDAzMSZIPVhQRVdEQTZWRVQ2Uk9QWkM2SERaQ0VCVU9BS0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX1RveXMiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5Ub3lzICYgPC9hPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTNPUjFTN1hBWDJFOEomVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfQmFieSUyRiUzRm5vZGUlM0QxNTcxMjc0MDMxJkg9QVNJWENFTDBBQVNZWUlNTVU4U0hVRUszWVFDQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfQmFieSIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkJhYnkgUHJvZHVjdHM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNzAiIHZhbGlnbj0idG9wIiBjbGFzcz0iZmFybTQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTJweCIgd2lkdGg9Ijk1JSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMiIgY2VsbHBhZGRpbmc9IjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0yUFNGS09VOElGMUtFJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX0dDJTJGJTNGbm9kZSUzRDM3MDQ5ODIwMzEmSD1UR1dBSjhJTE9VQVlMUzZOQ0dUMlVYTUVBUkNBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9HQyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkdpZnQgQ2FyZHM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0yV1lCQzlaSzhDM0JMJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX1BldHMlMkYlM0Zub2RlJTNEMjQ1NDE4MTAzMSZIPVVDTTlBWFVYS1MyOEZRRU1WQVJSMU1NVENaU0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX1BldHMiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5QZXQgU3VwcGxpZXM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zSzVUVFNTQVFQVzgwJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX0dvdXJtZXQlMkYlM0Zub2RlJTNEMjQ1NDE3ODAzMSZIPVFIVEtPV05QT1c2TzBBN1ZJSVhRUjdGTjczSUEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX0dvdXJtZXQiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5Hb3VybWV0IDwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9mLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJSSTdVWTM1T1ZVRlcmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGbXNob3AlM0ZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MSZIPVNJWEZLTEJaU0FGRThSSDBUSEhNWDZCRTZROEEmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-QW1hem9uIFNob3BwaW5nIEFwcDwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9mLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTZKSjZXQTFHUVY4UiZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmRpZ2l0YWwlMkZmaW9uYSUyRmtjcC1sYW5kaW5nLXBhZ2UlM0ZyZWZfJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9LQ1AmSD1ZREpJTjVBU1VJMTNBS0ZFTEFMV0pGRkVVSjBBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9LQ1AiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5LaW5kbGUgUmVhZGluZyBBcHBzPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL2YuaHRtbD9DPUJEU0YxUUREN1RUSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNjAwMTIzODhiY2U5NDAxZmY1NDRlZTFiNjQ3ZDEzZDc0NTBwMGV1JlI9MUQ1OENZWDFXOEVXMiZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmZlYXR1cmUuaHRtbCUyRnJlZiUzRHBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfQXBwc3RvcmUlM0ZpZSUzRFVURjglMjZkb2NJZCUzRDEwMDA3MjE3NzMmSD1VU0kxWFlTWUtSTTRIWkVBTU5YQUFKVEZRQVFBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9BcHBzdG9yZSIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkFwcHN0b3JlIGZvciBBbmRyb2lkPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgIDwvdGQ-DQogICAgPC90cj4NCjwvdGFibGU-DQo8dGFibGUgY2xhc3M9InNlZl9zcGFjZXIiIHdpZHRoPSI2NDAiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0iYm9yZGVyLXNwYWNpbmc6MHB4O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsiPg0KICAgIDx0ciBoZWlnaHQ9IjIiPg0KICAgICAgICA8dGQgYmdjb2xvcj0iI2NjY2NjOSIgd2lkdGg9IjY0MCIgaGVpZ2h0PSIyIj4NCiAgICAgICAgICAgIDxkaXYgd2lkdGg9IjY0MCIgc3R5bGU9ImZvbnQtc2l6ZToycHg7bGluZS1oZWlnaHQ6MnB4Ij4mbmJzcDs8L2Rpdj4NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4NCiAgICAgICAgPC90ZD4NCiAgICA8L3RyPg0KPC90YWJsZT4gIA0KIA0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgIC5zZWZfZm9vdGVyX2Nvbm5lY3QgLnlzaG9ydGN1dHMgeyBjb2xvcjojRkZGRkZGIH0NCjwvc3R5bGU-DQoNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI-DQogICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LWRldmljZS13aWR0aDogNDgwcHgpIHsNCiAgICAuc2VmX2Zvb3Rlcl9jb25uZWN0IHsgd2lkdGg6IDMwMHB4ICFpbXBvcnRhbnQ7IH0NCiAgICB9DQo8L3N0eWxlPg0KDQo8dGFibGUgY2xhc3M9InNlZl9mb290ZXJfY29ubmVjdCIgYmdjb2xvcj0iI0ZGRkZGRiIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMTAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjQwIiBhbGlnbj0iY2VudGVyIj4NCiAgICA8dGJvZHk-DQogICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iNTAlIj4NCiAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBhbGlnbj0ibGVmdCIgY2VsbHBhZGRpbmc9IjYiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ic2V0dGluZ3MiIGNib3JkZXI9IjAiPg0KICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJIS1k1TFRQUjY4QzkmVD1DJlU9aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX2Zvb3Rlcl9hbWF6b25sb2dvJTJGJkg9OVdFMEFBWlRVUVJPMVNSQzBNWVFJT0xEUFpLQSZyZWZfPXBlXzQwNTAwMDQxXzEyMTc3MDM1NzFfcGVfZm9vdGVyX2FtYXpvbmxvZ28iIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cDovL2ctZWMyLmltYWdlcy1hbWF6b24uY29tL2ltYWdlcy9HLzMxL2FhL2FtYXpvbi9sb2dvMi5naWYiIGFsdD0iQW1hem9uLmluImJvcmRlcj0iMCJhbGlnbj0ibGVmdCIvPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij48dGFibGUgY2xhc3M9ImNvbm5lY3QiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjYiIGNlbGxzcGFjaW5nPSIwIiBhbGlnbj0icmlnaHQiPg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI-PGZvbnQgc3R5bGU9ImZvbnQtZmFtaWx5OiB2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBweDsgY29sb3I6ICM2NjY7IGxpbmUtaGVpZ2h0OjEwcHgiIGNvbG9yPSIjOTk5IiBmYWNlPSJ2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWYiIHNpemU9IjEiPkNvbm5lY3Qgd2l0aCBBbWF6b24gSW5kaWE8L2ZvbnQ-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmYWNlYm9vayI-PGZvbnQgc3R5bGU9ImZvbnQtZmFtaWx5OiB2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBweDsgY29sb3I6ICM5OTk7IiBjb2xvcj0iIzk5OSIgZmFjZT0idmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmIiBzaXplPSIxIj48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9QkRTRjFRREQ3VFRLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI2MDAxMjM4OGJjZTk0MDFmZjU0NGVlMWI2NDdkMTNkNzQ1MHAwZXUmUj0zMjVVOElNMlJNUzhFJlQ9QyZVPWh0dHAlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZyZWRpcmVjdC5odG1sJTJGcmVmJTNEcGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9mYl9mdHIlMkYlM0Zsb2NhdGlvbiUzRGh0dHAlM0ElMkYlMkZ3d3cuZmFjZWJvb2suY29tJTJGQW1hem9uSU4lMjZ0b2tlbiUzRDIwNzVENUVBQzdCQjIxNDA4OTcyOEUyMTgzRkQzOTE3MDZENDFFOTQmSD1KMlBBMkFBTkNCVFFBOUxJQ01ZVlU2RFFUUkNBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV9mYl9mdHIiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cDovL2ctZWN4LmltYWdlcy1hbWF6b24uY29tL2ltYWdlcy9HLzAxL3VzLW1haWwvRkJsb2dvLmdpZiIgYWx0PSJpbWFnZSIgYm9yZGVyPSIwIiBoZWlnaHQ9IjMwIiBoc3BhY2U9IjAiIHZzcGFjZT0iMCIgd2lkdGg9IjMwIiBzdHlsZT0id2lkdGg6MzBweDsgaGVpZ2h0OjMwcHg7IiAvPjwvYT48L2ZvbnQ-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJ0d2l0dGVyIj48Zm9udCBzdHlsZT0iZm9udC1mYW1pbHk6IHZlcmRhbmEsYXJpYWwsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMHB4OyBjb2xvcjogIzk5OTsiIGNvbG9yPSIjOTk5IiBmYWNlPSJ2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWYiIHNpemU9IjEiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9mLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJBTldJU1UxMFJINlUmVD1DJlU9aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnJlZGlyZWN0Lmh0bWwlMkZyZWYlM0RwZV80MDUwMDA0MV8xMjE3NzAzNTcxX3BlX3R3X2Z0ciUyRiUzRmxvY2F0aW9uJTNEaHR0cCUzQSUyRiUyRnR3aXR0ZXIuY29tJTJGQW1hem9uSU4lMjZ0b2tlbiUzREEzMDlERkJGQ0IxRTM3QTgwOEZGNTMxOTM0ODU1REM4MTdGMTMwQjYmSD0zVEJTTEFDSjZUOVBIUU4zTFBET0hFNlRBTVNBJnJlZl89cGVfNDA1MDAwNDFfMTIxNzcwMzU3MV9wZV90d19mdHIiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cDovL2ctZWN4LmltYWdlcy1hbWF6b24uY29tL2ltYWdlcy9HLzAxL3VzLW1haWwvVHdpdHRlckxvZ28uZ2lmIiBhbHQ9ImltYWdlIiBib3JkZXI9IjAiIGhlaWdodD0iMzAiIGhzcGFjZT0iMCIgdnNwYWNlPSIwIiB3aWR0aD0iMzAiIHN0eWxlPSJ3aWR0aDozMHB4OyBoZWlnaHQ6MzBweDsiIC8-PC9hPjwvZm9udD48L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-ICAgICAgICAgICAgDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgIDwvdGJvZHk-DQo8L3RhYmxlPg0KICAgICAgICAgICANCiAgICAgICAgICAgIDwvdGQ-DQogICAgICAgIDwvdHI-DQoNCiAgICA8L3RyPg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICANCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI-DQogIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpIHsNCiAgICBib2R5W3lhaG9vXSAuc2VmX2xlZ2FsX2Zvb3RlciB7IHdpZHRoOiAzMDBweCAhaW1wb3J0YW50OyB9DQogIH0gICAgDQo8L3N0eWxlPg0KDQoNCg0KDQo8dGFibGUgYWxpZ249ImNlbnRlciIgIHdpZHRoPSI2NDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0ic2VmX2xlZ2FsX2Zvb3RlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2UzZTNlMyIgYmdjb2xvcj0iI2UzZTNlMyIgPg0KICAgIDx0ciBoZWlnaHQ9IjEwIj4NCiAgICAgIDx0ZCB3aWR0aD0iMTAwJSI-PGRpdiB3aWR0aD0iMTAwJSIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4OyBsaW5lLWhlaWdodDoxMHB4Ij4mbmJzcDs8L2Rpdj48L3RkPg0KICAgIDwvdHI-DQogICAgPHRyPg0KICAgICAgPHRkIGFsaWduPSJsZWZ0IiBjbGFzcz0ibGVnYWwtdGV4dCI-DQogICAgICBXZSBob3BlIHlvdSBmb3VuZCB0aGlzIG1lc3NhZ2UgdG8gYmUgdXNlZnVsLiBIb3dldmVyLCBpZiB5b3UnZCByYXRoZXIgbm90IHJlY2VpdmUgZnV0dXJlIGUtbWFpbHMgb2YgdGhpcyBzb3J0IGZyb20gQW1hem9uLmluLCBwbGVhc2UgPGENCiAgICAgICAgICAgIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9mLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTFVSTNIQVdWM0k0QUUmVD1YJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGJTJGZ3AlMkZnc3MlMkZvJTJGMTFYTHowVmxkclFGOWpweU1PbksybUlTY2wxLjdqT291VXZ6QnE4anlmM3RWYmlUS1FlZVJNaWdaSWVlTUlQVzMmSD1HTUlNSExTQVJHQVRHS0NYMUtKMEJGQUlTSEFBIiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLEhlbHZldGljYSxTYW5zLVNlcmlmOyBmb250LXNpemU6IDEwcHg7Ij5vcHQtb3V0IGhlcmU8L2E-IDxici8-IDxici8-DQogICAgICAgIFBsZWFzZSBub3RlIHRoYXQgcHJvZHVjdCBwcmljZXMgYW5kIGF2YWlsYWJpbGl0eSBhcmUgc3ViamVjdCB0byBjaGFuZ2UuIFByaWNlcyBhbmQgYXZhaWxhYmlsaXR5IHdlcmUgYWNjdXJhdGUgYXQgdGhlIHRpbWUgdGhpcyBuZXdzbGV0dGVyIHdhcyBzZW50OyBob3dldmVyLCB0aGV5IG1heSBkaWZmZXIgZnJvbSB0aG9zZSB5b3Ugc2VlIHdoZW4geW91IHZpc2l0IEFtYXpvbi5pbi4gDQogICAgICAgIA0KICAgICAgICA8YnIvPjxici8-QW1hem9uLmluIE1hcmtldHBsYWNlIHBsYXRmb3JtOiBQcm9kdWN0cyBzb2xkIGJ5IGEgTWFya2V0cGxhY2Ugc2VsbGVyIGFyZSBzdWJqZWN0IHRvIHRoYXQgc2VsbGVyJ3MgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Ygc2FsZS4gU2VlIHd3dy5BbWF6b24uaW4gZm9yIGRldGFpbHMuIDxiciAvPjxiciAvPg0KICAgICAgICBSZWZlcmVuY2U6IDEyMTc3MDM1NzE8YnIgLz48YnIgLz4NCiAgICAgICAgVGhpcyBtZXNzYWdlIHdhcyBzZW50IHRvIHRoZSBmb2xsb3dpbmcgZS1tYWlsIGFkZHJlc3M6IDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLFNhbnMtU2VyaWY7IGZvbnQtc2l6ZTogMTBweDsiPnBza2h1c2hhbEBnbWFpbC5jb208L3NwYW4-DQogICAgICA8L3RkPg0KICAgIDwvdHI-DQogIDwvdGJvZHk-DQo8L3RhYmxlPg0KICANCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICANCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgDQogICAgPGltZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBzcmM9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz1CRFNGMVFERDdUVEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjYwMDEyMzg4YmNlOTQwMWZmNTQ0ZWUxYjY0N2QxM2Q3NDUwcDBldSZSPTJOR00yS0VGMU5DN1ImVD1FJlU9aHR0cHMlM0ElMkYlMkZpbWFnZXMtZXUuc3NsLWltYWdlcy1hbWF6b24uY29tJTJGaW1hZ2VzJTJGRyUyRjAxJTJGbmF2JTJGdHJhbnNwLmdpZiZIPVhCMzBWWTk1T0xOQUtITUpaOUVGQlZKWk44V0EmcmVmXz1wZV80MDUwMDA0MV8xMjE3NzAzNTcxX29wZW4iIC8-PC9ib2R5Pg0KPC9odG1sPg0KDQoNCg0KDQoNCg==" + } + } + ] + }, + "sizeEstimate": 198800, + "historyId": "527715", + "internalDate": "1732579958000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_04_193640e74d93dc9b_20241126.json b/goog/controllers/gmail/json/messages/raw_message_04_193640e74d93dc9b_20241126.json new file mode 100644 index 0000000..aaefb58 --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_04_193640e74d93dc9b_20241126.json @@ -0,0 +1,179 @@ +{ + "id": "193640e74d93dc9b", + "threadId": "193640e74d93dc9b", + "labelIds": [ + "UNREAD", + "CATEGORY_UPDATES", + "INBOX" + ], + "snippet": "Feast your eyes on our completely redesigned web console, plus expanded migration options and more... Hello, As we gather to celebrate Thanksgiving in the US, we're especially grateful for our", + "payload": { + "partId": "", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp984823wrq; Mon, 25 Nov 2024 08:01:29 -0800 (PST)" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IH+vf8/Fteko3M8o3piPWLQDPikJ1wq+G3dKPy69Vuxm+CTLGfM304hsif0pHcSATwRtMiP" + }, + { + "name": "X-Received", + "value": "by 2002:a05:620a:17a5:b0:7b1:50a8:3394 with SMTP id af79cd13be357-7b51455cc96mr1998061085a.36.1732550489464; Mon, 25 Nov 2024 08:01:29 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732550489; cv=none; d=google.com; s=arc-20240605; b=U0GfsIWubWP6yFaeQTUTLUXf86KkhphJhC+lyqVLrCZlta3hBcfGm7bHPJvBZsp9gU yA5m9aNMZWG0qszyQzMZotMWTaYSHuHV9vrHbJAymzpHlaCASGoZPw28d8zeqibeuork hdexr4PjezkCb+SCMZ/o/lhbsGv9KSpDLrkJbn4wsyVIZTMZDd/4KP9XfXEVjCk6WyG7 +G2C2kEanh/mP2bQk059GCKpbvfiqmHZbL5PtIdijZ5eO9pZFKFc86tDKJO+0vgpm+D8 HY3WEsGb/PzVFYSQGaFcE+oxNEzENXqcC6n5Sfz3BWCbBel1gHqu+H2vcNfGu/bUwelG MfyQ==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:list-unsubscribe-post:precedence:mime-version:subject :message-id:to:reply-to:from:date:list-unsubscribe:dkim-signature :dkim-signature; bh=hvQzqDR16zPZGhiM7v8hurpvFgqpnV1lolZcpeqI8r0=; fh=u/EceduMLbMJaVmVACWimtVNyu5iebWbNB9Q7JrDYgs=; b=DbOqZM5uvFufkZaBlxN5XdanVQCZiMNAevcLjyV8RyOACO1vFtLSLnxtnz8q276iOk l4YAUBVUepCxvJPjdi+tldA9ZJpbyZD/3l7cOlx1qpAmvP2jNySSqolco8HqJ2Q+c6AT 5v8cmjMoVm1Ni82iUWLGHURa4PJgAGC9dPH6DHmkorMJxWFeHRAn35vhF6d5MQzY2MlI qWJxD1Mlr+hamALJRukMDRiMJShkc1/3kdmzeIkd/cvjyrizSFCr15pc7m3PSE7HSe84 FvbJ9twKEDkKsJfqXcGHHJCdcMWmTVpEE1V2eB2ch0cETMJLvnuxFb+H9d4WeqrrluU8 pzkA==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@bf01x.hubspotemail.net header.s=hs2 header.b=m+NNTsoY; dkim=pass header.i=@zilliz.com header.s=hs2-24054828 header.b=dCZcJzff; spf=pass (google.com: domain of 1axbzsh1c0inx9vvhdkhx9vxwsytxpfuxt98ee-pskhushal=gmail.com@bf01x.hubspotemail.net designates 158.247.24.91 as permitted sender) smtp.mailfrom=\"1axbzsh1c0inx9vvhdkhx9vxwsytxpfuxt98ee-pskhushal=gmail.com@bf01x.hubspotemail.net\"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zilliz.com" + }, + { + "name": "Return-Path", + "value": "<1axbzsh1c0inx9vvhdkhx9vxwsytxpfuxt98ee-pskhushal=gmail.com@bf01x.hubspotemail.net>" + }, + { + "name": "Received", + "value": "from bid47t5.bf01x.hubspotemail.net (bid47t5.bf01x.hubspotemail.net. [158.247.24.91]) by mx.google.com with ESMTPS id af79cd13be357-7b657597496si812333685a.609.2024.11.25.08.01.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Nov 2024 08:01:29 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of 1axbzsh1c0inx9vvhdkhx9vxwsytxpfuxt98ee-pskhushal=gmail.com@bf01x.hubspotemail.net designates 158.247.24.91 as permitted sender) client-ip=158.247.24.91;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@bf01x.hubspotemail.net header.s=hs2 header.b=m+NNTsoY; dkim=pass header.i=@zilliz.com header.s=hs2-24054828 header.b=dCZcJzff; spf=pass (google.com: domain of 1axbzsh1c0inx9vvhdkhx9vxwsytxpfuxt98ee-pskhushal=gmail.com@bf01x.hubspotemail.net designates 158.247.24.91 as permitted sender) smtp.mailfrom=\"1axbzsh1c0inx9vvhdkhx9vxwsytxpfuxt98ee-pskhushal=gmail.com@bf01x.hubspotemail.net\"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zilliz.com" + }, + { + "name": "Received", + "value": "by 172.16.224.35 with SMTP id a0b2377bl4ybydq92cr5x2s5w50rr0v0djrec38pwv4; Mon, 25 Nov 2024 16:01:29 GMT" + }, + { + "name": "DKIM-Signature", + "value": "v=1; s=hs2; d=bf01x.hubspotemail.net; i=@bf01x.hubspotemail.net; h=sender:from:from:reply-to:to:to:cc:cc:subject:subject:list-unsubscribe:form-sub:feedback-id:list-unsubscribe-post; a=rsa-sha256; c=relaxed/relaxed; bh=hvQzqDR16zPZGhiM7v8hurpvFgqpnV1lolZcpeqI8r0=; b=m+NNTsoYyn2tZ/wV/I6UXPnfIpGJuLdZAU4vRxS4NKPIDG+i5HNt9eY5o5cAIs 4mUUepea+TfNyi1PilJDnFg6Zhh6LD7j9Oj/VROX4FGC0adfVydQqIPRPVqH4zM +/F5GZ/f/dAJbmFmMM+gTkM0ifvVULVahaMhI3c5gvseCadkXRFOjZHyJTyUBYm uGgBP0x4ohO9zFOTHs9GytG3rcfEu/7Gs3mxCQAxarLMl89Cm2poJriAHxRLAQ2 BoxWeEhly3BAdFYdysDY0Ry1nawXbaisH4vCjZWJvQk6lOOnYMk02ngYgrrJh82 dSeSmMjmJiY/OvItyWj2X8mXBivQ==; q=dns/txt; t=1732550489; x=1732813289;" + }, + { + "name": "DKIM-Signature", + "value": "v=1; s=hs2-24054828; d=zilliz.com; i=@zilliz.com; h=sender:from:from:reply-to:to:to:cc:cc:subject:subject:list-unsubscribe:form-sub:feedback-id:list-unsubscribe-post; a=rsa-sha256; c=relaxed/relaxed; bh=hvQzqDR16zPZGhiM7v8hurpvFgqpnV1lolZcpeqI8r0=; b=dCZcJzffwhM4dmI/qrCp3/TW07yVpibY8OLH0z05VJsoBTyRH9wcaDsP75uYMr BeNlVnAWQyLy866E2CYJOzgeb9OMJFZNelPwFDng3eYzdJksy/kXP5suqVdb7Tl 7s/dfdnogPgL6by5j1ZedccQag7j6RUCMQVnKeV1j5L3sXQidbd1MlTLBZzzstl hKQiujdK8VX9qPp4BMRlOnOPnFLKDnYxPp+Zmx4/xR9iB6zPeEi+d+QHJhDgoqu yun7oQEDtdIe8QG1mw3W0U6SIYAoe5eaduaeA4QfYTdUvIaCTaTBMYZlD35UiQw m3NzBexw0u61kEnBll4lbBVFuEqQ==; q=dns/txt; t=1732550489; x=1732813289;" + }, + { + "name": "Return-Path", + "value": "<1axbzsh1c0inx9vvhdkhx9vxwsytxpfuxt98ee-pskhushal=gmail.com@bf01x.hubspotemail.net>" + }, + { + "name": "X-HS-Cid", + "value": "1axe6rm4ft7e61m9x0ng8rdlct79zcgp3ad5ty" + }, + { + "name": "List-Unsubscribe", + "value": ", " + }, + { + "name": "Date", + "value": "Mon, 25 Nov 2024 08:01:29 -0800" + }, + { + "name": "From", + "value": "Steffi Li " + }, + { + "name": "Reply-To", + "value": "chloe.williams@zilliz.com" + }, + { + "name": "To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Message-ID", + "value": "<1732550488892.f6001060-de41-4256-ae9f-3bd110de9463@bf01x.hubspotemail.net>" + }, + { + "name": "Subject", + "value": "\ud83e\udd83 Zilliz Cloud November Update: Much to be Thankful For!" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"----=_Part_52217_1401384494.1732550489030\"" + }, + { + "name": "Precedence", + "value": "bulk" + }, + { + "name": "X-Report-Abuse-To", + "value": "abuse@hubspot.com (see https://policy.hubspot.com/abuse-complaints)" + }, + { + "name": "List-Unsubscribe-Post", + "value": "List-Unsubscribe=One-Click" + }, + { + "name": "Feedback-ID", + "value": "aeolu3y:aiftvzxh:aidf:HubSpot" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 8758, + "data": "RmVhc3QgeW91ciBleWVzIG9uIG91ciBjb21wbGV0ZWx5IHJlZGVzaWduZWQgd2ViIGNvbnNvbGUsIHBsdXMgZXhwYW5kZWQgbWlncmF0aW9uIG9wdGlvbnMgYW5kIG1vcmUuLi4NCg0KSGVsbG8sDQoNCkFzIHdlIGdhdGhlciB0byBjZWxlYnJhdGUgVGhhbmtzZ2l2aW5nIGluIHRoZSBVUywgd2UncmUgZXNwZWNpYWxseSBncmF0ZWZ1bCBmb3Igb3VyIHZpYnJhbnQgY29tbXVuaXR5IGFuZCBleGNpdGVkIHRvIHNoYXJlIG91ciBsYXRlc3QgdXBkYXRlcyEgVGhpcyBOb3ZlbWJlciwgd2UncmUgc2VydmluZyB1cCBhIGNvbXBsZXRlbHkgcmVkZXNpZ25lZCBleHBlcmllbmNlIHRoYXQgd2lsbCB0cmFuc2Zvcm0gaG93IHlvdSBpbnRlcmFjdCB3aXRoIFppbGxpeiBDbG91ZC4gTGV0J3MgZGl2ZSBpbnRvIHdoYXQncyBjb29raW5nOg0KDQrwn46oIEZyZXNoICYgTW9kZXJuIFdlYiBDb25zb2xlOiBXZSd2ZSBjb21wbGV0ZWx5IHJlaW1hZ2luZWQgb3VyIHdlYiBjb25zb2xlIGludGVyZmFjZSwgYnJpbmdpbmcgeW91IGEgbW9yZSBpbnR1aXRpdmUgYW5kIHZpc3VhbGx5IGFwcGVhbGluZyBleHBlcmllbmNlOg0KDQotIFJlZGVzaWduZWQgTmF2aWdhdGlvbjogU3RyZWFtbGluZWQgbWVudSBzdHJ1Y3R1cmUgc2VwYXJhdGluZyBvcmdhbml6YXRpb24gYW5kIHByb2plY3QgbGV2ZWxzIGZvciBjbGVhcmVyIG5hdmlnYXRpb24gcGF0aHMgYW5kIGltcHJvdmVkIGZlYXR1cmUgZGlzY292ZXJhYmlsaXR5Lg0KLSBDYXJkLUJhc2VkIERlc2lnbjogUmVwbGFjZWQgdGFibGUgbGF5b3V0cyB3aXRoIG9yZ2FuaXplZCBjYXJkIHZpZXdzIGZvciBiZXR0ZXIgaW5mb3JtYXRpb24gaGllcmFyY2h5IGFuZCByZWR1Y2VkIHZpc3VhbCBjb21wbGV4aXR5Lg0KLSBDb25zaXN0ZW50IExheW91dCBTeXN0ZW06IFN0YW5kYXJkaXplZCBncmlkIHN5c3RlbSBhY3Jvc3MgYWxsIHBhZ2VzIGZvciBtb3JlIGludHVpdGl2ZSBmZWF0dXJlIGFjY2VzcyBhbmQgcmVkdWNlZCBjb2duaXRpdmUgbG9hZC4NCg0KQ2hlY2sgb3V0IHRoZSBuZXcgbG9vayEg8J-Rhw0KDQpMYXJrMjAyNDExMTQtMTYwNTIwIChodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzFuM3B5ZDBXOHdMS1NSNmxaM21wVzV0SEtfUzd4ekh6Ulc1Z3NOVEY1eExUbTdXOFhOMzRDMTQ5clZIVzJQOU03QzhCWHlxQ1c1dEJDdG40VHJfTFRXNEhoTXIyMnhWcHZNVzN6Y3NfTjUzY3czcFc2TnJHdHo0ZDltajdXN0tUaHhuNFpTdlI4VzZ4anZLQzV2Sk04NFc3cDcyYi0xWlhWbjFXNzN4RE1iNTRuZ1h5VzZZTmtUbjVOTjY0M1c0ckJucm0yRFFyTVBXOGtMLXpNM2dWeFY1VzdyeW53VzU3UzlRRFcxc0RfRjU4Tk4wZFNXMnhnWGhuMkNicnNZVzRxei0ybTNOOWM2Ylcxc2MyQzExZFl2MC1XN0pRdmYyNVBWNFRxVzg4bDNjeTdXbjlGbVc2OUZwc3o0UHMtamJOMTJuUmxGcHdUalFXM1NzZmY4NFE3bWg5VzRaRFRaRjF2SkJfdFc1OGpiOXY5Z1JYOFRWNnQwREMxWThwWFpmOWxXemh6MDQgKQ0KDQrwn6aDIE90aGVyIEhpZ2hsaWdodHMgJiBJbXByb3ZlbWVudHMNCg0KLSBFbmhhbmNlZCBEYXRhIE1pZ3JhdGlvbjogTm93IHN1cHBvcnRpbmcgUWRyYW50IChodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzFuM2dWRFlXOHdMS1NSNmxaM3BaVlh5a1Y1Mm02dGZDTjg5WHJmWmxTTDJ3VnhkWHJIODBXZ3gxVzdQQnhKejZWUEdkQ1ZQWWxENDJDeENmU1czc2ZRUXIxLUJjRkdXM1F6WGxGOG1qM3A2TjM0bXhDNjUybVlKVzRTSE1XSjQ5SFo1bVc1Y05fRDk3TnczZE5XOWx6eWNiNERWS3NoVzhCWkIyTTVsd19Zblc1eU5zSzc4M1ctdmtXNjVfa3d5M3N6MXpHVzRnbE40ZjNWeEtDYlc4eFpja3k0ZHdQRF9XMWJZeGg0N0hKZmtLVzRWam1jZDItX1h0Ulc0R2hIeTY3WXptLTdXN19jaEJsMlRZd3NGVzdLS2dONDczRzlLdlc2alNzNDQybERkM3lOOEJxU3ltdDR2M1ZWWVZkWHY1bXc0bXhWSzc2LTkyX2xMSG1XM1hrdzhCN3JLc04xVnZxTUoyNS1ydmJ5VzFTeDNWUDkwU0o5TGY3WF82NE0wNCApIGFuZCBQaW5lY29uZSBTZXJ2ZXJsZXNzIChodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzFuM2dWRFlXOHdMS1NSNmxaM2tfVzJMWVNEODZ3WGxiTVZmNjRoNDN6N2JmMVczeTZmYmQ1REpfakJXMzNQMlJyNXpwQndOVzh2bEtaaDNQV1Rzc1c1WDc2ZDExTlpycEJXOE5YNjNNNWg5MzQtTjRLeFktdkxDcDdfVzVkd1JScThqZEM3MlczVmRLVFQyZGJzZjBXMVE4S25zM3NydERuVjh3MzBONjNXN0RKVzNtcDBHdjd2ODRZOFc3V2MxWGo1SHd4NUNXOERCTmxsMm5CRl9GVzZaWWJOMjlrcmNyaFc2NTIzYzMxYzh2N1pXM3JyTWtfNGdubDFwTjdiR3JxVzcxWVlmTjQwcjNXM1JUd0JwVzE1bXFOWTk1dFNSN1c2SGJxY3cxcFJIbjdXMkM3Zmw3OHAwNFZaVzNTSy1zajFwalNWX1c4XzZIbVozMENqTVROMktoWUdWbHctRjJOODUyMkg2YllMenNXNXNONEJxNHQyYzNOZjRoNkpkNDA0ICkgZm9yIHNlYW1sZXNzIHRyYW5zaXRpb25zIHRvIFppbGxpeiBDbG91ZC4NCi0gRmxleGlibGUgUmVwbGljYSBNYW5hZ2VtZW50OiBBZGQgb3IgcmVtb3ZlIHlvdXIgcmVwbGljYXMgaW5zdGFudGx5IHdpdGhvdXQgYW55IHNlcnZpY2UgaW50ZXJydXB0aW9uLiBDaGVjayB0aGUgZG9jIChodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzFuM2dWRFlXOHdMS1NSNmxaM21sVzRGSzR2SDNucWhRd1Z0bWQxYjhMbXZSYlc2S1hyX200NFdycy1ON2pqWjc0SncyMVNXMXNNcVJ3N3RLV1JqVzhHOXR3SjhzN0s4V1cxaHJyd04yTU5CdjFXMTJyV1dSOF9oeWtZVzF6TVp4eDRWZjVnRlc0TkhMVzY2ZkJfdHBXNGNDRF9GMUs5R0hIVko0UzlNM0ZxS2JfVzV4d3F6aDh5c0hSVFc4R2ZMNlM4WDY0ZnFXOTk2azlDNkwwOUpxVzVxc2daVDE2Q3Izd1czSG4tekg1TUJXXzlOOEpZX1EwbURkcXhXMmdfUEhuM0taU1R5VzdyazRjVzJEUjFaY1ZtQmJ5dDNKRGdsOVcxZGpTOHI5MzBRMlpXNDdsRDFNMjAtUlZiVzhTdzZtdDZGLXFWNlc4MWozTXM3WjF4d3pWQmNDaGg0cHlrTkxXMnE3Y0NmN18tN3NDVzZRMGMyOTUxbU1meWY2OE1KLW4wNCApIGZvciBtb3JlIGRldGFpbHMuDQotIFJlZGVzaWduZWQgSW52b2ljZSBQYWdlOiBBIGNsZWFyZXIgdmlldyBvZiB5b3VyIHVzYWdlIGFuZCBjb3N0cyB3aXRoIGRvd25sb2FkIG9wdGlvbnMuDQoNCldlJ3JlIHRoYW5rZnVsIGZvciB5b3VyIGNvbnRpbnVlZCB0cnVzdCBpbiBaaWxsaXogQ2xvdWQgYW5kIGNhbid0IHdhaXQgdG8gc2VlIHdoYXQgeW91IGJ1aWxkIHdpdGggdGhlc2UgbmV3IGZlYXR1cmVzISBBcyBhbHdheXMsIHdlJ2QgbG92ZSB0byBoZWFyIHlvdXIgZmVlZGJhY2sgaW4gb3VyIERpc2NvcmQgY29tbXVuaXR5IChodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzBQM3B5ZDBXN2xDZExXNmxaM21EVzRaa3hQMzhicGhfa1c1dHlubGs4ZFpUQ2xWUFdEbWIzd3BxbHNOMm50TDRHczY0aDJXMlQ1TDdGOTh3ZmNQTjRIVHdmS3dta01ZVzdGX1pGODNQeHE0aFcyVE5DNnY2S0toOFFXMUhQM1dmNHZDREszTjFURlMzTFpiM3A2Vzd3OFNMazgxczRmMVcyTXR0d2ozSloyc1lXNzc4LTdXNExZUk5SVzFXWkJUNjJtVlRTTFc3Z0tDX1czTkhZR25XM0d0TFJXMlhaR0ZCVzk2UnF3TjdQUC1yMlc4MWtjd24ySkszWkZONWdfejdQeUNyNWNXMkNQQndTOFNoLVRDVzJNY1lOcDNDZ2dZU1c5Nk4ydkw0QzljM3NXOF9MbTlLOGY5OWRNVzhXN016YzN5eDBReGY4R1RfTkswNCApIC4NCg0KSGFwcHkgVGhhbmtzZ2l2aW5nIGFuZCBIYXBweSBCdWlsZGluZyEg8J-NgQ0KDQpCZXN0IFJlZ2FyZHMsDQoNClN0ZWZmaSBMaQ0KDQpEaXJlY3RvciBvZiBQcm9kdWN0IE1hcmtldGluZywgWmlsbGl6DQoNCkdpdGh1Yl9pY29uIChodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzBQM3B5ZDBXN2xDZExXNmxaM204VzVGR3RaTTNzalBKTVc5NWw4Q2Y4VjhXMWdXN182NFdLM0t2MVc4TjJ4N2x6MUZNTmtfVzk5S0ZrODhzNmZGVFcybDlqMDM2UktjOUZXNW14XzYwMzJ4MnFqVzVsMDFOazc0TVBzV1c1SjBYeHQ2YzZNUDlWMjI2Q0c5MS1IanpXNk54M3Q2NXpzNnFZTjRqVm5abEtLX1hjVzc1UEZLXzZ3US1nYlcxNHNmaEsybTBkWENXN3BjSlFjNy1MOUd3TjZkWjZCdE5kcl9OVzMxWkJkZDExRERyZ1czX3g2Z3M4eTQ1ZDhWTUp2ZzA3R1JCTnlXOFFXcU1MMnpwSjQ5TjJRX0hLYkNWWmdQVzRkdHl0aDZTMzc4NVc0ZDNacmc0aFhyODVXODgxM1ljNU1RejJLZjU1UkctZDA0ICkNCg0KVHdpdHRlci0yMDIzMTAxOC0xMTExMTAgKGh0dHBzOi8vZDJSTmZQMDQubmExLmh1YnNwb3RsaW5rcy5jb20vQ3RjL0RQKzExMy9kMlJOZlAwNC9WWGZ2U0YzeTZacVlXMzkxR1RtN0Z3Y2wtVzNEbDRTbTVuUVpMSk4yYnBjMTQzcHlkMFc3WTgtUFQ2bFozbUxOOTd4cHRtWG1zVjFON21xc2Z6NE5oRHJOMVdncTJ0X0I0S3hXN0Q1Tnk0MnJIaFZDVzZqaF8wbTE2Um1kalc3QmgxNWcyRFJIQl9XNndmdDgxNEp0dnJRVzFDazIwYzNkQ2pWbFc2blI4c1Y5MHhiMjlXMXlWMzFaOFR5MFBmTjZqQ0tmenFSaDV5VzZ0NHRreTVYanNfWVc0UlMyU3YyODVwSjhWS003aFk1M1ZDWmNXNExiS0tnMTVkYlFKVzNDWTlWUjdHVHNNZ1c2elRzR1g1bm5HMjBXOG40ZDB5MWJQNFRqVzM4UnBrWjZIY0xta1czUmpuVFQ0a3lkeHdXNnh0Vmc5NUgzVDU2VzhLY2pYdjZKTlo1NlZIbTVfNDhyZ1Y4M1cyMkxDU3gxbjBYVG5XM0psUlMzM00zSzRuVzNicnFscjlqclpHcmY0SF8yakMwNCApDQoNCkxpbmtlZGluX2ljb24gKGh0dHBzOi8vZDJSTmZQMDQubmExLmh1YnNwb3RsaW5rcy5jb20vQ3RjL0RQKzExMy9kMlJOZlAwNC9WWGZ2U0YzeTZacVlXMzkxR1RtN0Z3Y2wtVzNEbDRTbTVuUVpMSk4yYnBjMTQzcHlkMFc3WTgtUFQ2bFozcDhXMjIxWndCMlFYS1dZVnQwTHByN3oxUFlSVzVZQkN0OThsNzkwTFcycms3Sy03VzRUU3RXMllKTjNsNTdXamc4VzFWQl9DQjhIdEpIelczQko1WlQ3ZmxxTlNWa0wwVjMxYkduR21XMmtuUzdoNnJwS0g2VzgtandsMjYyYnIzVFZYR3AtczNGQkZMelc1UXlZU3g1Vi1EMFhXMjktVmh4M19OU3ZQVzd0c1Y5eTRWY2NReFc3TDBqV1c0NVc5NjFXMzN6eXpnNjJYZ1BoVzZtUkwxcTFQTDZoNlcxdkhsWVE4azdoOXFXOGwwajN4MWdrcTFwVzZLcm5UQjJLa0Y4M1c1MV9RQ2QyVjlKZm1XMnBrbk1LNU55SnRmVzNOZGhxSDRHNWMwQlZmVFlWMDNwUUYzUlczOFZ6eXk3d3l3a0hXMXE5c0NZNWxmZkJYZjhtTHkzWTA0ICkNCg0KaW5zLTIwMjMxMDE4LTExMTExOCAoaHR0cHM6Ly9kMlJOZlAwNC5uYTEuaHVic3BvdGxpbmtzLmNvbS9DdGMvRFArMTEzL2QyUk5mUDA0L1ZYZnZTRjN5NlpxWVczOTFHVG03RndjbC1XM0RsNFNtNW5RWkxKTjJicGMxNDNweWQwVzdZOC1QVDZsWjNwOVc3cjdTX2s3cjIxc21XNG02V3hxMXJUTUoxVzhkdlIzZDM4YzlKcFcxLXBoQjk4ajZEV3lXNVNzcHBqM2hrLTlHVzN4UGxneDdYMmNiQ1czSzBZN1ozREJYMHJXMl8wQ2J2MXZmc2oxVzJGZlFmVDZMdmpiRlc3bnItTE44M3dWRkxWd3l0cS0yTVh3VjVXNlJZTXRyNUp3Ujh0VzRRZm01XzFSLVZDdFZndGg2aDYwX1RYM1czNmRSMVQyOGhmWmRXNC1ZVkoxMlZnR19WVmw3dFNsOFR6QjFsVzNrVi1jYjcxbS04dlc2bWhDNzI2QjRRc25XNXZ3cHljMjRER1BCVzVsWFJLcDN4VzJiNVc1WWsyc1Y0ajgwTE5XM3ZGeEIxMUtIbld3VzM3Rk5xeDJocUJkblc1bHlNcDgyc2hTMHlXNkw1OVljNW55MnRsZHEwVlFZMDQgKQ0KDQpEaXNjb3JkIChodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzBQM3B5ZDBXN2xDZExXNmxaM2t2VzRNSFhKUDhIWnc1elcyZ1F5X3g4TmZGbVNXMmtnUEd3MlhUTmZaTjR2MmZyWXZHVmRLVzV6c0w3czZKZmRudFc0Vy1zNE0xVzh2Nk1XMThKRjJnNFB0eWtYVzdKMXJzdzJtclJyUlc4MWNUMG0xNlFKQ0hXMVZoU2RXM3RoWFdNVzZOY2s2MTFUcjFNd1c2M3hkU3M5MHpKUUhXOGtjbGdjOEJHa0NHVzJERm5jUjF5MGZMdFc4SjhSbjU1WjRmTm1XMk54NThZMzYweGZ2TTRSczcxRGNrWWhXNk03Y0NNNnFjcmxkVzQwWWNkajI3bUpRNVZNODJTSDR6UlotNFc1eF95TU42UEt0NVRWNWsyMEg2am5NLWhXNmZyMER2OHY0dEJMVzE0ekJGZzN6ODJrRmY0dkdaZEgwNCApDQoNCkxpbmtlZGluLTIwMjMxMDE4LTExMTEwMyAoaHR0cHM6Ly9kMlJOZlAwNC5uYTEuaHVic3BvdGxpbmtzLmNvbS9DdGMvRFArMTEzL2QyUk5mUDA0L1ZYZnZTRjN5NlpxWVczOTFHVG03RndjbC1XM0RsNFNtNW5RWkxKTjJicGMxNDNweWQwVzdZOC1QVDZsWjNwWE44WWdTY1dEZ3kzWFc4YzNTUUI5MF9SeVRXOWZSTlJTM3A0LWJWVzk3dmQ5ZzFmeUg3Qlc2dGR4MlY0WEh5SnNXMnE0SHdoNmQ0S0JOVnZCTno4MXQ1VExCVzkzeHQ2ZzRrd3h6bVc3c3ZxX1A3NlhsTk5XMlpkN3FXNEZuREhkVzJOZG1mTjV2LUhSTlc4d3Z0cUcyMFl5MEZXNE5ETTJCOFdHZ21SVzQ0NFQ1SzNmMTIzWE40NHdRSFlHY3N6ZFczeENNM1I3Z1IwNWxXNU5YZnpzMThqY1YtVjNrMGJXMkxTTG43VzFqUEo3YzJQbnNTSlc4NnQtczA0dGROOFBXMVkwOGMyMlNwWjJ6VzFyWmhCYjczbjNITlc3Q1I3V0c3bThKRHpXNFRnNnJkOFhZSDN2VzJuaFdyLTQ3dzkzVlc0MGd6bHo5MlNQcE1mN2hHeG4wMDQgKQ0KDQpaaWxsaXogSW5jLCAyMDEgUmVkd29vZCBTaG9yZXMgUGt3eSwgU3VpdGUgMzMwLCBSZWR3b29kIENpdHksIENBIDk0MDY1LCBVbml0ZWQgU3RhdGVzDQoNClVuc3Vic2NyaWJlIChodHRwczovL2hzLTI0MDU0ODI4LnMuaHVic3BvdGVtYWlsLm5ldC9ocy9wcmVmZXJlbmNlcy1jZW50ZXIvZW4vZGlyZWN0P2RhdGE9VzJuWFMtTjMwaC1CY1cySEZWcXA0Y0tkOXdXM2JyTU5MMzJsSlZuVzN6MUpOVzNDOU5SYlcyQ0Z0Qm0zMnNYQktXNDFWOHlIMUJOeVlHVzJLQktHNDJQTms3a1czajYyUGczemR5SjFXMjE3eWRKMjJUTjBwVzItQmRCcTMycXNjWVcxUXJsOXozNkI3UVZXM2gtQjVfM1hOLVYxVzJ0MDQySDJXSF9oLVczMDZTeTc0M1FmMkZXM0NqMjhCMVZ4bGNjVzNIZEd5ZzMyZy1NNlc0M0YxNW0zTEdZcmJXMnFNeTRTNGNzMnkzVzNOWFdjdDFaZzdKaFc0M1h4eUg0aEtqZzVXM1A1dktiNHREeGhaVzRjbEpWXzJNQ1I4TFczOGNSWTIycjE1Sk1XMnNGdDB2MjUyclc1VzFMRnlXMDJSdjhjM1czRE1LN0Q0M0doanJXMUJ2X2czMnZ5RmxTVzQzcVNRYjNTSFkyX1cyMWxmZjg0ZkxnRGRXMlRoWFc4NDFZN19MVzFfanNaSzM4M3RxSFczZ25tUFgxVnk4LWpXNGtNOU1MMzBLM19KVzFWYlJDLTJUUzdmbVczX3MzUkc0bXEyOTZXM2Q5a0pDM3prdnZ4VzIyV3F6cDQ1TXlXWFcyQ01IcFozMExsU0tXNGt0NlF2M1FWRjNNVzJSal9kVjFMOE43R1czanItZkQycDB0MjFXMnAza3RrMzBEU2pxVzFRM01MdjJIRng1LVc0cnBmTFEyMzFXWWpXM19weC1HNHJmS2NsVzRmdFpTdDFCcVRaRzAmX2hzZW5jPXAyQU5xdHotOHBwOWlUWVBxSkxkV1lYQWxUSmdpTnlqMk4wTkY2cmdXaEtvbWwtU1lMcGxNSFdDb2I0czJUMUp4bXJfLVd2cGZ0d1UyRl9wLVRTclZ6ZjhYUEwyTlJwRXdDb2cmX2hzbWk9MzM1MjU2NTk1ICkNCk1hbmFnZSBwcmVmZXJlbmNlcyAoaHR0cHM6Ly9ocy0yNDA1NDgyOC5zLmh1YnNwb3RlbWFpbC5uZXQvaHMvcHJlZmVyZW5jZXMtY2VudGVyL2VuL3BhZ2U_ZGF0YT1XMm5YUy1OMzBoLUJjVzJIRlZxcDRjS2Q5d1czYnJNTkwzMmxKVm5XM3oxSk5XM0M5TlJiVzJDRnRCbTMyc1hCS1c0MVY4eUgxQk55WUdXMktCS0c0MlBOazdrVzNqNjJQZzN6ZHlKMVcyMTd5ZEoyMlROMHBXMi1CZEJxMzJxc2NZVzFRcmw5ejM2QjdRVlczaC1CNV8zWE4tVjFXMnQwNDJIMldIX2gtVzMwNlN5NzQzUWYyRlczQ2oyOEIxVnhsY2NXM0hkR3lnMzJnLU02VzQzRjE1bTNMR1lyYlcycU15NFM0Y3MyeTNXM05YV2N0MVpnN0poVzQzWHh5SDRoS2pnNVczUDV2S2I0dER4aFpXNGNsSlZfMk1DUjhMVzM4Y1JZMjJyMTVKTVcyc0Z0MHYyNTJyVzVXMUxGeVcwMlJ2OGMzVzNETUs3RDQzR2hqclcxQnZfZzMydnlGbFNXNDNxU1FiM1NIWTJfVzIxbGZmODRmTGdEZFcyVGhYVzg0MVk3X0xXMV9qc1pLMzgzdHFIVzNnbm1QWDFWeTgtalc0a005TUwzMEszX0pXMVZiUkMtMlRTN2ZtVzNfczNSRzRtcTI5NlczZDlrSkMzemt2dnhXMjJXcXpwNDVNeVdYVzJDTUhwWjMwTGxTS1c0a3Q2UXYzUVZGM01XMlJqX2RWMUw4TjdHVzNqci1mRDJwMHQyMVcycDNrdGszMERTanFXMVEzTUx2MkhGeDUtVzRycGZMUTIzMVdZalczX3B4LUc0cmZLY2xXNGZ0WlN0MUJxVFpHMCZfaHNlbmM9cDJBTnF0ei04cHA5aVRZUHFKTGRXWVhBbFRKZ2lOeWoyTjBORjZyZ1doS29tbC1TWUxwbE1IV0NvYjRzMlQxSnhtcl8tV3ZwZnR3VTJGX3AtVFNyVnpmOFhQTDJOUnBFd0NvZyZfaHNtaT0zMzUyNTY1OTUgKQ==" + } + }, + { + "partId": "1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html; charset=\"utf-8\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 39340, + "data": "PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsIC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj48aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4bWxuczp2PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIgbGFuZz0iZW4iPjxoZWFkPg0KICAgIDx0aXRsZT7wn6aDIFppbGxpeiBDbG91ZCBOb3ZlbWJlciBVcGRhdGU6IE11Y2ggdG8gYmUgVGhhbmtmdWwgRm9yITwvdGl0bGU-DQogICAgPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSLwn6aDIFppbGxpeiBDbG91ZCBOb3ZlbWJlciBVcGRhdGU6IE11Y2ggdG8gYmUgVGhhbmtmdWwgRm9yISI-DQogICAgPG1ldGEgbmFtZT0idHdpdHRlcjp0aXRsZSIgY29udGVudD0i8J-mgyBaaWxsaXogQ2xvdWQgTm92ZW1iZXIgVXBkYXRlOiBNdWNoIHRvIGJlIFRoYW5rZnVsIEZvciEiPg0KICAgIA0KICAgIA0KICAgIA0KPG1ldGEgbmFtZT0ieC1hcHBsZS1kaXNhYmxlLW1lc3NhZ2UtcmVmb3JtYXR0aW5nIj4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI-DQo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI-DQogICAgPCEtLVtpZiBndGUgbXNvIDldPg0KICA8eG1sPg0KICAgICAgPG86T2ZmaWNlRG9jdW1lbnRTZXR0aW5ncz4NCiAgICAgIDxvOkFsbG93UE5HLz4NCiAgICAgIDxvOlBpeGVsc1BlckluY2g-OTY8L286UGl4ZWxzUGVySW5jaD4NCiAgICAgIDwvbzpPZmZpY2VEb2N1bWVudFNldHRpbmdzPg0KICA8L3htbD4NCiAgDQogIDxzdHlsZT4NCiAgICB1bCA-IGxpIHsNCiAgICAgIHRleHQtaW5kZW50OiAtMWVtOw0KICAgIH0NCiAgPC9zdHlsZT4NCjwhW2VuZGlmXS0tPg0KPCEtLVtpZiBtc29dPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCiBib2R5LCB0ZCB7Zm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7fQ0KIC5oc2UtYm9keS13cmFwcGVyLXRhYmxlIHtiYWNrZ3JvdW5kLWNvbG9yOiAjRUFGMEY2O30NCjwvc3R5bGU-DQo8IVtlbmRpZl0tLT4NCiAgICANCiAgICAgIA0KICANCiAgICANCiAgPG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBjb250ZW50PSJIdWJTcG90Ij48bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8vMjQwNTQ4MjguaHMtc2l0ZXMuY29tLy10ZW1wb3Jhcnktc2x1Zy01NmE2NDdiYi03MmRlLTQ1YjktYTlkNy1lZTE2NTNkMmVkNWIiPjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9pbmRleCxmb2xsb3ciPjwhLS1baWYgISgobXNvKXwoSUUpKV0-PCEtLSAtLT48c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo2MzlweCl7aW1nLnN0cmV0Y2gtb24tbW9iaWxlLC5oc19yc3NfZW1haWxfZW50cmllc190YWJsZSBpbWcsLmhzLXN0cmV0Y2gtY3RhIC5ocy1jdGEtaW1ne2hlaWdodDphdXRvICFpbXBvcnRhbnQ7d2lkdGg6MTAwJSAhaW1wb3J0YW50fQ0KLmRpc3BsYXlfYmxvY2tfb25fc21hbGxfc2NyZWVuc3tkaXNwbGF5OmJsb2NrfS5oc19wYWRkZWR7cGFkZGluZy1sZWZ0OjIwcHggIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjIwcHggIWltcG9ydGFudH0NCi5ocy1obSx0YWJsZS5ocy1obXtkaXNwbGF5Om5vbmV9LmhzLWhke2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudH10YWJsZS5ocy1oZHtkaXNwbGF5OnRhYmxlICFpbXBvcnRhbnR9DQp9Lm1vei10ZXh0LWh0bWwgLmhzZS1jb2x1bW4tY29udGFpbmVye21heC13aWR0aDo2MDBweCAhaW1wb3J0YW50O3dpZHRoOjYwMHB4ICFpbXBvcnRhbnR9DQoubW96LXRleHQtaHRtbCAuaHNlLWNvbHVtbntkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246dG9wfS5tb3otdGV4dC1odG1sIC5oc2Utc2VjdGlvbiAuaHNlLXNpemUtMTJ7bWF4LXdpZHRoOjYwMHB4ICFpbXBvcnRhbnQ7d2lkdGg6NjAwcHggIWltcG9ydGFudH0NCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo2NDBweCl7LmhzZS1jb2x1bW4tY29udGFpbmVye21heC13aWR0aDo2MDBweCAhaW1wb3J0YW50O3dpZHRoOjYwMHB4ICFpbXBvcnRhbnR9DQouaHNlLWNvbHVtbntkaXNwbGF5OnRhYmxlLWNlbGw7dmVydGljYWwtYWxpZ246dG9wfS5oc2Utc2VjdGlvbiAuaHNlLXNpemUtMTJ7bWF4LXdpZHRoOjYwMHB4ICFpbXBvcnRhbnQ7d2lkdGg6NjAwcHggIWltcG9ydGFudH0NCn1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NjM5cHgpe3VsLGJsb2NrcXVvdGV7bWFyZ2luOjA7cGFkZGluZzoxZW0gNDBweH0NCn1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjYzOXB4KXsuc29jaWFsLW5ldHdvcmstY2VsbHtkaXNwbGF5OmlubGluZS1ibG9ja30gfTwvc3R5bGU-PCEtLTwhW2VuZGlmXS0tPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI-I2hzX2JvZHkgI2hzX2Nvc193cmFwcGVyX21haW4gYVt4LWFwcGxlLWRhdGEtZGV0ZWN0b3JzXXtjb2xvcjppbmhlcml0ICFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmUgIWltcG9ydGFudDtmb250LXNpemU6aW5oZXJpdCAhaW1wb3J0YW50O2ZvbnQtZmFtaWx5OmluaGVyaXQgIWltcG9ydGFudDtmb250LXdlaWdodDppbmhlcml0ICFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6aW5oZXJpdCAhaW1wb3J0YW50fQ0KYXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfXB7bWFyZ2luOjB9Ym9keXstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7bW96LW9zeC1mb250LXNtb290aGluZzpncmF5c2NhbGV9DQp0YWJsZXtib3JkZXItc3BhY2luZzowO21zby10YWJsZS1sc3BhY2U6MDttc28tdGFibGUtcnNwYWNlOjB9dGFibGUsdGR7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfQ0KaW1ney1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpY31wLGEsbGksdGQsYmxvY2txdW90ZXttc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5fTwvc3R5bGU-PC9oZWFkPg0KICA8Ym9keSBpZD0iaHNfYm9keSIgYmdjb2xvcj0iI0VBRjBGNiIgc3R5bGU9Im1hcmdpbjowICFpbXBvcnRhbnQ7IHBhZGRpbmc6MCAhaW1wb3J0YW50OyBmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE1cHg7IGNvbG9yOiMyMzQ5NmQ7IHdvcmQtYnJlYWs6YnJlYWstd29yZCI-DQogICAgPGRpdiBpZD0icHJldmlld190ZXh0IiBzdHlsZT0iZGlzcGxheTpub25lO2ZvbnQtc2l6ZToxcHg7Y29sb3I6I0VBRjBGNjtsaW5lLWhlaWdodDoxcHg7bWF4LWhlaWdodDowcHg7bWF4LXdpZHRoOjBweDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuOyIgbGFuZz0iZW4iPkZlYXN0IHlvdXIgZXllcyBvbiBvdXIgY29tcGxldGVseSByZWRlc2lnbmVkIHdlYiBjb25zb2xlLCBwbHVzIGV4cGFuZGVkIG1pZ3JhdGlvbiBvcHRpb25zIGFuZCBtb3JlLi4uPC9kaXY-DQogICAgDQo8IS0tW2lmIGd0ZSBtc28gOV0-DQo8djpiYWNrZ3JvdW5kIHhtbG5zOnY9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiBmaWxsPSJ0Ij4NCiAgICA8djpmaWxsIHR5cGU9InRpbGUiIHNpemU9IjEwMCUsMTAwJSIgY29sb3I9IiNmZmZmZmYiLz4NCjwvdjpiYWNrZ3JvdW5kPg0KPCFbZW5kaWZdLS0-DQogICAgPGRpdiBjbGFzcz0iaHNlLWJvZHktYmFja2dyb3VuZCIgbGFuZz0iZW4iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNlYWYwZjYiIGJnY29sb3I9IiNlYWYwZjYiPg0KICAgICAgPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgY2xhc3M9ImhzZS1ib2R5LXdyYXBwZXItdGFibGUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9Im1hcmdpbjowOyBwYWRkaW5nOjA7IHdpZHRoOjEwMCUgIWltcG9ydGFudDsgbWluLXdpZHRoOjMyMHB4ICFpbXBvcnRhbnQ7IGhlaWdodDoxMDAlICFpbXBvcnRhbnQiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPg0KICAgICAgICA8dGJvZHk-PHRyPg0KICAgICAgICAgIDx0ZCBjbGFzcz0iaHNlLWJvZHktd3JhcHBlci10ZCIgdmFsaWduPSJ0b3AiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE1cHg7IGNvbG9yOiMyMzQ5NmQ7IHdvcmQtYnJlYWs6YnJlYWstd29yZDsgcGFkZGluZy10b3A6MjBweDsgcGFkZGluZy1ib3R0b206MjBweCI-DQogICAgICAgICAgICA8ZGl2IGlkPSJoc19jb3Nfd3JhcHBlcl9tYWluIiBjbGFzcz0iaHNfY29zX3dyYXBwZXIgaHNfY29zX3dyYXBwZXJfd2lkZ2V0IGhzX2Nvc193cmFwcGVyX3R5cGVfZG5kX2FyZWEiIHN0eWxlPSJjb2xvcjogaW5oZXJpdDsgZm9udC1zaXplOiBpbmhlcml0OyBsaW5lLWhlaWdodDogaW5oZXJpdDsiIGRhdGEtaHMtY29zLWdlbmVyYWwtdHlwZT0id2lkZ2V0IiBkYXRhLWhzLWNvcy10eXBlPSJkbmRfYXJlYSI-ICA8ZGl2IGlkPSJzZWN0aW9uLTAiIGNsYXNzPSJoc2Utc2VjdGlvbiBoc2Utc2VjdGlvbi1maXJzdCIgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHgiPg0KICAgIA0KICAgIA0KICAgIDwhLS1baWYgISgobXNvKXwoSUUpKV0-PCEtLSAtLT4NCiAgICAgIDxkaXYgY2xhc3M9ImhzZS1jb2x1bW4tY29udGFpbmVyIiBzdHlsZT0ibWluLXdpZHRoOjI4MHB4OyBtYXgtd2lkdGg6NjAwcHg7IE1hcmdpbi1sZWZ0OmF1dG87IE1hcmdpbi1yaWdodDphdXRvOyBiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7IHBhZGRpbmctYm90dG9tOjEwcHgiIGJnY29sb3I9IiNmZmZmZmYiPg0KICAgIDwhLS08IVtlbmRpZl0tLT4NCiAgICANCiAgICA8IS0tW2lmIChtc28pfChJRSldPg0KICAgICAgPGRpdiBjbGFzcz0iaHNlLWNvbHVtbi1jb250YWluZXIiIHN0eWxlPSJtaW4td2lkdGg6MjgwcHg7bWF4LXdpZHRoOjYwMHB4O3dpZHRoOjEwMCU7TWFyZ2luLWxlZnQ6YXV0bztNYXJnaW4tcmlnaHQ6YXV0bzsiPg0KICAgICAgPHRhYmxlIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDo2MDBweDsiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgcm9sZT0icHJlc2VudGF0aW9uIiB3aWR0aD0iNjAwIiBiZ2NvbG9yPSIjZmZmZmZmIj4NCiAgICAgIDx0ciBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOyI-DQogICAgPCFbZW5kaWZdLS0-DQogICAgPCEtLVtpZiAobXNvKXwoSUUpXT4NCiAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6NjAwcHg7cGFkZGluZy1ib3R0b206MTBweDsiPg0KPCFbZW5kaWZdLS0-DQo8IS0tW2lmIGd0ZSBtc28gOV0-DQogIDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHdpZHRoPSI2MDAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9IndpZHRoOjYwMHB4Ij4NCjwhW2VuZGlmXS0tPg0KPGRpdiBpZD0iY29sdW1uLTAtMCIgY2xhc3M9ImhzZS1jb2x1bW4gaHNlLXNpemUtMTIiPg0KICA8ZGl2IGlkPSJoc19jb3Nfd3JhcHBlcl9tb2R1bGUtMC0wLTAiIGNsYXNzPSJoc19jb3Nfd3JhcHBlciBoc19jb3Nfd3JhcHBlcl93aWRnZXQgaHNfY29zX3dyYXBwZXJfdHlwZV9tb2R1bGUiIHN0eWxlPSJjb2xvcjogaW5oZXJpdDsgZm9udC1zaXplOiBpbmhlcml0OyBsaW5lLWhlaWdodDogaW5oZXJpdDsiIGRhdGEtaHMtY29zLWdlbmVyYWwtdHlwZT0id2lkZ2V0IiBkYXRhLWhzLWNvcy10eXBlPSJtb2R1bGUiPjx0YWJsZSBjbGFzcz0iaHNlLWltYWdlLXdyYXBwZXIiIHJvbGU9InByZXNlbnRhdGlvbiIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI-DQogIDx0Ym9keT4NCiAgICA8dHI-DQogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgY29sb3I6IzIzNDk2ZDsgd29yZC1icmVhazpicmVhay13b3JkOyB0ZXh0LWFsaWduOmNlbnRlcjsgcGFkZGluZzowcHg7IGZvbnQtc2l6ZTowcHgiPg0KICAgICAgICA8aW1nIGFsdD0iaGVhZGVyIiBzcmM9Imh0dHBzOi8vaHMtMjQwNTQ4MjguZi5odWJzcG90ZW1haWwubmV0L2h1Yi8yNDA1NDgyOC9odWJmcy9oZWFkZXIucG5nP3dpZHRoPTEyMDAmYW1wO3Vwc2NhbGU9dHJ1ZSZhbXA7bmFtZT1oZWFkZXIucG5nIiBzdHlsZT0ib3V0bGluZTpub25lOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgbWF4LXdpZHRoOjEwMCU7IGZvbnQtc2l6ZToxNnB4IiB3aWR0aD0iNjAwIiBhbGlnbj0ibWlkZGxlIj4NCiAgICAgIDwvdGQ-DQogICAgPC90cj4NCiAgPC90Ym9keT4NCjwvdGFibGU-PC9kaXY-DQo8L2Rpdj4NCjwhLS1baWYgZ3RlIG1zbyA5XT48L3RhYmxlPjwhW2VuZGlmXS0tPg0KPCEtLVtpZiAobXNvKXwoSUUpXT48L3RkPjwhW2VuZGlmXS0tPg0KICAgIDwhLS1baWYgKG1zbyl8KElFKV0-PC90cj48L3RhYmxlPjwhW2VuZGlmXS0tPg0KICAgIDwvZGl2Pg0KICAgDQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJtb2R1bGVfMTY4OTg4OTc2NDI5NSIgY2xhc3M9ImhzZS1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7IHBhZGRpbmctcmlnaHQ6MTBweCI-DQogICAgDQogICAgDQogICAgPCEtLVtpZiAhKChtc28pfChJRSkpXT48IS0tIC0tPg0KICAgICAgPGRpdiBjbGFzcz0iaHNlLWNvbHVtbi1jb250YWluZXIiIHN0eWxlPSJtaW4td2lkdGg6MjgwcHg7IG1heC13aWR0aDo2MDBweDsgTWFyZ2luLWxlZnQ6YXV0bzsgTWFyZ2luLXJpZ2h0OmF1dG87IGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZiIgYmdjb2xvcj0iI2ZmZmZmZiI-DQogICAgPCEtLTwhW2VuZGlmXS0tPg0KICAgIA0KICAgIDwhLS1baWYgKG1zbyl8KElFKV0-DQogICAgICA8ZGl2IGNsYXNzPSJoc2UtY29sdW1uLWNvbnRhaW5lciIgc3R5bGU9Im1pbi13aWR0aDoyODBweDttYXgtd2lkdGg6NjAwcHg7d2lkdGg6MTAwJTtNYXJnaW4tbGVmdDphdXRvO01hcmdpbi1yaWdodDphdXRvOyI-DQogICAgICA8dGFibGUgYWxpZ249ImNlbnRlciIgc3R5bGU9IndpZHRoOjYwMHB4OyIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiByb2xlPSJwcmVzZW50YXRpb24iIHdpZHRoPSI2MDAiIGJnY29sb3I9IiNmZmZmZmYiPg0KICAgICAgPHRyIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7Ij4NCiAgICA8IVtlbmRpZl0tLT4NCiAgICA8IS0tW2lmIChtc28pfChJRSldPg0KICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDo2MDBweDsiPg0KPCFbZW5kaWZdLS0-DQo8IS0tW2lmIGd0ZSBtc28gOV0-DQogIDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHdpZHRoPSI2MDAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9IndpZHRoOjYwMHB4Ij4NCjwhW2VuZGlmXS0tPg0KPGRpdiBpZD0ibW9kdWxlXzE2ODk4ODk3NjQyOTVfMCIgY2xhc3M9ImhzZS1jb2x1bW4gaHNlLXNpemUtMTIiPg0KICA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dGJvZHk-PHRyPjx0ZCBjbGFzcz0iaHNfcGFkZGVkIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNXB4OyBjb2xvcjojMjM0OTZkOyB3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7IHBhZGRpbmc6MTBweCAzMHB4Ij48ZGl2IGlkPSJoc19jb3Nfd3JhcHBlcl9tb2R1bGVfMTY4OTg4OTc2NDI1ODMiIGNsYXNzPSJoc19jb3Nfd3JhcHBlciBoc19jb3Nfd3JhcHBlcl93aWRnZXQgaHNfY29zX3dyYXBwZXJfdHlwZV9tb2R1bGUiIHN0eWxlPSJjb2xvcjogaW5oZXJpdDsgZm9udC1zaXplOiBpbmhlcml0OyBsaW5lLWhlaWdodDogaW5oZXJpdDsiIGRhdGEtaHMtY29zLWdlbmVyYWwtdHlwZT0id2lkZ2V0IiBkYXRhLWhzLWNvcy10eXBlPSJtb2R1bGUiPjxkaXYgaWQ9ImhzX2Nvc193cmFwcGVyX21vZHVsZV8xNjg5ODg5NzY0MjU4M18iIGNsYXNzPSJoc19jb3Nfd3JhcHBlciBoc19jb3Nfd3JhcHBlcl93aWRnZXQgaHNfY29zX3dyYXBwZXJfdHlwZV9yaWNoX3RleHQiIHN0eWxlPSJjb2xvcjogaW5oZXJpdDsgZm9udC1zaXplOiBpbmhlcml0OyBsaW5lLWhlaWdodDogaW5oZXJpdDsiIGRhdGEtaHMtY29zLWdlbmVyYWwtdHlwZT0id2lkZ2V0IiBkYXRhLWhzLWNvcy10eXBlPSJyaWNoX3RleHQiPjxwIHN0eWxlPSJtc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5OyBsaW5lLWhlaWdodDoxNzUlIj48c3BhbiBzdHlsZT0iY29sb3I6ICMwMDAwMDA7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICMyMzQ5NmQ7Ij5IZWxsbyw8L3NwYW4-PC9zcGFuPjwvcD4NCjxwIHN0eWxlPSJtc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5OyBsaW5lLWhlaWdodDoxNzUlIj4mbmJzcDs8L3A-DQo8cCBzdHlsZT0ibXNvLWxpbmUtaGVpZ2h0LXJ1bGU6ZXhhY3RseTsgbGluZS1oZWlnaHQ6MTc1JSI-QXMgd2UgZ2F0aGVyIHRvIGNlbGVicmF0ZSBUaGFua3NnaXZpbmcgaW4gdGhlIFVTLCB3ZSdyZSBlc3BlY2lhbGx5IGdyYXRlZnVsIGZvciBvdXIgdmlicmFudCBjb21tdW5pdHkgYW5kIGV4Y2l0ZWQgdG8gc2hhcmUgb3VyIGxhdGVzdCB1cGRhdGVzISBUaGlzIE5vdmVtYmVyLCB3ZSdyZSBzZXJ2aW5nIHVwIGEgY29tcGxldGVseSByZWRlc2lnbmVkIGV4cGVyaWVuY2UgdGhhdCB3aWxsIHRyYW5zZm9ybSBob3cgeW91IGludGVyYWN0IHdpdGggWmlsbGl6IENsb3VkLiBMZXQncyBkaXZlIGludG8gd2hhdCdzIGNvb2tpbmc6PC9wPjwvZGl2PjwvZGl2PjwvdGQ-PC90cj48L3Rib2R5PjwvdGFibGU-DQo8L2Rpdj4NCjwhLS1baWYgZ3RlIG1zbyA5XT48L3RhYmxlPjwhW2VuZGlmXS0tPg0KPCEtLVtpZiAobXNvKXwoSUUpXT48L3RkPjwhW2VuZGlmXS0tPg0KICAgIDwhLS1baWYgKG1zbyl8KElFKV0-PC90cj48L3RhYmxlPjwhW2VuZGlmXS0tPg0KICAgIDwvZGl2Pg0KICAgDQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJtb2R1bGVfMTY4MjU1NzEyOTIzOCIgY2xhc3M9ImhzZS1zZWN0aW9uIiBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7IHBhZGRpbmctcmlnaHQ6MTBweCI-DQogICAgDQogICAgDQogICAgPCEtLVtpZiAhKChtc28pfChJRSkpXT48IS0tIC0tPg0KICAgICAgPGRpdiBjbGFzcz0iaHNlLWNvbHVtbi1jb250YWluZXIiIHN0eWxlPSJtaW4td2lkdGg6MjgwcHg7IG1heC13aWR0aDo2MDBweDsgTWFyZ2luLWxlZnQ6YXV0bzsgTWFyZ2luLXJpZ2h0OmF1dG87IGJhY2tncm91bmQtY29sb3I6I2ZmZmZmZiIgYmdjb2xvcj0iI2ZmZmZmZiI-DQogICAgPCEtLTwhW2VuZGlmXS0tPg0KICAgIA0KICAgIDwhLS1baWYgKG1zbyl8KElFKV0-DQogICAgICA8ZGl2IGNsYXNzPSJoc2UtY29sdW1uLWNvbnRhaW5lciIgc3R5bGU9Im1pbi13aWR0aDoyODBweDttYXgtd2lkdGg6NjAwcHg7d2lkdGg6MTAwJTtNYXJnaW4tbGVmdDphdXRvO01hcmdpbi1yaWdodDphdXRvOyI-DQogICAgICA8dGFibGUgYWxpZ249ImNlbnRlciIgc3R5bGU9IndpZHRoOjYwMHB4OyIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiByb2xlPSJwcmVzZW50YXRpb24iIHdpZHRoPSI2MDAiIGJnY29sb3I9IiNmZmZmZmYiPg0KICAgICAgPHRyIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmY7Ij4NCiAgICA8IVtlbmRpZl0tLT4NCiAgICA8IS0tW2lmIChtc28pfChJRSldPg0KICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDo2MDBweDsiPg0KPCFbZW5kaWZdLS0-DQo8IS0tW2lmIGd0ZSBtc28gOV0-DQogIDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHdpZHRoPSI2MDAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9IndpZHRoOjYwMHB4Ij4NCjwhW2VuZGlmXS0tPg0KPGRpdiBpZD0ibW9kdWxlXzE2ODI1NTcxMjkyMzhfMCIgY2xhc3M9ImhzZS1jb2x1bW4gaHNlLXNpemUtMTIiPg0KICA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIj48dGJvZHk-PHRyPjx0ZCBjbGFzcz0iaHNfcGFkZGVkIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNXB4OyBjb2xvcjojMjM0OTZkOyB3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7IHBhZGRpbmc6MTBweCAzMHB4Ij48ZGl2IGlkPSJoc19jb3Nfd3JhcHBlcl9tb2R1bGVfMTY4MjU1NzEyOTIxMTEiIGNsYXNzPSJoc19jb3Nfd3JhcHBlciBoc19jb3Nfd3JhcHBlcl93aWRnZXQgaHNfY29zX3dyYXBwZXJfdHlwZV9tb2R1bGUiIHN0eWxlPSJjb2xvcjogaW5oZXJpdDsgZm9udC1zaXplOiBpbmhlcml0OyBsaW5lLWhlaWdodDogaW5oZXJpdDsiIGRhdGEtaHMtY29zLWdlbmVyYWwtdHlwZT0id2lkZ2V0IiBkYXRhLWhzLWNvcy10eXBlPSJtb2R1bGUiPjxkaXYgaWQ9ImhzX2Nvc193cmFwcGVyX21vZHVsZV8xNjgyNTU3MTI5MjExMV8iIGNsYXNzPSJoc19jb3Nfd3JhcHBlciBoc19jb3Nfd3JhcHBlcl93aWRnZXQgaHNfY29zX3dyYXBwZXJfdHlwZV9yaWNoX3RleHQiIHN0eWxlPSJjb2xvcjogaW5oZXJpdDsgZm9udC1zaXplOiBpbmhlcml0OyBsaW5lLWhlaWdodDogaW5oZXJpdDsiIGRhdGEtaHMtY29zLWdlbmVyYWwtdHlwZT0id2lkZ2V0IiBkYXRhLWhzLWNvcy10eXBlPSJyaWNoX3RleHQiPjxwIHN0eWxlPSJtc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5OyBsaW5lLWhlaWdodDoxNzUlIj7wn46oIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPkZyZXNoICZhbXA7IE1vZGVybiBXZWIgQ29uc29sZTogPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI-V2UndmUgY29tcGxldGVseSByZWltYWdpbmVkIG91ciB3ZWIgY29uc29sZSBpbnRlcmZhY2UsIGJyaW5naW5nIHlvdSBhIG1vcmUgaW50dWl0aXZlIGFuZCB2aXN1YWxseSBhcHBlYWxpbmcgZXhwZXJpZW5jZTo8L3NwYW4-PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI-PGJyPjwvc3Bhbj48L3A-DQo8dWwgc3R5bGU9Im1zby1saW5lLWhlaWdodC1ydWxlOmV4YWN0bHk7IGxpbmUtaGVpZ2h0OjE3NSUiPg0KPGxpIGFyaWEtbGV2ZWw9IjEiPjxzdHJvbmc-UmVkZXNpZ25lZCBOYXZpZ2F0aW9uOjwvc3Ryb25nPiBTdHJlYW1saW5lZCBtZW51IHN0cnVjdHVyZSBzZXBhcmF0aW5nIG9yZ2FuaXphdGlvbiBhbmQgcHJvamVjdCBsZXZlbHMgZm9yIGNsZWFyZXIgbmF2aWdhdGlvbiBwYXRocyBhbmQgaW1wcm92ZWQgZmVhdHVyZSBkaXNjb3ZlcmFiaWxpdHkuPC9saT4NCjxsaSBhcmlhLWxldmVsPSIxIj48c3Ryb25nPkNhcmQtQmFzZWQgRGVzaWduOjwvc3Ryb25nPiBSZXBsYWNlZCB0YWJsZSBsYXlvdXRzIHdpdGggb3JnYW5pemVkIGNhcmQgdmlld3MgZm9yIGJldHRlciBpbmZvcm1hdGlvbiBoaWVyYXJjaHkgYW5kIHJlZHVjZWQgdmlzdWFsIGNvbXBsZXhpdHkuPC9saT4NCjxsaSBhcmlhLWxldmVsPSIxIj48c3Ryb25nPkNvbnNpc3RlbnQgTGF5b3V0IFN5c3RlbTo8L3N0cm9uZz4gU3RhbmRhcmRpemVkIGdyaWQgc3lzdGVtIGFjcm9zcyBhbGwgcGFnZXMgZm9yIG1vcmUgaW50dWl0aXZlIGZlYXR1cmUgYWNjZXNzIGFuZCByZWR1Y2VkIGNvZ25pdGl2ZSBsb2FkLjwvbGk-DQo8L3VsPg0KPHAgc3R5bGU9Im1zby1saW5lLWhlaWdodC1ydWxlOmV4YWN0bHk7IGxpbmUtaGVpZ2h0OjE3NSUiPkNoZWNrIG91dCB0aGUgbmV3IGxvb2shIPCfkYc8L3A-PC9kaXY-PC9kaXY-PC90ZD48L3RyPjwvdGJvZHk-PC90YWJsZT4NCjwvZGl2Pg0KPCEtLVtpZiBndGUgbXNvIDldPjwvdGFibGU-PCFbZW5kaWZdLS0-DQo8IS0tW2lmIChtc28pfChJRSldPjwvdGQ-PCFbZW5kaWZdLS0-DQogICAgPCEtLVtpZiAobXNvKXwoSUUpXT48L3RyPjwvdGFibGU-PCFbZW5kaWZdLS0-DQogICAgPC9kaXY-DQogICANCiAgPC9kaXY-DQogIDxkaXYgaWQ9Im1vZHVsZV8xNjg5ODg5Mjc4ODg3IiBjbGFzcz0iaHNlLXNlY3Rpb24iIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTBweDsgcGFkZGluZy1yaWdodDoxMHB4Ij4NCiAgICANCiAgICANCiAgICA8IS0tW2lmICEoKG1zbyl8KElFKSldPjwhLS0gLS0-DQogICAgICA8ZGl2IGNsYXNzPSJoc2UtY29sdW1uLWNvbnRhaW5lciIgc3R5bGU9Im1pbi13aWR0aDoyODBweDsgbWF4LXdpZHRoOjYwMHB4OyBNYXJnaW4tbGVmdDphdXRvOyBNYXJnaW4tcmlnaHQ6YXV0bzsgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmIiBiZ2NvbG9yPSIjZmZmZmZmIj4NCiAgICA8IS0tPCFbZW5kaWZdLS0-DQogICAgDQogICAgPCEtLVtpZiAobXNvKXwoSUUpXT4NCiAgICAgIDxkaXYgY2xhc3M9ImhzZS1jb2x1bW4tY29udGFpbmVyIiBzdHlsZT0ibWluLXdpZHRoOjI4MHB4O21heC13aWR0aDo2MDBweDt3aWR0aDoxMDAlO01hcmdpbi1sZWZ0OmF1dG87TWFyZ2luLXJpZ2h0OmF1dG87Ij4NCiAgICAgIDx0YWJsZSBhbGlnbj0iY2VudGVyIiBzdHlsZT0id2lkdGg6NjAwcHg7IiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHJvbGU9InByZXNlbnRhdGlvbiIgd2lkdGg9IjYwMCIgYmdjb2xvcj0iI2ZmZmZmZiI-DQogICAgICA8dHIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2ZmZmZmZjsiPg0KICAgIDwhW2VuZGlmXS0tPg0KICAgIDwhLS1baWYgKG1zbyl8KElFKV0-DQogIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9IndpZHRoOjYwMHB4OyI-DQo8IVtlbmRpZl0tLT4NCjwhLS1baWYgZ3RlIG1zbyA5XT4NCiAgPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgd2lkdGg9IjYwMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0id2lkdGg6NjAwcHgiPg0KPCFbZW5kaWZdLS0-DQo8ZGl2IGlkPSJtb2R1bGVfMTY4OTg4OTI3ODg4N18wIiBjbGFzcz0iaHNlLWNvbHVtbiBoc2Utc2l6ZS0xMiI-DQogIDxkaXYgaWQ9ImhzX2Nvc193cmFwcGVyX21vZHVsZV8xNzMyMzAwMzY4MTc0MSIgY2xhc3M9ImhzX2Nvc193cmFwcGVyIGhzX2Nvc193cmFwcGVyX3dpZGdldCBoc19jb3Nfd3JhcHBlcl90eXBlX21vZHVsZSIgc3R5bGU9ImNvbG9yOiBpbmhlcml0OyBmb250LXNpemU6IGluaGVyaXQ7IGxpbmUtaGVpZ2h0OiBpbmhlcml0OyIgZGF0YS1ocy1jb3MtZ2VuZXJhbC10eXBlPSJ3aWRnZXQiIGRhdGEtaHMtY29zLXR5cGU9Im1vZHVsZSI-PHRhYmxlIGNsYXNzPSJoc2UtaW1hZ2Utd3JhcHBlciIgcm9sZT0icHJlc2VudGF0aW9uIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCiAgICA8dGJvZHk-DQogICAgICA8dHI-DQogICAgICAgIDx0ZCBjbGFzcz0iaHNfcGFkZGVkIiBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBjb2xvcjojMjM0OTZkOyB3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7IHRleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOjEwcHggMjBweDsgZm9udC1zaXplOjBweCI-DQogICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9kMlJOZlAwNC5uYTEuaHVic3BvdGxpbmtzLmNvbS9DdGMvRFArMTEzL2QyUk5mUDA0L1ZYZnZTRjN5NlpxWVczOTFHVG03RndjbC1XM0RsNFNtNW5RWkxKTjJicGMxbjNxbjlnVzh3TEtTUjZsWjNtWVZxalBLczYzOEpzNFcxUkRuajU0V3A5V0xXNFpGNVRLNG1Yai15VzdENjhkeDZmdGJuWE42MnhxTDJ6TVNkMFc0M2hYeUsyUEdSVjZON2M2WnIzaC1tSE1XNnpZRDY5OTVXRFZSVzdGUnc4azgwTHRDSFZ5NENWSDJRNDNxd1c2NFQ4UEIybFc1cldXOF9OVHRSOWd4eFJkVzdweXpycTF4NmdfVFcxY21aQ183Njl4d3ZXM252UEpyNTYzdnB0VzYwd2dQajdwTDJSR1cxaGdUelY0eWNCNm1XNHpua2tXOEIyakJKVzZTZE5nMDNXTVBqeVcxYmxZMkc4WUJZWHhXNWZaNHRENmQtTm01VzhNOFI5bjNnMnlKYlc1c0I5LU0xek5aODJXMWNTTmdLNDgtTGxIVzR5eUROczJ2RzBrQ042UlhkODVGaDlnalc3OUctNWozWmxiVkdXNnlUcGxZOWxfenZyZjVQSkxmZzA0IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiMwMGE0YmQiIGRhdGEtaHMtbGluay1pZD0iMCI-DQogICAgICAgICAgICA8aW1nIGFsdD0iTGFyazIwMjQxMTE0LTE2MDUyMCIgc3JjPSJodHRwczovLzI0MDU0ODI4LmZzMS5odWJzcG90dXNlcmNvbnRlbnQtbmExLm5ldC9odWIvMjQwNTQ4MjgvaHViZnMvY3VzdG9tLXZpZGVvLXRodW1ibmFpbHMvTGFyazIwMjQxMTE0LTE2MDUyMC10aHVtYi0xLmpwZWc_dD0xNzMyMzAwNzkxODEyJmFtcDt3aWR0aD01MDAmYW1wO2NvbXBvc2VUeXBlPXBsYXlfYnV0dG9uJmFtcDtvdmVybGF5Q29sb3I9JTIzMmY0MjU0JmFtcDtvdmVybGF5U2NhbGU9MC4zJmFtcDtuYW1lPUxhcmsyMDI0MTExNC0xNjA1MjAtdGh1bWItMS5qcGVnIiBzdHlsZT0ib3V0bGluZTpub25lOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgYm9yZGVyOm5vbmU7IG1heC13aWR0aDoxMDAlOyBmb250LXNpemU6MTZweCIgd2lkdGg9IjUwMCIgYWxpZ249Im1pZGRsZSI-DQogICAgICAgICAgPC9hPg0KICAgICAgICA8L3RkPg0KICAgICAgPC90cj4NCiAgICA8L3Rib2R5Pg0KICA8L3RhYmxlPjwvZGl2Pg0KPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI-PHRib2R5Pjx0cj48dGQgY2xhc3M9ImhzX3BhZGRlZCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTVweDsgY29sb3I6IzIzNDk2ZDsgd29yZC1icmVhazpicmVhay13b3JkOyBwYWRkaW5nOjEwcHggMzBweCI-PGRpdiBpZD0iaHNfY29zX3dyYXBwZXJfbW9kdWxlXzE2ODk4ODkyNzg4NjAxIiBjbGFzcz0iaHNfY29zX3dyYXBwZXIgaHNfY29zX3dyYXBwZXJfd2lkZ2V0IGhzX2Nvc193cmFwcGVyX3R5cGVfbW9kdWxlIiBzdHlsZT0iY29sb3I6IGluaGVyaXQ7IGZvbnQtc2l6ZTogaW5oZXJpdDsgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IiBkYXRhLWhzLWNvcy1nZW5lcmFsLXR5cGU9IndpZGdldCIgZGF0YS1ocy1jb3MtdHlwZT0ibW9kdWxlIj48ZGl2IGlkPSJoc19jb3Nfd3JhcHBlcl9tb2R1bGVfMTY4OTg4OTI3ODg2MDFfIiBjbGFzcz0iaHNfY29zX3dyYXBwZXIgaHNfY29zX3dyYXBwZXJfd2lkZ2V0IGhzX2Nvc193cmFwcGVyX3R5cGVfcmljaF90ZXh0IiBzdHlsZT0iY29sb3I6IGluaGVyaXQ7IGZvbnQtc2l6ZTogaW5oZXJpdDsgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IiBkYXRhLWhzLWNvcy1nZW5lcmFsLXR5cGU9IndpZGdldCIgZGF0YS1ocy1jb3MtdHlwZT0icmljaF90ZXh0Ij48cCBzdHlsZT0ibXNvLWxpbmUtaGVpZ2h0LXJ1bGU6ZXhhY3RseTsgbGluZS1oZWlnaHQ6MTc1JSI-PHN0cm9uZz7wn6aDIE90aGVyIEhpZ2hsaWdodHMgJmFtcDsgSW1wcm92ZW1lbnRzPC9zdHJvbmc-PC9wPg0KPHVsIHN0eWxlPSJtc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5OyBsaW5lLWhlaWdodDoxNzUlIj4NCjxsaSBhcmlhLWxldmVsPSIxIj48c3Ryb25nPkVuaGFuY2VkIERhdGEgTWlncmF0aW9uOjwvc3Ryb25nPiBOb3cgc3VwcG9ydGluZyA8YSBocmVmPSJodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzFuM2hLQmJXOHdMS1NSNmxaM3BkVzIydEdISDF0ZnlZWVc2Z203RG41eFZGbHBOMTNULVJYUlFUU0RXNjU1ZEZxNWRmVGQ5TjQ3eWZCZ1RZcHg4VzFxVG1WWThtMXBtNVcyRnN0ZncxSGxQV2tXNHgtVEwxNWw2QmZSVzVLSnNRODFyTEtDR1ZyR0ZKdDdaYnpCV1c1MDdWbUwyckN0VmpXMzdQbXdNNjY0eC1aTUJUNEs2eTQxSzZXMkNWYnNkNGpIVGtwVzctTlo3TjliVHgzNVc1d0tER003UzJXWjdWRERud3M3UmhHNlBXNm1MZjQxNGhLS19MVzJKQzZYcTgtZlRTcFcxbnRGUWY4SnlramJONUhkOFZxWm5yQ0xXNUh5Zm53OTBSelZwTjFmYzVteGdtUXduTVd0SzVWX1kxakxXNEJtbnpMN1J5UHRKVzNSazBneThaelk5Y1c1Y1hYOUwyWHlRanFONFh2UFlmc2RTNG5mNGRKbnBiMDQiIHJlbD0ibm9vcGVuZXIiIHN0eWxlPSJjb2xvcjojMzY3MGYyIiBkYXRhLWhzLWxpbmstaWQ9IjAiIHRhcmdldD0iX2JsYW5rIj5RZHJhbnQ8L2E-IGFuZCA8YSBocmVmPSJodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzFuM2hLQmJXOHdMS1NSNmxaM20xTjZyX21ZMFREVGgyVzhsZnNjejkzX1psUlc2VmtzSDM4S1FSQ0NXMjc4X1BYN3NtMjlZVzI1UHZ4ZzJCQmIyRlc5OWxIeXA0X3oxdGdWZzdTZ1I4UU10ZGRXOGxyZnZyMWJLa3hWVzNtamhtbTJYRmY5OVc3M1NGbDE2NmtDbGNXNDBtOFQzNnZDQkNwVzZLUlp4QjMtcmI3N1c3NGRNeHk0M3FTVDdXNVBTakRoN18zOGxSVzNyYmduNDVSQ1p3Tlc1bTBxaHQ1ZFNqbDdXNTBSTnpxM1RNbDdKVzYtc2dTWjhHXzZ6OVc2OXhWckY4NnI3ZlpXMzZ4dHhHNlc1WFR2Vzg1WnNCUTdTWmx2WFc4WTduLXcyOE02dnBXOG1OeXZEMThLY3FZVzFtZDBaMjhkak1yV1ZMSlAtUzdRcGtfNVcyNzZRcUI4S0dMdk1XMXpzV0hQM1J2SExIVzFOdmpMNDhaLTR2VGY3bDMyXzIwNCIgcmVsPSJub29wZW5lciIgc3R5bGU9ImNvbG9yOiMzNjcwZjIiIGRhdGEtaHMtbGluay1pZD0iMCIgdGFyZ2V0PSJfYmxhbmsiPlBpbmVjb25lIFNlcnZlcmxlc3M8L2E-IGZvciBzZWFtbGVzcyB0cmFuc2l0aW9ucyB0byBaaWxsaXogQ2xvdWQuPC9saT4NCjxsaSBhcmlhLWxldmVsPSIxIj48c3Ryb25nPkZsZXhpYmxlIFJlcGxpY2EgTWFuYWdlbWVudDo8L3N0cm9uZz4gQWRkIG9yIHJlbW92ZSB5b3VyIHJlcGxpY2FzIGluc3RhbnRseSB3aXRob3V0IGFueSBzZXJ2aWNlIGludGVycnVwdGlvbi4gQ2hlY2sgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZDJSTmZQMDQubmExLmh1YnNwb3RsaW5rcy5jb20vQ3RjL0RQKzExMy9kMlJOZlAwNC9WWGZ2U0YzeTZacVlXMzkxR1RtN0Z3Y2wtVzNEbDRTbTVuUVpMSk4yYnBjMW4zaEtCYlc4d0xLU1I2bFoza1JXNDIwd3hUMXdmeHNOVzZyZk1XeTctM0NIcVc2TDVTaFI0V190cl9WeW1HTHE5NFREUlFXNk52NHBGOFk0akpsVzJNTFZaTDJZTmwzUVZjcHEwejcxS0NjN1c0Rjc5d3I1Ml9HQllXOWxqODRyN216bks0VzMzRkJjeDc2c2RwdFc4bEotWXM0bXFSUmpXN3d3a1dxN3EzUHpnVzEySFQwQjRUYzAwUU43bHZNS0YxeWZwM1c4RFh6WGozRkpSQ2hXNHdSX2JHMWcxcVYzVzdjREd5TjdCOFktVFc1MGJYNG00eXk0Q0tONlRnY0pXa2JkNUhXNkhOZ2tsNXNIVGxLVzJSYzM5eThXTDczcVc3N2ZoNnE1dGpMd1lXOThzUl9fMVl0SERkVzFtSkcxeTdXV3JOOU41dEZUY1ZSM2RXc1c0d2tEVmM1ajk4Tl9XNXN5VDVuMm5QOEN4VzRieGo0ODNzdllQVmY5bHFkQzAwNCIgcmVsPSJub29wZW5lciIgc3R5bGU9ImNvbG9yOiMzNjcwZjIiIGRhdGEtaHMtbGluay1pZD0iMCIgdGFyZ2V0PSJfYmxhbmsiPmRvYzwvYT4gZm9yIG1vcmUgZGV0YWlscy48L2xpPg0KPGxpIGFyaWEtbGV2ZWw9IjEiPjxzdHJvbmc-UmVkZXNpZ25lZCBJbnZvaWNlIFBhZ2U6PC9zdHJvbmc-IEEgY2xlYXJlciB2aWV3IG9mIHlvdXIgdXNhZ2UgYW5kIGNvc3RzIHdpdGggZG93bmxvYWQgb3B0aW9ucy48L2xpPg0KPC91bD48L2Rpdj48L2Rpdj48L3RkPjwvdHI-PC90Ym9keT48L3RhYmxlPg0KPC9kaXY-DQo8IS0tW2lmIGd0ZSBtc28gOV0-PC90YWJsZT48IVtlbmRpZl0tLT4NCjwhLS1baWYgKG1zbyl8KElFKV0-PC90ZD48IVtlbmRpZl0tLT4NCiAgICA8IS0tW2lmIChtc28pfChJRSldPjwvdHI-PC90YWJsZT48IVtlbmRpZl0tLT4NCiAgICA8L2Rpdj4NCiAgIA0KICA8L2Rpdj4NCiAgPGRpdiBpZD0ibW9kdWxlXzE2ODI1NTc2MTYyODciIGNsYXNzPSJoc2Utc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHgiPg0KICAgIA0KICAgIA0KICAgIDwhLS1baWYgISgobXNvKXwoSUUpKV0-PCEtLSAtLT4NCiAgICAgIDxkaXYgY2xhc3M9ImhzZS1jb2x1bW4tY29udGFpbmVyIiBzdHlsZT0ibWluLXdpZHRoOjI4MHB4OyBtYXgtd2lkdGg6NjAwcHg7IE1hcmdpbi1sZWZ0OmF1dG87IE1hcmdpbi1yaWdodDphdXRvOyBiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYiIGJnY29sb3I9IiNmZmZmZmYiPg0KICAgIDwhLS08IVtlbmRpZl0tLT4NCiAgICANCiAgICA8IS0tW2lmIChtc28pfChJRSldPg0KICAgICAgPGRpdiBjbGFzcz0iaHNlLWNvbHVtbi1jb250YWluZXIiIHN0eWxlPSJtaW4td2lkdGg6MjgwcHg7bWF4LXdpZHRoOjYwMHB4O3dpZHRoOjEwMCU7TWFyZ2luLWxlZnQ6YXV0bztNYXJnaW4tcmlnaHQ6YXV0bzsiPg0KICAgICAgPHRhYmxlIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDo2MDBweDsiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgcm9sZT0icHJlc2VudGF0aW9uIiB3aWR0aD0iNjAwIiBiZ2NvbG9yPSIjZmZmZmZmIj4NCiAgICAgIDx0ciBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOyI-DQogICAgPCFbZW5kaWZdLS0-DQogICAgPCEtLVtpZiAobXNvKXwoSUUpXT4NCiAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6NjAwcHg7Ij4NCjwhW2VuZGlmXS0tPg0KPCEtLVtpZiBndGUgbXNvIDldPg0KICA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB3aWR0aD0iNjAwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJ3aWR0aDo2MDBweCI-DQo8IVtlbmRpZl0tLT4NCjxkaXYgaWQ9Im1vZHVsZV8xNjgyNTU3NjE2Mjg3XzAiIGNsYXNzPSJoc2UtY29sdW1uIGhzZS1zaXplLTEyIj4NCiAgPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI-PHRib2R5Pjx0cj48dGQgY2xhc3M9ImhzX3BhZGRlZCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTVweDsgY29sb3I6IzIzNDk2ZDsgd29yZC1icmVhazpicmVhay13b3JkOyBwYWRkaW5nOjEwcHggMzBweCI-PGRpdiBpZD0iaHNfY29zX3dyYXBwZXJfbW9kdWxlXzE2ODI1NTc2MTYyNzQzIiBjbGFzcz0iaHNfY29zX3dyYXBwZXIgaHNfY29zX3dyYXBwZXJfd2lkZ2V0IGhzX2Nvc193cmFwcGVyX3R5cGVfbW9kdWxlIiBzdHlsZT0iY29sb3I6IGluaGVyaXQ7IGZvbnQtc2l6ZTogaW5oZXJpdDsgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IiBkYXRhLWhzLWNvcy1nZW5lcmFsLXR5cGU9IndpZGdldCIgZGF0YS1ocy1jb3MtdHlwZT0ibW9kdWxlIj48ZGl2IGlkPSJoc19jb3Nfd3JhcHBlcl9tb2R1bGVfMTY4MjU1NzYxNjI3NDNfIiBjbGFzcz0iaHNfY29zX3dyYXBwZXIgaHNfY29zX3dyYXBwZXJfd2lkZ2V0IGhzX2Nvc193cmFwcGVyX3R5cGVfcmljaF90ZXh0IiBzdHlsZT0iY29sb3I6IGluaGVyaXQ7IGZvbnQtc2l6ZTogaW5oZXJpdDsgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IiBkYXRhLWhzLWNvcy1nZW5lcmFsLXR5cGU9IndpZGdldCIgZGF0YS1ocy1jb3MtdHlwZT0icmljaF90ZXh0Ij48ZGl2IHN0eWxlPSJtc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5OyBsaW5lLWhlaWdodDoxNzUlIj4NCjxkaXYgc3R5bGU9Im1zby1saW5lLWhlaWdodC1ydWxlOmV4YWN0bHk7IGxpbmUtaGVpZ2h0OjE3NSUiPg0KPHAgc3R5bGU9Im1zby1saW5lLWhlaWdodC1ydWxlOmV4YWN0bHk7IGxpbmUtaGVpZ2h0OjE3NSUiPldlJ3JlIHRoYW5rZnVsIGZvciB5b3VyIGNvbnRpbnVlZCB0cnVzdCBpbiBaaWxsaXogQ2xvdWQgYW5kIGNhbid0IHdhaXQgdG8gc2VlIHdoYXQgeW91IGJ1aWxkIHdpdGggdGhlc2UgbmV3IGZlYXR1cmVzISBBcyBhbHdheXMsIHdlJ2QgbG92ZSB0byBoZWFyIHlvdXIgZmVlZGJhY2sgaW4gb3VyIDxhIGhyZWY9Imh0dHBzOi8vZDJSTmZQMDQubmExLmh1YnNwb3RsaW5rcy5jb20vQ3RjL0RQKzExMy9kMlJOZlAwNC9WWGZ2U0YzeTZacVlXMzkxR1RtN0Z3Y2wtVzNEbDRTbTVuUVpMSk4yYnBjMFAzcW45Z1c3bENkTFc2bFozbHhXNGd6dks3NF95NWR0VzR2WWg0UTNMTE5KM1c5N1BGR1c2cUJqNTVXM3NNakpaNzNSazJ3VzRNUHdybjVzQzIybFc1dnZjZ2gzODVNNTRXMzhoNFozOF9iY0h2VzNTWU5qSjhyUlRWa043Qll2NEZNeWxoVlc2QjlNcjA3U2t0RjNXN2JIcTg2NjRoSE1oVzd6OTZXWTJ0VlJ4UE44WFI2d2p4dnMtcVc3cGJQbUw0dEtwcDFWOWM2a18xWDgwRnhWU1Y2TUs4V1JLSjBWbXNNa0o3eXZ6VnhXN0tUdlluNzlmMVBRVzJqLWpxazJqRlBsbU43R1FtN05DV3p6NlczTldXTmY3ckQxQlRWZ0xNS0w0Yk4wMzFXN1NtSjd5N2c4RnhmVzkwVm10SzVNMnQyaGYzakZTYjAwNCIgc3R5bGU9ImNvbG9yOiMzNjcwZjIiIGRhdGEtaHMtbGluay1pZD0iMCIgdGFyZ2V0PSJfYmxhbmsiPkRpc2NvcmQgY29tbXVuaXR5PC9hPi48L3A-DQo8cCBzdHlsZT0ibXNvLWxpbmUtaGVpZ2h0LXJ1bGU6ZXhhY3RseTsgbGluZS1oZWlnaHQ6MTc1JSI-Jm5ic3A7PC9wPg0KPHAgc3R5bGU9Im1zby1saW5lLWhlaWdodC1ydWxlOmV4YWN0bHk7IGxpbmUtaGVpZ2h0OjE3NSUiPkhhcHB5IFRoYW5rc2dpdmluZyBhbmQgSGFwcHkgQnVpbGRpbmchIPCfjYE8L3A-DQo8L2Rpdj4NCjx1bCBzdHlsZT0ibXNvLWxpbmUtaGVpZ2h0LXJ1bGU6ZXhhY3RseTsgbGluZS1oZWlnaHQ6MTc1JSI-PC91bD4NCjwvZGl2Pg0KPHVsIHN0eWxlPSJtc28tbGluZS1oZWlnaHQtcnVsZTpleGFjdGx5OyBsaW5lLWhlaWdodDoxNzUlIj48L3VsPjwvZGl2PjwvZGl2PjwvdGQ-PC90cj48L3Rib2R5PjwvdGFibGU-DQo8L2Rpdj4NCjwhLS1baWYgZ3RlIG1zbyA5XT48L3RhYmxlPjwhW2VuZGlmXS0tPg0KPCEtLVtpZiAobXNvKXwoSUUpXT48L3RkPjwhW2VuZGlmXS0tPg0KICAgIDwhLS1baWYgKG1zbyl8KElFKV0-PC90cj48L3RhYmxlPjwhW2VuZGlmXS0tPg0KICAgIDwvZGl2Pg0KICAgDQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJzZWN0aW9uLTIiIGNsYXNzPSJoc2Utc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHgiPg0KICAgIA0KICAgIA0KICAgIDwhLS1baWYgISgobXNvKXwoSUUpKV0-PCEtLSAtLT4NCiAgICAgIDxkaXYgY2xhc3M9ImhzZS1jb2x1bW4tY29udGFpbmVyIiBzdHlsZT0ibWluLXdpZHRoOjI4MHB4OyBtYXgtd2lkdGg6NjAwcHg7IE1hcmdpbi1sZWZ0OmF1dG87IE1hcmdpbi1yaWdodDphdXRvOyBiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYiIGJnY29sb3I9IiNmZmZmZmYiPg0KICAgIDwhLS08IVtlbmRpZl0tLT4NCiAgICANCiAgICA8IS0tW2lmIChtc28pfChJRSldPg0KICAgICAgPGRpdiBjbGFzcz0iaHNlLWNvbHVtbi1jb250YWluZXIiIHN0eWxlPSJtaW4td2lkdGg6MjgwcHg7bWF4LXdpZHRoOjYwMHB4O3dpZHRoOjEwMCU7TWFyZ2luLWxlZnQ6YXV0bztNYXJnaW4tcmlnaHQ6YXV0bzsiPg0KICAgICAgPHRhYmxlIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDo2MDBweDsiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgcm9sZT0icHJlc2VudGF0aW9uIiB3aWR0aD0iNjAwIiBiZ2NvbG9yPSIjZmZmZmZmIj4NCiAgICAgIDx0ciBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOyI-DQogICAgPCFbZW5kaWZdLS0-DQogICAgPCEtLVtpZiAobXNvKXwoSUUpXT4NCiAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6NjAwcHg7Ij4NCjwhW2VuZGlmXS0tPg0KPCEtLVtpZiBndGUgbXNvIDldPg0KICA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB3aWR0aD0iNjAwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJ3aWR0aDo2MDBweCI-DQo8IVtlbmRpZl0tLT4NCjxkaXYgaWQ9ImNvbHVtbi0yLTAiIGNsYXNzPSJoc2UtY29sdW1uIGhzZS1zaXplLTEyIj4NCiAgPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI-PHRib2R5Pjx0cj48dGQgY2xhc3M9ImhzX3BhZGRlZCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTVweDsgY29sb3I6IzIzNDk2ZDsgd29yZC1icmVhazpicmVhay13b3JkOyBwYWRkaW5nOjEwcHggMzBweCI-PGRpdiBpZD0iaHNfY29zX3dyYXBwZXJfbW9kdWxlLTItMC0yIiBjbGFzcz0iaHNfY29zX3dyYXBwZXIgaHNfY29zX3dyYXBwZXJfd2lkZ2V0IGhzX2Nvc193cmFwcGVyX3R5cGVfbW9kdWxlIiBzdHlsZT0iY29sb3I6IGluaGVyaXQ7IGZvbnQtc2l6ZTogaW5oZXJpdDsgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IiBkYXRhLWhzLWNvcy1nZW5lcmFsLXR5cGU9IndpZGdldCIgZGF0YS1ocy1jb3MtdHlwZT0ibW9kdWxlIj48ZGl2IGlkPSJoc19jb3Nfd3JhcHBlcl9tb2R1bGUtMi0wLTJfIiBjbGFzcz0iaHNfY29zX3dyYXBwZXIgaHNfY29zX3dyYXBwZXJfd2lkZ2V0IGhzX2Nvc193cmFwcGVyX3R5cGVfcmljaF90ZXh0IiBzdHlsZT0iY29sb3I6IGluaGVyaXQ7IGZvbnQtc2l6ZTogaW5oZXJpdDsgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IiBkYXRhLWhzLWNvcy1nZW5lcmFsLXR5cGU9IndpZGdldCIgZGF0YS1ocy1jb3MtdHlwZT0icmljaF90ZXh0Ij48cCBzdHlsZT0ibXNvLWxpbmUtaGVpZ2h0LXJ1bGU6ZXhhY3RseTsgbGluZS1oZWlnaHQ6MTc1JSI-QmVzdCBSZWdhcmRzLDxicj5TdGVmZmkgTGk8YnI-RGlyZWN0b3Igb2YgUHJvZHVjdCBNYXJrZXRpbmcsIFppbGxpejxicj48YnI-PC9wPjwvZGl2PjwvZGl2PjwvdGQ-PC90cj48L3Rib2R5PjwvdGFibGU-DQo8L2Rpdj4NCjwhLS1baWYgZ3RlIG1zbyA5XT48L3RhYmxlPjwhW2VuZGlmXS0tPg0KPCEtLVtpZiAobXNvKXwoSUUpXT48L3RkPjwhW2VuZGlmXS0tPg0KICAgIDwhLS1baWYgKG1zbyl8KElFKV0-PC90cj48L3RhYmxlPjwhW2VuZGlmXS0tPg0KICAgIDwvZGl2Pg0KICAgDQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJzZWN0aW9uLTMiIGNsYXNzPSJoc2Utc2VjdGlvbiIgc3R5bGU9InBhZGRpbmctbGVmdDoxMHB4OyBwYWRkaW5nLXJpZ2h0OjEwcHgiPg0KICAgIA0KICAgIA0KICAgIDwhLS1baWYgISgobXNvKXwoSUUpKV0-PCEtLSAtLT4NCiAgICAgIDxkaXYgY2xhc3M9ImhzZS1jb2x1bW4tY29udGFpbmVyIiBzdHlsZT0ibWluLXdpZHRoOjI4MHB4OyBtYXgtd2lkdGg6NjAwcHg7IE1hcmdpbi1sZWZ0OmF1dG87IE1hcmdpbi1yaWdodDphdXRvOyBiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYiIGJnY29sb3I9IiNmZmZmZmYiPg0KICAgIDwhLS08IVtlbmRpZl0tLT4NCiAgICANCiAgICA8IS0tW2lmIChtc28pfChJRSldPg0KICAgICAgPGRpdiBjbGFzcz0iaHNlLWNvbHVtbi1jb250YWluZXIiIHN0eWxlPSJtaW4td2lkdGg6MjgwcHg7bWF4LXdpZHRoOjYwMHB4O3dpZHRoOjEwMCU7TWFyZ2luLWxlZnQ6YXV0bztNYXJnaW4tcmlnaHQ6YXV0bzsiPg0KICAgICAgPHRhYmxlIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDo2MDBweDsiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgcm9sZT0icHJlc2VudGF0aW9uIiB3aWR0aD0iNjAwIiBiZ2NvbG9yPSIjZmZmZmZmIj4NCiAgICAgIDx0ciBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOyI-DQogICAgPCFbZW5kaWZdLS0-DQogICAgPCEtLVtpZiAobXNvKXwoSUUpXT4NCiAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0id2lkdGg6NjAwcHg7Ij4NCjwhW2VuZGlmXS0tPg0KPCEtLVtpZiBndGUgbXNvIDldPg0KICA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB3aWR0aD0iNjAwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJ3aWR0aDo2MDBweCI-DQo8IVtlbmRpZl0tLT4NCjxkaXYgaWQ9ImNvbHVtbi0zLTAiIGNsYXNzPSJoc2UtY29sdW1uIGhzZS1zaXplLTEyIj4NCiAgPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI-PHRib2R5Pjx0cj48dGQgY2xhc3M9ImhzX3BhZGRlZCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTVweDsgY29sb3I6IzIzNDk2ZDsgd29yZC1icmVhazpicmVhay13b3JkOyBwYWRkaW5nOjEwcHggMjBweCI-PGRpdiBpZD0iaHNfY29zX3dyYXBwZXJfbW9kdWxlLTMtMC0wIiBjbGFzcz0iaHNfY29zX3dyYXBwZXIgaHNfY29zX3dyYXBwZXJfd2lkZ2V0IGhzX2Nvc193cmFwcGVyX3R5cGVfbW9kdWxlIiBzdHlsZT0iY29sb3I6IGluaGVyaXQ7IGZvbnQtc2l6ZTogaW5oZXJpdDsgbGluZS1oZWlnaHQ6IGluaGVyaXQ7IiBkYXRhLWhzLWNvcy1nZW5lcmFsLXR5cGU9IndpZGdldCIgZGF0YS1ocy1jb3MtdHlwZT0ibW9kdWxlIj48dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0id2lkdGg6IGF1dG87IHRleHQtYWxpZ246IGNlbnRlcjsiIGNsYXNzPSJoc19jb3Nfd3JhcHBlcl90eXBlX3NvY2lhbF9tb2R1bGUiPg0KICA8dGJvZHk-DQogICAgPHRyIGFsaWduPSJjZW50ZXIiPg0KICAgICAgPHRkIGNsYXNzPSJzb2NpYWwtbmV0d29yay1jZWxsIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNXB4OyBjb2xvcjojMjM0OTZkOyB3b3JkLWJyZWFrOmJyZWFrLXdvcmQiPg0KICAgICAgICA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0id2lkdGg6IGF1dG87IHRleHQtYWxpZ246IGNlbnRlcjsiIGNsYXNzPSJoc19jb3Nfd3JhcHBlcl90eXBlX3NvY2lhbF9tb2R1bGVfc2luZ2xlIj4NCiAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICA8dHIgYWxpZ249ImNlbnRlciI-DQogICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGlzcGxheV9ibG9ja19vbl9zbWFsbF9zY3JlZW5zIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNXB4OyBjb2xvcjojMjM0OTZkOyB3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7IHBhZGRpbmc6OHB4IDVweDsgbGluZS1oZWlnaHQ6MTsgdmVydGljYWwtYWxpZ246bWlkZGxlIiB2YWxpZ249Im1pZGRsZSI-DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9kMlJOZlAwNC5uYTEuaHVic3BvdGxpbmtzLmNvbS9DdGMvRFArMTEzL2QyUk5mUDA0L1ZYZnZTRjN5NlpxWVczOTFHVG03RndjbC1XM0RsNFNtNW5RWkxKTjJicGMwUDNxbjlnVzdsQ2RMVzZsWjNuLU43UHBDSDh6LWRQMFc4ODZ4OHA4VGRDMlpXMzdsOXlQNW56YjFRVzE2NDdodjk1bkMwcVc0OEdocDI3cGQ3TmZXM0JHUDdqOF9uVGN6VzFObEN6ejVzU21UV1cyX0Z4em4xTFZ2azhXNU4wSzh6NzR5bWZrVzc0R0NnMzc1djdrOU4yRnlZcngtak41OFc3U18xNVE0TDAwcmZXNlMwdHBRMUdyNlo3VzZUOHZnSjd6MDZ2OVc4V3Fqd3czMVI2eFlXOWQ0bUZnMmg2a1ltVzNYNENybTNHREZTM1czOEJfeC00UVdIdHFXNVl2bVlLNWQxMDRjVzY1Y1p6RzJmLWNGYlc1S1l3ank4WVpHckxNaFlwek05NjlHa1cybk5oN04xNkpMUFZWd0pqc0o1dzdQcnJmNGstN2w4MDQiIHN0eWxlPSJjb2xvcjojMDBhNGJkOyB0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50IiBkYXRhLWhzLWxpbmstaWQ9IjAiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cHM6Ly9ocy0yNDA1NDgyOC5mLmh1YnNwb3RlbWFpbC5uZXQvaHViLzI0MDU0ODI4L2h1YmZzL0ltcG9ydGVkJTIwc2l0ZXBhZ2UlMjBpbWFnZXMvR2l0aHViXzE5ZTdiYzI4MjQucG5nP2hlaWdodD01MCZhbXA7dXBzY2FsZT10cnVlJmFtcDtuYW1lPUdpdGh1Yl8xOWU3YmMyODI0LnBuZyIgYWx0PSJHaXRodWJfaWNvbiIgaGVpZ2h0PSIyNSIgc3R5bGU9Im91dGxpbmU6bm9uZTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGJvcmRlcjpub25lOyB3aWR0aDphdXRvIWltcG9ydGFudDsgaGVpZ2h0OjI1cHghaW1wb3J0YW50OyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIHZhbGlnbj0ibWlkZGxlIiB3aWR0aD0iYXV0byI-DQogICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD48dGQgY2xhc3M9InNvY2lhbC1uZXR3b3JrLWNlbGwiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE1cHg7IGNvbG9yOiMyMzQ5NmQ7IHdvcmQtYnJlYWs6YnJlYWstd29yZCI-DQogICAgICAgIDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDogYXV0bzsgdGV4dC1hbGlnbjogY2VudGVyOyIgY2xhc3M9ImhzX2Nvc193cmFwcGVyX3R5cGVfc29jaWFsX21vZHVsZV9zaW5nbGUiPg0KICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0ciBhbGlnbj0iY2VudGVyIj4NCiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJkaXNwbGF5X2Jsb2NrX29uX3NtYWxsX3NjcmVlbnMiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE1cHg7IGNvbG9yOiMyMzQ5NmQ7IHdvcmQtYnJlYWs6YnJlYWstd29yZDsgcGFkZGluZzo4cHggNXB4OyBsaW5lLWhlaWdodDoxOyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIHZhbGlnbj0ibWlkZGxlIj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzE0M3FuOWdXN1k4LVBUNmxaM25IVzQ3cERHdzM0UFlxX1c0MllsMjU2blg0OXZXNlRyLURkMmZIZ1RSVzdXa3ZsWjNIRDJsak1mNUtxZDQ5Zm1CVzYwXzJQNjRNNGN0Tk44UjNYQnMyTlhSclcxQmNWc0I4VjU4QkxXOHlLdnR2MXZ4eldaVzQ4UFpMLTJnSHl6WVczdjE2WUY3SFQ4cTJXOWRnV0RkNExxNmR4VzRINVlzRzZqWnowMFcyaGNiZE4xV1gxUk1XNnBxNk5LMVc4OUgwVzRkcVNEZzJDZ1JLZlc4SnJ5eXIzNjhTbHdXOHF5NHFzNks4YkItVzczMWh5WTlqajNwYlc4ZkMzbGMyNmRMUWNXNndWVng3MllmMDVwVzhZQkY5SjZoY3dnalcxcFRyMms0Q0w1UzhXNWJMUThzNE4wRHc4VzRybGpHbDljZnAwNlcxakNzbHYxWnEyWmRmNnp3SmxzMDQiIHN0eWxlPSJjb2xvcjojMDBhNGJkOyB0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50IiBkYXRhLWhzLWxpbmstaWQ9IjAiIHRhcmdldD0iX2JsYW5rIj48aW1nIHNyYz0iaHR0cHM6Ly9ocy0yNDA1NDgyOC5mLmh1YnNwb3RlbWFpbC5uZXQvaHViLzI0MDU0ODI4L2h1YmZzL1R3aXR0ZXItMjAyMzEwMTgtMTExMTEwLnBuZz9oZWlnaHQ9NTAmYW1wO3Vwc2NhbGU9dHJ1ZSZhbXA7bmFtZT1Ud2l0dGVyLTIwMjMxMDE4LTExMTExMC5wbmciIGFsdD0iVHdpdHRlci0yMDIzMTAxOC0xMTExMTAiIGhlaWdodD0iMjUiIHN0eWxlPSJvdXRsaW5lOm5vbmU7IHRleHQtZGVjb3JhdGlvbjpub25lOyBib3JkZXI6bm9uZTsgd2lkdGg6YXV0byFpbXBvcnRhbnQ7IGhlaWdodDoyNXB4IWltcG9ydGFudDsgdmVydGljYWwtYWxpZ246bWlkZGxlIiB2YWxpZ249Im1pZGRsZSIgd2lkdGg9ImF1dG8iPg0KICAgICAgICAgICAgICAgIDwvYT4NCiAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgIDwvdGQ-PHRkIGNsYXNzPSJzb2NpYWwtbmV0d29yay1jZWxsIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNXB4OyBjb2xvcjojMjM0OTZkOyB3b3JkLWJyZWFrOmJyZWFrLXdvcmQiPg0KICAgICAgICA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0id2lkdGg6IGF1dG87IHRleHQtYWxpZ246IGNlbnRlcjsiIGNsYXNzPSJoc19jb3Nfd3JhcHBlcl90eXBlX3NvY2lhbF9tb2R1bGVfc2luZ2xlIj4NCiAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICA8dHIgYWxpZ249ImNlbnRlciI-DQogICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGlzcGxheV9ibG9ja19vbl9zbWFsbF9zY3JlZW5zIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNXB4OyBjb2xvcjojMjM0OTZkOyB3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7IHBhZGRpbmc6OHB4IDVweDsgbGluZS1oZWlnaHQ6MTsgdmVydGljYWwtYWxpZ246bWlkZGxlIiB2YWxpZ249Im1pZGRsZSI-DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9kMlJOZlAwNC5uYTEuaHVic3BvdGxpbmtzLmNvbS9DdGMvRFArMTEzL2QyUk5mUDA0L1ZYZnZTRjN5NlpxWVczOTFHVG03RndjbC1XM0RsNFNtNW5RWkxKTjJicGMxNDNxbjlnVzdZOC1QVDZsWjNsVlc1UFZDbV8yZFI4WDRXOEZTdjg5MXFsV0gwVzFGNWNrMjFaTEM0Q1cyZm5aMWg4anZfNEpXMzVmVDY4NlpkanRoVzgzcDJ4XzFkUTZnWFcxQ2JNLWM0S1drOGpXNlNuYjkzMjd4Z3BsVzRKdHpnQzdybDdNRFcybGxSbUYzc1p0U1hOMWo4Qjl4bU5qdnZXNHBiWnZiNk03eWt5VzZnQ2RQWDJZUFg4Q1c0bnZxek0yeFZ4RmJXOWI0ejJCNzY1TE4xTjROd3RGekpxM0NMVzJIOVlZVjZod256alc5aGh3Rmw1dGw3c1JXOF9OYnFmNmhta2NuRjg0ZFdGd2tzM3dXMUc1UzlzOHlfWFhZVzdqdno5dDNrMFk5cFc1V015QlgzLXNSTHJXODEzSy1wMXZnbmtrVzJnZ0dzejdCR2xoc1c2UENWNnM2MXh4ODRkSkYwTWowNCIgc3R5bGU9ImNvbG9yOiMwMGE0YmQ7IHRleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQiIGRhdGEtaHMtbGluay1pZD0iMCIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2hzLTI0MDU0ODI4LmYuaHVic3BvdGVtYWlsLm5ldC9odWIvMjQwNTQ4MjgvaHViZnMvSW1wb3J0ZWQlMjBzaXRlcGFnZSUyMGltYWdlcy9MaW5rZWRpbl8zNjk4MGI2ZmI0LnBuZz9oZWlnaHQ9NTAmYW1wO3Vwc2NhbGU9dHJ1ZSZhbXA7bmFtZT1MaW5rZWRpbl8zNjk4MGI2ZmI0LnBuZyIgYWx0PSJMaW5rZWRpbl9pY29uIiBoZWlnaHQ9IjI1IiBzdHlsZT0ib3V0bGluZTpub25lOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgYm9yZGVyOm5vbmU7IHdpZHRoOmF1dG8haW1wb3J0YW50OyBoZWlnaHQ6MjVweCFpbXBvcnRhbnQ7IHZlcnRpY2FsLWFsaWduOm1pZGRsZSIgdmFsaWduPSJtaWRkbGUiIHdpZHRoPSJhdXRvIj4NCiAgICAgICAgICAgICAgICA8L2E-DQogICAgICAgICAgICAgIDwvdGQ-DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgIDwvdGFibGU-DQogICAgICA8L3RkPjx0ZCBjbGFzcz0ic29jaWFsLW5ldHdvcmstY2VsbCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTVweDsgY29sb3I6IzIzNDk2ZDsgd29yZC1icmVhazpicmVhay13b3JkIj4NCiAgICAgICAgPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgYWxpZ249ImNlbnRlciIgc3R5bGU9IndpZHRoOiBhdXRvOyB0ZXh0LWFsaWduOiBjZW50ZXI7IiBjbGFzcz0iaHNfY29zX3dyYXBwZXJfdHlwZV9zb2NpYWxfbW9kdWxlX3NpbmdsZSI-DQogICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgPHRyIGFsaWduPSJjZW50ZXIiPg0KICAgICAgICAgICAgICA8dGQgY2xhc3M9ImRpc3BsYXlfYmxvY2tfb25fc21hbGxfc2NyZWVucyIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTVweDsgY29sb3I6IzIzNDk2ZDsgd29yZC1icmVhazpicmVhay13b3JkOyBwYWRkaW5nOjhweCA1cHg7IGxpbmUtaGVpZ2h0OjE7IHZlcnRpY2FsLWFsaWduOm1pZGRsZSIgdmFsaWduPSJtaWRkbGUiPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZDJSTmZQMDQubmExLmh1YnNwb3RsaW5rcy5jb20vQ3RjL0RQKzExMy9kMlJOZlAwNC9WWGZ2U0YzeTZacVlXMzkxR1RtN0Z3Y2wtVzNEbDRTbTVuUVpMSk4yYnBjMTQzcW45Z1c3WTgtUFQ2bFozcDNXMktjYmxtNUpEX0xsVzE0alY2RzdUbG5LcVY4SHFkaDR6OU04cVc3Y0NHSkI4TlJTUG5XMlNTMzB5N3dadldkVzkyNFdfRDdMS3Y3d1cxa1hUcnk0OWZwM0dXNHB0Y1dZOGs5dnR0VnFzaEd2NDRGWHFTVzZaWFE4WjJYbmM4eFc3UTRiMEsxRDFCQzJWd3N0RzQ0bjUtRDJXNm43cERQNUQwazdDVzRNQzhGcTQ4d180LU40Q3BkTmg3Tm5qbFcxck1YeHo5MjdNbWZXOWR3V0wtNmQta25XVzdIdlNXYjRNUDRXWlcyelczZ3c1R2NKRnRXOEsxRHlCN2xnQjNZVzg3c0dDMTJSNW1ROVc4SEgtNU44WW1UemNONXFMUkd0Z19iQ1ZXNEJzalpRNWZCM1RXTjc3bVcwTnN3M2twVzVoWVRrcjZmS25qNWYyUUw1OWcwNCIgc3R5bGU9ImNvbG9yOiMwMGE0YmQ7IHRleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQiIGRhdGEtaHMtbGluay1pZD0iMCIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2hzLTI0MDU0ODI4LmYuaHVic3BvdGVtYWlsLm5ldC9odWIvMjQwNTQ4MjgvaHViZnMvaW5zLTIwMjMxMDE4LTExMTExOC5wbmc_aGVpZ2h0PTUwJmFtcDt1cHNjYWxlPXRydWUmYW1wO25hbWU9aW5zLTIwMjMxMDE4LTExMTExOC5wbmciIGFsdD0iaW5zLTIwMjMxMDE4LTExMTExOCIgaGVpZ2h0PSIyNSIgc3R5bGU9Im91dGxpbmU6bm9uZTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGJvcmRlcjpub25lOyB3aWR0aDphdXRvIWltcG9ydGFudDsgaGVpZ2h0OjI1cHghaW1wb3J0YW50OyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIHZhbGlnbj0ibWlkZGxlIiB3aWR0aD0iYXV0byI-DQogICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD48dGQgY2xhc3M9InNvY2lhbC1uZXR3b3JrLWNlbGwiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE1cHg7IGNvbG9yOiMyMzQ5NmQ7IHdvcmQtYnJlYWs6YnJlYWstd29yZCI-DQogICAgICAgIDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDogYXV0bzsgdGV4dC1hbGlnbjogY2VudGVyOyIgY2xhc3M9ImhzX2Nvc193cmFwcGVyX3R5cGVfc29jaWFsX21vZHVsZV9zaW5nbGUiPg0KICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0ciBhbGlnbj0iY2VudGVyIj4NCiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJkaXNwbGF5X2Jsb2NrX29uX3NtYWxsX3NjcmVlbnMiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE1cHg7IGNvbG9yOiMyMzQ5NmQ7IHdvcmQtYnJlYWs6YnJlYWstd29yZDsgcGFkZGluZzo4cHggNXB4OyBsaW5lLWhlaWdodDoxOyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIHZhbGlnbj0ibWlkZGxlIj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzBQM3FuOWdXN2xDZExXNmxaM3BEVzI4MjN3LTFOMFk4TVc0Z2RXM1o3YjliR05XOGtZUmp0OEpHZnZaTjRoZHNSYzQ3OWY2VzR3UDNTSDVCN3E1Nk42UndiakY5OG1qUVcxd1ZUNlk3SlRRMzRXM0hselJ6M2xNWGtCVzhiUGdKeTdUMDA2MVczZGRqYlA0S3dYRkhONUwwMDRNbi1ELTFXMW5oRHpuNkdaSER6VzRWbFJORzZOSFpRcFc2S0tqdDAzQ2RCS2dXMXJQOVltM2hoTG1nVzMxMF9ybTJwV190R042THo1VnpINzNyN1czNFpqRDU2Y0RMNlRUTktSNjFsSHlOUlRfOV9xM1FfY3pUVzQtS2hrVDRaU25rLVc3V0tnWEYzMTRnZkRXNzhkakJZOWZiTndXVzVTalZqOTdzTjEyN2YxME1fS00wNCIgc3R5bGU9ImNvbG9yOiMwMGE0YmQ7IHRleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQiIGRhdGEtaHMtbGluay1pZD0iMCIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2hzLTI0MDU0ODI4LmYuaHVic3BvdGVtYWlsLm5ldC9odWIvMjQwNTQ4MjgvaHViZnMvRGlzY29yZC5wbmc_aGVpZ2h0PTUwJmFtcDt1cHNjYWxlPXRydWUmYW1wO25hbWU9RGlzY29yZC5wbmciIGFsdD0iRGlzY29yZCIgaGVpZ2h0PSIyNSIgc3R5bGU9Im91dGxpbmU6bm9uZTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGJvcmRlcjpub25lOyB3aWR0aDphdXRvIWltcG9ydGFudDsgaGVpZ2h0OjI1cHghaW1wb3J0YW50OyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIHZhbGlnbj0ibWlkZGxlIiB3aWR0aD0iYXV0byI-DQogICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD48dGQgY2xhc3M9InNvY2lhbC1uZXR3b3JrLWNlbGwiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE1cHg7IGNvbG9yOiMyMzQ5NmQ7IHdvcmQtYnJlYWs6YnJlYWstd29yZCI-DQogICAgICAgIDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDogYXV0bzsgdGV4dC1hbGlnbjogY2VudGVyOyIgY2xhc3M9ImhzX2Nvc193cmFwcGVyX3R5cGVfc29jaWFsX21vZHVsZV9zaW5nbGUiPg0KICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0ciBhbGlnbj0iY2VudGVyIj4NCiAgICAgICAgICAgICAgPHRkIGNsYXNzPSJkaXNwbGF5X2Jsb2NrX29uX3NtYWxsX3NjcmVlbnMiIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE1cHg7IGNvbG9yOiMyMzQ5NmQ7IHdvcmQtYnJlYWs6YnJlYWstd29yZDsgcGFkZGluZzo4cHggNXB4OyBsaW5lLWhlaWdodDoxOyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIHZhbGlnbj0ibWlkZGxlIj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0Yy9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpOMmJwYzE0M3FuOWdXN1k4LVBUNmxaM3BiVzhLVmN2XzRkZEw0a1cyQlNuOEc3S21qVFRON0RtR3RkbGZzOXZXM0ZWYzlENDRYTDJrVzVwY3JNdzN0TnM2UVc0WHRDbEI4YjhMckdXMTNoZmNaNVNHWTdITjZLMFMwSmdaTjkxVzFYd1FybjZfc2tNSlcxcExEcHQ0WjZUVnBXNlIxNDVzN1ZSakdRVzNEWlFMMjdmWjNESlcxVnRjOHM2eDV2S1JOMngyU3BjWHpUMUxXNlRUWG5UMVFEOGY2VmwxOFpXN0Z2R1hoVzRUTjhXNDJ0Z3ByR1c0UTNScDk4V2dXbGdXMkt3WjZMNVkxa2RZVzNfbnZDYzduVGNrZ1c4WkhIM180QkR2ODJWWUxxYmsxOXgtcmZWLUM0WEc5MFpnR3JXODJwTVJXOTh0djg4TjJSYmpHMkY1NE10VzdqSFdjNjljS1FfOWYzakdxMDAwNCIgc3R5bGU9ImNvbG9yOiMwMGE0YmQ7IHRleHQtZGVjb3JhdGlvbjpub25lICFpbXBvcnRhbnQiIGRhdGEtaHMtbGluay1pZD0iMCIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwczovL2hzLTI0MDU0ODI4LmYuaHVic3BvdGVtYWlsLm5ldC9odWIvMjQwNTQ4MjgvaHViZnMvTGlua2VkaW4tMjAyMzEwMTgtMTExMTAzLnBuZz9oZWlnaHQ9NTAmYW1wO3Vwc2NhbGU9dHJ1ZSZhbXA7bmFtZT1MaW5rZWRpbi0yMDIzMTAxOC0xMTExMDMucG5nIiBhbHQ9IkxpbmtlZGluLTIwMjMxMDE4LTExMTEwMyIgaGVpZ2h0PSIyNSIgc3R5bGU9Im91dGxpbmU6bm9uZTsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGJvcmRlcjpub25lOyB3aWR0aDphdXRvIWltcG9ydGFudDsgaGVpZ2h0OjI1cHghaW1wb3J0YW50OyB2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIHZhbGlnbj0ibWlkZGxlIiB3aWR0aD0iYXV0byI-DQogICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICA8L3RhYmxlPg0KICAgICAgPC90ZD4NCiAgICA8L3RyPg0KICA8L3Rib2R5Pg0KPC90YWJsZT4NCjwvZGl2PjwvdGQ-PC90cj48L3Rib2R5PjwvdGFibGU-DQo8L2Rpdj4NCjwhLS1baWYgZ3RlIG1zbyA5XT48L3RhYmxlPjwhW2VuZGlmXS0tPg0KPCEtLVtpZiAobXNvKXwoSUUpXT48L3RkPjwhW2VuZGlmXS0tPg0KICAgIDwhLS1baWYgKG1zbyl8KElFKV0-PC90cj48L3RhYmxlPjwhW2VuZGlmXS0tPg0KICAgIDwvZGl2Pg0KICAgDQogIDwvZGl2Pg0KICA8ZGl2IGlkPSJzZWN0aW9uLTQiIGNsYXNzPSJoc2Utc2VjdGlvbiBoc2Utc2VjdGlvbi1sYXN0IiBzdHlsZT0icGFkZGluZy1sZWZ0OjEwcHg7IHBhZGRpbmctcmlnaHQ6MTBweCI-DQogICAgDQogICAgDQogICAgPCEtLVtpZiAhKChtc28pfChJRSkpXT48IS0tIC0tPg0KICAgICAgPGRpdiBjbGFzcz0iaHNlLWNvbHVtbi1jb250YWluZXIiIHN0eWxlPSJtaW4td2lkdGg6MjgwcHg7IG1heC13aWR0aDo2MDBweDsgTWFyZ2luLWxlZnQ6YXV0bzsgTWFyZ2luLXJpZ2h0OmF1dG87IHBhZGRpbmctYm90dG9tOjIwcHg7IHBhZGRpbmctdG9wOjIwcHgiPg0KICAgIDwhLS08IVtlbmRpZl0tLT4NCiAgICANCiAgICA8IS0tW2lmIChtc28pfChJRSldPg0KICAgICAgPGRpdiBjbGFzcz0iaHNlLWNvbHVtbi1jb250YWluZXIiIHN0eWxlPSJtaW4td2lkdGg6MjgwcHg7bWF4LXdpZHRoOjYwMHB4O3dpZHRoOjEwMCU7TWFyZ2luLWxlZnQ6YXV0bztNYXJnaW4tcmlnaHQ6YXV0bzsiPg0KICAgICAgPHRhYmxlIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ3aWR0aDo2MDBweDsiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgcm9sZT0icHJlc2VudGF0aW9uIj4NCiAgICAgIDx0cj4NCiAgICA8IVtlbmRpZl0tLT4NCiAgICA8IS0tW2lmIChtc28pfChJRSldPg0KICA8dGQgdmFsaWduPSJ0b3AiIHN0eWxlPSJ3aWR0aDo2MDBweDtwYWRkaW5nLWJvdHRvbToyMHB4OyBwYWRkaW5nLXRvcDoyMHB4OyI-DQo8IVtlbmRpZl0tLT4NCjwhLS1baWYgZ3RlIG1zbyA5XT4NCiAgPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgd2lkdGg9IjYwMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0id2lkdGg6NjAwcHgiPg0KPCFbZW5kaWZdLS0-DQo8ZGl2IGlkPSJjb2x1bW4tNC0wIiBjbGFzcz0iaHNlLWNvbHVtbiBoc2Utc2l6ZS0xMiI-DQogIDxkaXYgaWQ9ImhzX2Nvc193cmFwcGVyX21vZHVsZS00LTAtMCIgY2xhc3M9ImhzX2Nvc193cmFwcGVyIGhzX2Nvc193cmFwcGVyX3dpZGdldCBoc19jb3Nfd3JhcHBlcl90eXBlX21vZHVsZSIgc3R5bGU9ImNvbG9yOiBpbmhlcml0OyBmb250LXNpemU6IGluaGVyaXQ7IGxpbmUtaGVpZ2h0OiBpbmhlcml0OyIgZGF0YS1ocy1jb3MtZ2VuZXJhbC10eXBlPSJ3aWRnZXQiIGRhdGEtaHMtY29zLXR5cGU9Im1vZHVsZSI-PHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgY2xhc3M9ImhzZS1mb290ZXIgaHNlLXNlY29uZGFyeSIgd2lkdGg9IjEwMCUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MTJweDsgbGluZS1oZWlnaHQ6MTM1JTsgY29sb3I6IzIzNDk2ZDsgbWFyZ2luLWJvdHRvbTowOyBwYWRkaW5nOjAiPg0KICA8dGJvZHk-DQogICAgPHRyPg0KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxNXB4OyBjb2xvcjojMjM0OTZkOyB3b3JkLWJyZWFrOmJyZWFrLXdvcmQ7IHRleHQtYWxpZ246Y2VudGVyOyBtYXJnaW4tYm90dG9tOjA7IGxpbmUtaGVpZ2h0OjEzNSU7IHBhZGRpbmc6MTBweCAyMHB4Ij4NCiAgICAgICAgPHAgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXN0eWxlOm5vcm1hbDtjb2xvcjojMjM0OTZkIj4NCiAgICAgICAgICBaaWxsaXogSW5jLCAyMDEgUmVkd29vZCBTaG9yZXMgUGt3eSwgU3VpdGUgMzMwLCBSZWR3b29kIENpdHksIENBIDk0MDY1LCBVbml0ZWQgU3RhdGVzDQogICAgICAgIDwvcD4NCiAgICAgICAgPHA-DQogICAgICAgICAgPGEgZGF0YS11bnN1YnNjcmliZT0idHJ1ZSIgaHJlZj0iaHR0cHM6Ly9ocy0yNDA1NDgyOC5zLmh1YnNwb3RlbWFpbC5uZXQvaHMvcHJlZmVyZW5jZXMtY2VudGVyL2VuL2RpcmVjdD9kYXRhPVcyblhTLU4zMGgtQmNXMkhGVnFwNGNLZDl3VzNick1OTDMybEpWblczejFKTlczQzlOUmJXMkNGdEJtMzJzWEJLVzQxVjh5SDFCTnlZR1cyS0JLRzQyUE5rN2tXM2o2MlBnM3pkeUoxVzIxN3lkSjIyVE4wcFcyLUJkQnEzMnFzY1lXMVFybDl6MzZCN1FWVzNoLUI1XzNYTi1WMVcydDA0MkgyV0hfaC1XMzA2U3k3NDNRZjJGVzNDajI4QjFWeGxjY1czSGRHeWczMmctTTZXNDNGMTVtM0xHWXJiVzJxTXk0UzRjczJ5M1czTlhXY3QxWmc3SmhXNDNYeHlINGhLamc1VzNQNXZLYjR0RHhoWlc0Y2xKVl8yTUNSOExXMzhjUlkyMnIxNUpNVzJzRnQwdjI1MnJXNVcxTEZ5VzAyUnY4YzNXM0RNSzdENDNHaGpyVzFCdl9nMzJ2eUZsU1c0M3FTUWIzU0hZMl9XMjFsZmY4NGZMZ0RkVzJUaFhXODQxWTdfTFcxX2pzWkszODN0cUhXM2dubVBYMVZ5OC1qVzRrTTlNTDMwSzNfSlcxVmJSQy0yVFM3Zm1XM19zM1JHNG1xMjk2VzNkOWtKQzN6a3Z2eFcyMldxenA0NU15V1hXMkNNSHBaMzBMbFNLVzRrdDZRdjNRVkYzTVcyUmpfZFYxTDhON0dXM2pyLWZEMnAwdDIxVzJwM2t0azMwRFNqcVcxUTNNTHYySEZ4NS1XNHJwZkxRMjMxV1lqVzNfcHgtRzRyZktjbFc0ZnRaU3QxQnFUWkcwJmFtcDt1dG1fY2FtcGFpZ249WmlsbGl6LU1vbnRobHktUHJvZHVjdC1VcGRhdGVzJmFtcDt1dG1fc291cmNlPWhzX2VtYWlsJmFtcDt1dG1fbWVkaXVtPWVtYWlsJmFtcDt1dG1fY29udGVudD0zMzUyNTY1OTUmYW1wO19oc2VuYz1wMkFOcXR6LTkzNjBicFV1T1ZXbkZFOS1VYVl1NUg2Y2NGa0tZdS1zNXBYbEZQMVlMNV95YUQ2LXNjeWlxME9zMnhSVExaeTFaX095cnJ4NEd5LWgyOHZRUmlNWWNXRW1QV1VBJmFtcDtfaHNtaT0zMzUyNTY1OTUiIHN0eWxlPSJmb250LWZhbWlseTpIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsgZm9udC1zaXplOjEycHg7IGNvbG9yOiMzNjcwZjI7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsgZm9udC1zdHlsZTpub3JtYWwiIGRhdGEtaHMtbGluay1pZD0iMCIgdGFyZ2V0PSJfYmxhbmsiPlVuc3Vic2NyaWJlPC9hPg0KICAgICAgICAgIDxhIGRhdGEtdW5zdWJzY3JpYmU9InRydWUiIGhyZWY9Imh0dHBzOi8vaHMtMjQwNTQ4Mjgucy5odWJzcG90ZW1haWwubmV0L2hzL3ByZWZlcmVuY2VzLWNlbnRlci9lbi9wYWdlP2RhdGE9VzJuWFMtTjMwaC1CY1cySEZWcXA0Y0tkOXdXM2JyTU5MMzJsSlZuVzN6MUpOVzNDOU5SYlcyQ0Z0Qm0zMnNYQktXNDFWOHlIMUJOeVlHVzJLQktHNDJQTms3a1czajYyUGczemR5SjFXMjE3eWRKMjJUTjBwVzItQmRCcTMycXNjWVcxUXJsOXozNkI3UVZXM2gtQjVfM1hOLVYxVzJ0MDQySDJXSF9oLVczMDZTeTc0M1FmMkZXM0NqMjhCMVZ4bGNjVzNIZEd5ZzMyZy1NNlc0M0YxNW0zTEdZcmJXMnFNeTRTNGNzMnkzVzNOWFdjdDFaZzdKaFc0M1h4eUg0aEtqZzVXM1A1dktiNHREeGhaVzRjbEpWXzJNQ1I4TFczOGNSWTIycjE1Sk1XMnNGdDB2MjUyclc1VzFMRnlXMDJSdjhjM1czRE1LN0Q0M0doanJXMUJ2X2czMnZ5RmxTVzQzcVNRYjNTSFkyX1cyMWxmZjg0ZkxnRGRXMlRoWFc4NDFZN19MVzFfanNaSzM4M3RxSFczZ25tUFgxVnk4LWpXNGtNOU1MMzBLM19KVzFWYlJDLTJUUzdmbVczX3MzUkc0bXEyOTZXM2Q5a0pDM3prdnZ4VzIyV3F6cDQ1TXlXWFcyQ01IcFozMExsU0tXNGt0NlF2M1FWRjNNVzJSal9kVjFMOE43R1czanItZkQycDB0MjFXMnAza3RrMzBEU2pxVzFRM01MdjJIRng1LVc0cnBmTFEyMzFXWWpXM19weC1HNHJmS2NsVzRmdFpTdDFCcVRaRzAmYW1wO3V0bV9jYW1wYWlnbj1aaWxsaXotTW9udGhseS1Qcm9kdWN0LVVwZGF0ZXMmYW1wO3V0bV9zb3VyY2U9aHNfZW1haWwmYW1wO3V0bV9tZWRpdW09ZW1haWwmYW1wO3V0bV9jb250ZW50PTMzNTI1NjU5NSZhbXA7X2hzZW5jPXAyQU5xdHotOTM2MGJwVXVPVlduRkU5LVVhWXU1SDZjY0ZrS1l1LXM1cFhsRlAxWUw1X3lhRDYtc2N5aXEwT3MyeFJUTFp5MVpfT3lycng0R3ktaDI4dlFSaU1ZY1dFbVBXVUEmYW1wO19oc21pPTMzNTI1NjU5NSIgc3R5bGU9ImZvbnQtZmFtaWx5OkhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOyBmb250LXNpemU6MTJweDsgY29sb3I6IzM2NzBmMjsgZm9udC13ZWlnaHQ6bm9ybWFsOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOyBmb250LXN0eWxlOm5vcm1hbCIgZGF0YS1ocy1saW5rLWlkPSIwIiB0YXJnZXQ9Il9ibGFuayI-TWFuYWdlIHByZWZlcmVuY2VzPC9hPg0KICAgICAgICA8L3A-DQogICAgICA8L3RkPg0KICAgIDwvdHI-DQogIDwvdGJvZHk-DQo8L3RhYmxlPjwvZGl2Pg0KPC9kaXY-DQo8IS0tW2lmIGd0ZSBtc28gOV0-PC90YWJsZT48IVtlbmRpZl0tLT4NCjwhLS1baWYgKG1zbyl8KElFKV0-PC90ZD48IVtlbmRpZl0tLT4NCiAgICA8IS0tW2lmIChtc28pfChJRSldPjwvdHI-PC90YWJsZT48IVtlbmRpZl0tLT4NCiAgICA8L2Rpdj4NCiAgIA0KICA8L2Rpdj48L2Rpdj4NCiAgICAgICAgICA8L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgPC90Ym9keT48L3RhYmxlPg0KICAgIDwvZGl2Pg0KICANCjxpbWcgc3JjPSJodHRwczovL2QyUk5mUDA0Lm5hMS5odWJzcG90bGlua3MuY29tL0N0by9EUCsxMTMvZDJSTmZQMDQvVlhmdlNGM3k2WnFZVzM5MUdUbTdGd2NsLVczRGw0U201blFaTEpXMmJwYk5DOGZZQlZsMzExRjEiIGFsdD0iIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIiBib3JkZXI9IjAiIHN0eWxlPSJkaXNwbGF5Om5vbmUhaW1wb3J0YW50O21pbi1oZWlnaHQ6MXB4IWltcG9ydGFudDt3aWR0aDoxcHghaW1wb3J0YW50O2JvcmRlci13aWR0aDowIWltcG9ydGFudDttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50O21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50Ij48L2JvZHk-PC9odG1sPg==" + } + } + ] + }, + "sizeEstimate": 58097, + "historyId": "528446", + "internalDate": "1732550489000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_05_19363d6a7f50225a_20241126.json b/goog/controllers/gmail/json/messages/raw_message_05_19363d6a7f50225a_20241126.json new file mode 100644 index 0000000..a73143e --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_05_19363d6a7f50225a_20241126.json @@ -0,0 +1,183 @@ +{ + "id": "19363d6a7f50225a", + "threadId": "19363d6a7f50225a", + "labelIds": [ + "UNREAD", + "CATEGORY_SOCIAL", + "INBOX" + ], + "snippet": "I was shocked the first time I saw an email thread between CEOs. \u27a1\ufe0f Super\u2026 \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f", + "payload": { + "partId": "", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp947819wrq; Mon, 25 Nov 2024 07:00:33 -0800 (PST)" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IEFN1+qQXQRzIufLuGn81fBtiEMpNVd70cc7F1JDgilDRmsroGRc1KakuQdeito894ZaWCJ" + }, + { + "name": "X-Received", + "value": "by 2002:a17:903:1cc:b0:213:1f66:7a0 with SMTP id d9443c01a7336-2131f660bb1mr162505755ad.5.1732546832257; Mon, 25 Nov 2024 07:00:32 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732546832; cv=none; d=google.com; s=arc-20240605; b=OefoSg4Osa/7UqDyfBdsqSwauKWbKt3mgv0CO65iqxq/6tJAToTEgQqKLwRQPjD2rI k1iTVlniP0xAeT7tF9IO5FszCwdxJMtApbZ1w5sgs6dCuhCW8CqaZPiyvRSM48d/EmS0 XU9zPhk1v3CamElaGDy44tgV/B1l+v7KHEyeH1cTrgMJWc2CQo2pq8YvgSLh0Dwi65hE 7+qHqYRTQCIxnFdTnSUCZ/re+ZBIdlsfRI6zbPD19CQ+m3gd0VZXydf1eku+xwx/syge 1XYXvWQlTvuwy48Alwj0W187eulpAdoBX9GLndpNIbSyXgsXWcDBzRpJHV/eDgRFppHq Oyog==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=require-recipient-valid-since:feedback-id:list-unsubscribe-post :list-unsubscribe:date:to:mime-version:subject:message-id:from :dkim-signature:dkim-signature; bh=QJIMampnsNTw4Zkt1PMWLbsgyfglSgJ+8/XrmCsl3fE=; fh=kl8GOc3xH49wmCQ5W74DCe5pDhPNnAeFoI4mGP4/wX4=; b=QtG1E2EuFXHDoOzoBPbZlyUiK3QsGFK+E9AUVyvVedcojVDu7DNTYeIetMQrPoQhyE aBU1SWlhJUhfIPBWOgx3PXCxEYOf79tzmq6+IJmhEngsM/mK3QIRFVxFIPNK6ntATr5l QN0xCBODlttA3zlPodu5X1oYKky6HSadTmNmeFsJCGz2XSL2PNgLSjrIT00vEu0DlqUg 6DGn0y4QGNRHTTu+G++Q/5RTl83KJbPUDw25q1zNPyoXm2S+tJmPRBwZIrOqWlcEfkGl JgXww2mZNo0PJ8YUYxi/V/GFefbJZCPNprtKngB894TrBjwreir+RAVnPG0xMLyMYH2G tKMA==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@maile.linkedin.com header.s=d2048-202308-0e header.b=JRwv1bF1; dkim=pass header.i=@linkedin.com header.s=d2048-202308-00 header.b=A29Lk2pK; spf=pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emfuz3e1jqnvn@bounce.linkedin.com designates 2620:109:c003:104::193 as permitted sender) smtp.mailfrom=m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emfuz3e1jqnvn@bounce.linkedin.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=linkedin.com" + }, + { + "name": "Return-Path", + "value": "" + }, + { + "name": "Received", + "value": "from maile-ca.linkedin.com (maile-ca.linkedin.com. [2620:109:c003:104::193]) by mx.google.com with ESMTPS id d9443c01a7336-2129dcc2421si100253625ad.265.2024.11.25.07.00.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Nov 2024 07:00:32 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emfuz3e1jqnvn@bounce.linkedin.com designates 2620:109:c003:104::193 as permitted sender) client-ip=2620:109:c003:104::193;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@maile.linkedin.com header.s=d2048-202308-0e header.b=JRwv1bF1; dkim=pass header.i=@linkedin.com header.s=d2048-202308-00 header.b=A29Lk2pK; spf=pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emfuz3e1jqnvn@bounce.linkedin.com designates 2620:109:c003:104::193 as permitted sender) smtp.mailfrom=m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emfuz3e1jqnvn@bounce.linkedin.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=linkedin.com" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=maile.linkedin.com; s=d2048-202308-0e; t=1732546821; bh=QJIMampnsNTw4Zkt1PMWLbsgyfglSgJ+8/XrmCsl3fE=; h=From:Subject:MIME-Version:Content-Type:To:Date:X-LinkedIn-Class:\t X-LinkedIn-Template:X-LinkedIn-fbl; b=JRwv1bF1ZgWasLaV5ISDB6oRtNvnGdArHv7IH8WuhaNOJS9K9FKUTqls8jNUT9nKW\t qIuO1K8MiNn896sL30tt5C9aHXp9PlcByFX4R1nhF9KmBryfPf7fqyJ9PSU3kUIUji\t CwPW9QR2ebErCuAwYUbTIwzLrEK+tkC1088+vQt8llQdM1UcCq6lTIAHid8sCMgVfk\t U1tEhyImFWHlsoU6/bbL9xWu0zODgSdPu3k/7FMa4BXaTUGLdpatHoeMYQ7NB05hTu\t +/L1oBJNru7tikOJi+Lg5uqDXE9dbIxBHYxDxBpzxexJ4KIqAIBp5f+fM2uLlAALsh\t 8wv8egbBZVVXQ==" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linkedin.com; s=d2048-202308-00; t=1732546821; bh=QJIMampnsNTw4Zkt1PMWLbsgyfglSgJ+8/XrmCsl3fE=; h=From:Subject:MIME-Version:Content-Type:To:Date:X-LinkedIn-Class:\t X-LinkedIn-Template:X-LinkedIn-fbl; b=A29Lk2pKp3MdOrd0ot1HCr426rNkgJG1uG5FwFw3Msav7EiuR3Hu9D8W8sp3Aguk3\t DJ4F8+Q1GyrSAQqp2EG+ej5Mkq0wIFCknKqS+dfIbV0WkXyt5gChl9U9+a0f3q45Sw\t kuc+Hu2npHCSqCS/ZnCEAGFac48iuxjWEZg5Gx+f3TgvaRk+4GbzLj9N3GpWK8gQJ1\t 0NfWqIwPtgD8x22otnhgaIMSe8p/SpmaHTA9is3oWFKy6cK6JiDYF9QCm9L7FUik6l\t doYcPxSEfyY1GOeDv77sE39JNZAInSnaoRLkMyhjpxa+wuZkjrk3e2OD2LcGANTjB6\t 5SXY4dCgRTuNw==" + }, + { + "name": "From", + "value": "LinkedIn Conversations " + }, + { + "name": "Message-ID", + "value": "<2103564692.15888884.1732546821012@lva1-app83618.prod.linkedin.com>" + }, + { + "name": "Subject", + "value": "Khushal, Kyle Coleman has a new post out now" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"----=_Part_15888882_780257305.1732546821006\"" + }, + { + "name": "To", + "value": "Khushal PS " + }, + { + "name": "Date", + "value": "Mon, 25 Nov 2024 15:00:21 +0000 (UTC)" + }, + { + "name": "X-LinkedIn-Class", + "value": "EMAIL-DEFAULT" + }, + { + "name": "X-LinkedIn-Template", + "value": "email_network_conversations_01" + }, + { + "name": "X-LinkedIn-fbl", + "value": "m2-aszvgmongouahf4m5l6zqvhltq38farw322nvqfwdw9s3eg192u3az2ognwtxtplrdia86qo0p50dvbiigckd8r282ipmolfihgoqa" + }, + { + "name": "X-LinkedIn-Id", + "value": "j7zu7i-m3x43csv-2c" + }, + { + "name": "List-Unsubscribe", + "value": "" + }, + { + "name": "List-Unsubscribe-Post", + "value": "List-Unsubscribe=One-Click" + }, + { + "name": "Feedback-ID", + "value": "email_network_conversations_01:linkedin" + }, + { + "name": "Require-Recipient-Valid-Since", + "value": "pskhushal@gmail.com; Mon, 24 Jul 2023 06:55:23 +0000" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain;charset=UTF-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + }, + { + "name": "Content-ID", + "value": "text-body" + } + ], + "body": { + "size": 8151, + "data": "LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoNCg0KICAgICAgICAgIA0KICAgICAgICANCg0KICAgICAgICAgIEt5bGUgQ29sZW1hbiBzaGFyZWQgYSBwb3N0OiBJIHdhcyBzaG9ja2VkIHRoZSBmaXJzdCB0aW1lIEkgc2F3IGFuIGVtYWlsIHRocmVhZCBiZXR3ZWVuIENFT3MuDQoNCuKeoe-4jyBTdXBlciBzaG9ydCBzZW50ZW5jZXMNCuKeoe-4jyBJbXByb3BlciBwdW5jdHVhdGlvbg0K8J-ZgCBTcGVsbGluZyBlcnJvcnMhISANCg0KSXQgd2FzIG1vcmXigKYNCkxJS0UgUFJBSVNFIEVNUEFUSFkgMSwyODksIDIzOCBDb21tZW50cw0KUmVhZCBtb3JlOiBodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2NDcxNjg0MTk3NjA1Mzc2MD9oaWdobGlnaHRlZFVwZGF0ZVVybj11cm4lM0FsaSUzQWFjdGl2aXR5JTNBNzI2NDcxNjg0MTk3NjA1Mzc2MCZzaG93Q29tbWVudEJveD10cnVlJm9yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmbGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJm1pZFRva2VuPUFRRlBhMjNOem8xOEZRJm1pZFNpZz0wRkVyWjdMWHc0RGJ3MSZ0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhfnRleHQtMC1yZWFkfm1vcmUmdHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhfnRleHQtMC1yZWFkfm1vcmUtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmVpZD1qN3p1N2ktbTN4NDNjc3YtMmMmb3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRA0KICAgICAgICANCg0KDQoNCiAgICAgICAgICANCiAgICAgICAgDQoNCiAgICAgICAgICBLaHVzaGkgQWdyYXdhbCBzaGFyZWQgYSBwb3N0OiDwn5qoRGVsZXRlIHRoZXNlIGZyb20geW91ciBDViBub3ch8J-aqA0KSW1hZ2luZSB0aGUgcmVjcnVpdGVyIHNpdHRpbmcgdGhlcmUsIGdvaW5nIHRocm91Z2ggZG96ZW5zIG9mIENWcyBldmVyeSBkYXkuIFdoYXQgbWFrZXMgdGhlbSBzdG9wIGF0IHlvdXJzPyBOb3TigKYNCkxJS0UgUFJBSVNFIEVNUEFUSFkgMjIyLCAxMTEgQ29tbWVudHMNCg0KDQpSZWFkIG1vcmU6IGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjYzMDk4NjMwMDQ2MTcxMTM3P2hpZ2hsaWdodGVkVXBkYXRlVXJuPXVybiUzQWxpJTNBYWN0aXZpdHklM0E3MjYzMDk4NjMwMDQ2MTcxMTM3JnNob3dDb21tZW50Qm94PXRydWUmb3JpZ2luPU5FVFdPUktfQ09OVkVSU0FUSU9OUyZsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmbWlkVG9rZW49QVFGUGEyM056bzE4RlEmbWlkU2lnPTBGRXJaN0xYdzREYncxJnRyaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGF-dGV4dC0wLXJlYWR-bW9yZSZ0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGF-dGV4dC0wLXJlYWR-bW9yZS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEDQogICAgICAgIA0KDQoNCg0KICAgICAgICAgIA0KICAgICAgICANCg0KICAgICAgICAgIFB1cnZpIEJvdGhyYSBzaGFyZWQgYSBwb3N0OiBPdmVyY29taW5nIEJ1cm5vdXQgaW4gUmVtb3RlIFdvcms6IE15IEV4cGVyaWVuY2UgYW5kIFN0cmF0ZWdpZXMNCg0KQnVybm91dCBpbiByZW1vdGUgd29yayBpcyByZWFsLCBhbmQgSeKAmXZlIHNlZW4gaG93IGl0IGNhbiBzaWxlbnRseSBjcmVlcCBpbnRvIG91cuKApg0KTElLRSBQUkFJU0UgQVBQUkVDSUFUSU9OIDc4LCA1NyBDb21tZW50cw0KUmVhZCBtb3JlOiBodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2MzUzNTAyMjU5MzIyMDYwOD9oaWdobGlnaHRlZFVwZGF0ZVVybj11cm4lM0FsaSUzQWFjdGl2aXR5JTNBNzI2MzUzNTAyMjU5MzIyMDYwOCZzaG93Q29tbWVudEJveD10cnVlJm9yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmbGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJm1pZFRva2VuPUFRRlBhMjNOem8xOEZRJm1pZFNpZz0wRkVyWjdMWHc0RGJ3MSZ0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhfnRleHQtMC1yZWFkfm1vcmUmdHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhfnRleHQtMC1yZWFkfm1vcmUtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmVpZD1qN3p1N2ktbTN4NDNjc3YtMmMmb3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRA0KICAgICAgICANCg0KDQoNCiAgICAgICAgICANCiAgICAgICAgDQoNCiAgICAgICAgICBBbGlzaGEgU2FudGlhZ28gc2hhcmVkIGEgcG9zdDogRGVzcGl0ZSB0aGUgbnVtZXJvdXMgam9iIGludGVydmlld3MgSSd2ZSBwYXJ0aWNpcGF0ZWQgaW4sIEkgc3RpbGwgZmluZCBteXNlbGYgdW5jZXJ0YWluIGFib3V0IHdoZW4gaXQncyBhcHByb3ByaWF0ZSB0byBkaXNjdXNzIHNhbGFyeS4gSW4gbXkgbW9zdOKApg0KTElLRSBQUkFJU0UgRU1QQVRIWSAxNDUsIDg3IENvbW1lbnRzDQpSZWFkIG1vcmU6IGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjY0MzM4MDczMzkwMzUwMzM2P2hpZ2hsaWdodGVkVXBkYXRlVXJuPXVybiUzQWxpJTNBYWN0aXZpdHklM0E3MjY0MzM4MDczMzkwMzUwMzM2JnNob3dDb21tZW50Qm94PXRydWUmb3JpZ2luPU5FVFdPUktfQ09OVkVSU0FUSU9OUyZsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmbWlkVG9rZW49QVFGUGEyM056bzE4RlEmbWlkU2lnPTBGRXJaN0xYdzREYncxJnRyaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGF-dGV4dC0wLXJlYWR-bW9yZSZ0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGF-dGV4dC0wLXJlYWR-bW9yZS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEDQogICAgICAgIA0KDQoNCg0KICAgICAgICAgIA0KICAgICAgICANCg0KICAgICAgICAgIEF1c3RpbiBCZWxjYWsgc2hhcmVkIGEgcG9zdDogSSBzaGFyZWQgYSBwb3N0IGFib3V0IHdoeSB5b3UgcHVyc3VlIGpvYnMgZXZlbiBpZiB5b3UgZG9u4oCZdCBtZWV0IDEwMCUgb2YgdGhlIHF1YWxpZmljYXRpb25zLg0KDQpNYW55IHBlb3BsZSByZXBsaWVkIHRlbGxpbmcgbWUgaXQgd2FzIOKAnHRlcnJpYmxl4oCmDQpMSUtFIFBSQUlTRSBFTVBBVEhZIDUyNiwgMTE4IENvbW1lbnRzDQpSZWFkIG1vcmU6IGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjY0MzM4MDcxMTUwNjI4ODY1P2hpZ2hsaWdodGVkVXBkYXRlVXJuPXVybiUzQWxpJTNBYWN0aXZpdHklM0E3MjY0MzM4MDcxMTUwNjI4ODY1JnNob3dDb21tZW50Qm94PXRydWUmb3JpZ2luPU5FVFdPUktfQ09OVkVSU0FUSU9OUyZsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmbWlkVG9rZW49QVFGUGEyM056bzE4RlEmbWlkU2lnPTBGRXJaN0xYdzREYncxJnRyaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGF-dGV4dC0wLXJlYWR-bW9yZSZ0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGF-dGV4dC0wLXJlYWR-bW9yZS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEDQogICAgICAgIA0KDQoNClNlZSBtb3JlIG9uIExpbmtlZEluOiBodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkLz9saXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmbWlkVG9rZW49QVFGUGEyM056bzE4RlEmbWlkU2lnPTBGRXJaN0xYdzREYncxJnRyaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLWZvb3Rlcl9wcm9tby0wLWZvb3Rlcl9zZWVfYWxsJnRya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtZm9vdGVyX3Byb21vLTAtZm9vdGVyX3NlZV9hbGwtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmVpZD1qN3p1N2ktbTN4NDNjc3YtMmMmb3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRA0KICAgICAgDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KVGhpcyBlbWFpbCB3YXMgaW50ZW5kZWQgZm9yIEtodXNoYWwgUFMgKC0tKQ0KTGVhcm4gd2h5IHdlIGluY2x1ZGVkIHRoaXM6IGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9oZWxwL2xpbmtlZGluL2Fuc3dlci80Nzg4P2xhbmc9ZW4mbGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJm1pZFRva2VuPUFRRlBhMjNOem8xOEZRJm1pZFNpZz0wRkVyWjdMWHc0RGJ3MSZ0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1TZWN1cml0eUhlbHAtMC10ZXh0Zm9vdGVyZ2xpbW1lciZ0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLVNlY3VyaXR5SGVscC0wLXRleHRmb290ZXJnbGltbWVyLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJm90cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QNCllvdSBhcmUgcmVjZWl2aW5nIE5ldHdvcmsgQ29udmVyc2F0aW9ucyBlbWFpbHMuIFNvbWUgY29udGVudCBtYXkgYmUgYXV0b21hdGljYWxseSB0cmFuc2xhdGVkIGJhc2VkIG9uDQogICAgICA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vbXlwcmVmZXJlbmNlcy9kL2xhbmd1YWdlLWZvci10cmFuc2xhdGlvbiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsaW5rLW5vLXZpc2l0ZWQtc3RhdGUiIGRhdGEtdHJhY2tpbmctd2lsbC1uYXZpZ2F0ZSBkYXRhLXRyYWNraW5nLWNvbnRyb2wtbmFtZT0iZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zX2NvbnRlbnRfc2V0dGluZ3NfbGluayIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMGE2NmMyOyI-eW91ciBzZXR0aW5nczwvYT4uDQoNClVuc3Vic2NyaWJlOiBodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9wc2V0dGluZ3MvZW1haWwtdW5zdWJzY3JpYmU_bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJm1pZFRva2VuPUFRRlBhMjNOem8xOEZRJm1pZFNpZz0wRkVyWjdMWHc0RGJ3MSZ0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS11bnN1YnNjcmliZS0wLXRleHRmb290ZXJnbGltbWVyJnRya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtdW5zdWJzY3JpYmUtMC10ZXh0Zm9vdGVyZ2xpbW1lci1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZsb2lkPUFRR1NlMFF6V1F4MjZBQUFBWk5qMW5mY3RCalBkV2V6a2lud05HMFVkN3ZZd3NuYWxoMFVzTWFZWWFRM2wzNmZUcnJqOXNjVko5emJjRzgtdENqalhhWEFDQkZEbWpjZ0pCVEZheHNRMFR4MDdpLU5FLVh5LU55V2JnDQpIZWxwOiBodHRwczovL3d3dy5saW5rZWRpbi5jb20vaGVscC9saW5rZWRpbi9hbnN3ZXIvNjc_bGFuZz1lbiZsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmbWlkVG9rZW49QVFGUGEyM056bzE4RlEmbWlkU2lnPTBGRXJaN0xYdzREYncxJnRyaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLWhlbHAtMC10ZXh0Zm9vdGVyZ2xpbW1lciZ0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLWhlbHAtMC10ZXh0Zm9vdGVyZ2xpbW1lci1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEDQoNCsKpIDIwMjQgTGlua2VkSW4gQ29ycG9yYXRpb24sIDF6d25qMDAwIFdlc3QgTWF1ZGUgQXZlbnVlLCBTdW5ueXZhbGUsIENBIDk0MDg1Lg0KTGlua2VkSW4gYW5kIHRoZSBMaW5rZWRJbiBsb2dvIGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgTGlua2VkSW4u" + } + }, + { + "partId": "1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html;charset=UTF-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + }, + { + "name": "Content-ID", + "value": "html-body" + } + ], + "body": { + "size": 102165, + "data": "PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPiA8aGVhZD4gPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCI-IDxtZXRhIG5hbWU9IkhhbmRoZWxkRnJpZW5kbHkiIGNvbnRlbnQ9InRydWUiPiA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoOyBpbml0aWFsLXNjYWxlPTAuNjY2NjY3OyB1c2VyLXNjYWxhYmxlPTAiPiA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoIj4gPHRpdGxlPjwvdGl0bGU-IDxzdHlsZT4NCiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MTJweCkgeyAubWVyY2Fkby1jb250YWluZXIgeyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9IH0NCiAgICAgICAgICA8L3N0eWxlPiA8c3R5bGU-DQogICAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHsgLmlubGluZS1idXR0b24sIC5pbmxpbmUtYnV0dG9uIHRhYmxlIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9DQogICAgICAgICAgICAuZnVsbC13aWR0aC1idXR0b24sIC5mdWxsLXdpZHRoLWJ1dHRvbiB0YWJsZSB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH0gfQ0KICAgICAgICAgIDwvc3R5bGU-IDxzdHlsZT5ib2R5IHtmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgc3lzdGVtLXVpLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgJ0hlbHZldGljYSBOZXVlJywNCiAgICAgICAgICAgICdGaXJhIFNhbnMnLCBVYnVudHUsIE94eWdlbiwgJ094eWdlbiBTYW5zJywgQ2FudGFyZWxsLCAnRHJvaWQgU2FucycsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsDQogICAgICAgICAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJywgJ0x1Y2lkYSBHcmFuZGUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO308L3N0eWxlPiA8IS0tW2lmIG1zb10-PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gPC9zdHlsZT48IVtlbmRpZl0tLT4gPCEtLVtpZiBJRV0-PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gPC9zdHlsZT48IVtlbmRpZl0tLT4gPC9oZWFkPiA8Ym9keSBkaXI9Imx0ciIgY2xhc3M9ImZvbnQtc2FucyBiZy1jb2xvci1iYWNrZ3JvdW5kLWNhbnZhcyB3LWZ1bGwgbS0wIHAtMCBwdC0xIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbWFyZ2luOiAwcHg7IHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmMmYwOyBwYWRkaW5nOiAwcHg7IHBhZGRpbmctdG9wOiA4cHg7IGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCAnSGVsdmV0aWNhIE5ldWUnLCAnRmlyYSBTYW5zJywgVWJ1bnR1LCBPeHlnZW4sICdPeHlnZW4gU2FucycsIENhbnRhcmVsbCwgJ0Ryb2lkIFNhbnMnLCAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJywgJ0x1Y2lkYSBHcmFuZGUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyI-IDxkaXYgY2xhc3M9ImgtMCBvcGFjaXR5LTAgdGV4dC10cmFuc3BhcmVudCBpbnZpc2libGUgb3ZlcmZsb3ctaGlkZGVuIHctMCBtYXgtaC1bMF0iIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IGhlaWdodDogMHB4OyBtYXgtaGVpZ2h0OiAwOyB3aWR0aDogMHB4OyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAwOyBtc28taGlkZTogYWxsOyIgZGF0YS1lbWFpbC1wcmVoZWFkZXI9InRydWUiPkkgd2FzIHNob2NrZWQgdGhlIGZpcnN0IHRpbWUgSSBzYXcgYW4gZW1haWwgdGhyZWFkIGJldHdlZW4gQ0VPcy4g4p6h77iPIFN1cGVy4oCmPC9kaXY-IDxkaXYgY2xhc3M9ImgtMCBvcGFjaXR5LTAgdGV4dC10cmFuc3BhcmVudCBpbnZpc2libGUgb3ZlcmZsb3ctaGlkZGVuIHctMCBtYXgtaC1bMF0iIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IGhlaWdodDogMHB4OyBtYXgtaGVpZ2h0OiAwOyB3aWR0aDogMHB4OyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAwOyBtc28taGlkZTogYWxsOyI-IM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgPC9kaXY-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjUxMiIgYWxpZ249ImNlbnRlciIgY2xhc3M9Im1lcmNhZG8tY29udGFpbmVyIHctWzUxMnB4XSBtYXgtdy1bNTEycHhdIG14LWF1dG8gbXktMCBwLTAgYmctY29sb3ItYmFja2dyb3VuZC1jb250YWluZXIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgbWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tYm90dG9tOiAwcHg7IG1hcmdpbi1sZWZ0OiBhdXRvOyBtYXJnaW4tcmlnaHQ6IGF1dG87IHdpZHRoOiA1MTJweDsgbWF4LXdpZHRoOiA1MTJweDsgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsgcGFkZGluZzogMHB4OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9InRleHQtY2VudGVyIHAtMyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nOiAyNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9Im1pbi13LWZ1bGwiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgbWluLXdpZHRoOiAxMDAlOyI-IDx0Ym9keT4gPHRyPiA8dGQgYWxpZ249ImxlZnQiIHZhbGlnbj0ibWlkZGxlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vZmVlZC8_bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1oZWFkZXItMC1ob21lX2dsaW1tZXJfZHluYW1pY19iYWRnaW5nX2hpZ2hfZHBpJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLWhlYWRlci0wLWhvbWVfZ2xpbW1lcl9keW5hbWljX2JhZGdpbmdfaGlnaF9kcGktbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InctWzg0cHhdIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHdpZHRoOiA4NHB4OyI-IDxpbWcgY2xhc3M9ImgtWzM3cHhdIHctWzEwMXB4XSIgYWx0PSJMaW5rZWRJbiIgc3JjPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9kbXMvbG9nby92Mj9iYWRnZVRoZW1lPW1lcmNhZG8mYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1udWxsLTAtY29tbXMlN0ViYWRnaW5nJTdFZHluYW1pYyU3RWdsaW1tZXIlN0V2Mi1udWxsLWo3enU3aSU3RW0zeDQzY3N2JTdFMmMtbnVsbC1udWxsJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1udWxsLTAtY29tbXMlN0ViYWRnaW5nJTdFZHluYW1pYyU3RWdsaW1tZXIlN0V2MiZhbXA7X3NpZz0wcDFBZ2xuREE0RGJ3MSIgZGF0YS10ZXN0LWhlYWRlci1keW5hbWljLWJhZGdpbmctaW1nLWhpZ2gtZHBpIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGhlaWdodDogMzdweDsgd2lkdGg6IDEwMXB4OyIgd2lkdGg9IjEwMSIgaGVpZ2h0PSIzNyI-IDwvYT4gPC90ZD4gPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0icmlnaHQiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBkYXRhLXRlc3QtaGVhZGVyLXByb2ZpbGUgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgYWxpZ249InJpZ2h0IiB2YWxpZ249Im1pZGRsZSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDxhIGhyZWY9Imh0dHBzOi8vaW4ubGlua2VkaW4uY29tL2NvbW0vaW4va2h1c2hhbC1wcy03YTYyYjcyODU_bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1oZWFkZXItMC1wcm9maWxlX2dsaW1tZXImYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtaGVhZGVyLTAtcHJvZmlsZV9nbGltbWVyLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsiPiA8c3BhbiBjbGFzcz0ibm8tdW5kZXJsaW5lIHRleHQtc3lzdGVtLWdyYXktOTAiIHN0eWxlPSJjb2xvcjogIzI4MjgyODsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij5LaHVzaGFsIFBTPC9zcGFuPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwLTAgIXBiLTAgcGItMyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nOiAwcHg7IHBhZGRpbmctYm90dG9tOiAwcHggIWltcG9ydGFudDsiPiA8ZGl2PiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0icC0zIGJvcmRlci0wIGJvcmRlci1iLTEgYm9yZGVyLXNvbGlkIGJvcmRlci1zeXN0ZW0tZ3JheS0zMCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItd2lkdGg6IDA7IGJvcmRlci1ib3R0b20td2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLWNvbG9yOiAjZTZlNmU2OyBwYWRkaW5nOiAyNHB4OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjY0NzE2ODQxOTc2MDUzNzYwP29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0LTAtd3JhcHBlcn5saW5rJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdC0wLXdyYXBwZXJ-bGluay1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idy1mdWxsIiBkYXRhLXRlc3QtaWQ9Im5ldHdvcmstcG9zdC1saW5rIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHdpZHRoOiAxMDAlOyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vZmVlZC91cGRhdGUvdXJuOmxpOmFjdGl2aXR5OjcyNjQ3MTY4NDE5NzYwNTM3NjA_aGlnaGxpZ2h0ZWRVcGRhdGVVcm49dXJuJTNBbGklM0FhY3Rpdml0eSUzQTcyNjQ3MTY4NDE5NzYwNTM3NjAmYW1wO3Nob3dDb21tZW50Qm94PXRydWUmYW1wO29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtYWN0b3JfY2FyZCZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrX3Bvc3QtMC1hY3Rvcl9jYXJkLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJibG9jayIgZGF0YS10ZXN0LWlkPSJuZXR3b3JrLXBvc3QtbGluayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgZGlzcGxheTogYmxvY2s7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyIGRhdGEtdGVzdC1pZD0idjJzdHlsZS1kaXNhYmxlIj4gPHRkIGNsYXNzPSJ3LVs3MnB4XSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB3aWR0aDogNzJweDsiIHdpZHRoPSI3MiI-IDxpbWcgY2xhc3M9ImlubGluZS1ibG9jayByZWxhdGl2ZSBiZy1jb2xvci1lbnRpdHktZ2hvc3QtYmFja2dyb3VuZCBjbGlwLXBhdGgtY2lyY2xlLTUwIHJvdW5kZWQtZnVsbCB3LTYgaC02ICF3LVs3MnB4XSAhaC1bNzJweF0gIWJsb2NrIiBzcmM9Imh0dHBzOi8vbWVkaWEubGljZG4uY29tL2Rtcy9pbWFnZS92Mi9DNEQwM0FRSExib2l4VFU0QkdRL3Byb2ZpbGUtZGlzcGxheXBob3RvLXNocmlua180MDBfNDAwL3Byb2ZpbGUtZGlzcGxheXBob3RvLXNocmlua180MDBfNDAwLzAvMTY0Mzg1MDY2MzU5OT9lPTIxNDc0ODM2NDcmYW1wO3Y9YmV0YSZhbXA7dD02RWJXZnhOOEpZMC1FWjZXN0xaRTd3cGsxNVZXdHJQeERXbnBIWm9XdVlzIiBhbHQ9Ikt5bGUgQ29sZW1hbiIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgcG9zaXRpb246IHJlbGF0aXZlOyBib3JkZXItcmFkaXVzOiA5OTk5cHg7IGJhY2tncm91bmQtY29sb3I6ICNlYWU2ZGY7IGNsaXAtcGF0aDogY2lyY2xlKDUwJSk7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IGhlaWdodDogNzJweCAhaW1wb3J0YW50OyB3aWR0aDogNzJweCAhaW1wb3J0YW50OyIgd2lkdGg9IjcyIiBoZWlnaHQ9IjcyIj4gPC90ZD4gPHRkIGNsYXNzPSJwbC0xIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctbGVmdDogOHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJmb250LWJvbGQgdGV4dC1tZCBsZWFkaW5nLXJlZ3VsYXIgdGV4dC1zeXN0ZW0tZ3JheS05MCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGxpbmUtaGVpZ2h0OiAxLjI1OyBjb2xvcjogIzI4MjgyODsiPiBLeWxlIENvbGVtYW4gPC90ZD4gPC90cj4gPHRyIGRhdGEtdGVzdC1pZD0iYWN0b3ItY2FyZC1oZWFkbGluZSI-IDx0ZCBjbGFzcz0idGV4dC1zbSBsZWFkaW5nLVsxNnB4XSB0ZXh0LWNvbG9yLXRleHQtc29saWQtc2Vjb25kYXJ5IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDE2cHg7IGNvbG9yOiAjNjY2NjY2OyI-IENNTyBAIENvcHkuYWkgfHwgSGVscGluZyBjb21wYW5pZXMgZWxpbWluYXRlIEdUTSBCbG9hdOKApiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDx0ZCBjbGFzcz0icGwtMSBtdC1bMjJweF0gbXItMSBpbmxpbmUtYmxvY2siIGRhdGEtdGVzdC1pZD0ibmV0d29yay1wb3N0LWZvbGxvdy1jdGEiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgbWFyZ2luLXJpZ2h0OiA4cHg7IG1hcmdpbi10b3A6IDIycHg7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcGFkZGluZy1sZWZ0OiA4cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9ImVtYWlsLWJ1dHRvbiAiIGRhdGEtdGVzdC1pZD0iZW1haWwtYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249Im1pZGRsZSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2J1aWxkLXJlbGF0aW9uL3Blb3BsZS1mb2xsb3cvP2VudGl0eU5hbWU9a3lsZXRjb2xlbWFuJmFtcDtlbnRpdHlVcm49QURvQUFBWVItZWtCS3VNM2oxZko5UlY5V2cwRnczZ2dTOEpQcXhzJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtZm9sbG93X2N0YS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBhcmlhLWxhYmVsPSJGb2xsb3ciIGNsYXNzPSJhbGlnbi10b3Agbm8tdW5kZXJsaW5lICIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSJhdXRvIiBjbGFzcz0iYm9yZGVyLXNlcGFyYXRlICIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9ImJ0bi1zbSBidG4tdGVydGlhcnktZW1waGFzaXMgYm9yZGVyLW5vbmUgYnV0dG9uLWxpbmsgbGVhZGluZy1yZWd1bGFyICFtaW4taC1bYXV0b10gIXNoYWRvdy1ub25lIGJvcmRlci0xIGJvcmRlci1zb2xpZCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBoZWlnaHQ6IG1pbi1jb250ZW50OyBib3JkZXItcmFkaXVzOiAyNHB4OyBwYWRkaW5nLXRvcDogN3B4OyBwYWRkaW5nLWJvdHRvbTogN3B4OyBwYWRkaW5nLWxlZnQ6IDE2cHg7IHBhZGRpbmctcmlnaHQ6IDE2cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNjAwOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOyBjb2xvcjogIzBhNjZjMjsgYm9yZGVyLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogbm9uZTsgbGluZS1oZWlnaHQ6IDEuMjU7IG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsgYm94LXNoYWRvdzogMCAwICMwMDAwLCAwIDAgIzAwMDAsIDAgMCAjMDAwMCAhaW1wb3J0YW50OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2J1aWxkLXJlbGF0aW9uL3Blb3BsZS1mb2xsb3cvP2VudGl0eU5hbWU9a3lsZXRjb2xlbWFuJmFtcDtlbnRpdHlVcm49QURvQUFBWVItZWtCS3VNM2oxZko5UlY5V2cwRnczZ2dTOEpQcXhzJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtZm9sbG93X2N0YS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiB0YWJpbmRleD0iLTEiIGFyaWEtaGlkZGVuPSJ0cnVlIiBjbGFzcz0ibm8tdW5kZXJsaW5lIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IDxzcGFuIGNsYXNzPSJuby11bmRlcmxpbmUgIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gRm9sbG93IDwvc3Bhbj4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwdC0yIHRleHQtbWQgbGVhZGluZy1yZWd1bGFyIHRleHQtc3lzdGVtLWdyYXktOTAiIGNvbHNwYW49IjIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDE2cHg7IGZvbnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDEuMjU7IGNvbG9yOiAjMjgyODI4OyI-IDxzcGFuIGRhdGEtdGVzdC1pZD0idHJ1bmNhdGVkLW1lc3NhZ2UtdGV4dCI-IEkgd2FzIHNob2NrZWQgdGhlIGZpcnN0IHRpbWUgSSBzYXcgYW4gZW1haWwgdGhyZWFkIGJldHdlZW4gQ0VPcy4g4p6h77iPIFN1cGVyIHNob3J0IHNlbnRlbmNlcyDinqHvuI8gSW1wcm9wZXLigKYgPC9zcGFuPiA8c3BhbiBkYXRhLXRlc3QtaWQ9InRydW5jYXRlZC1tZXNzYWdlLXNlZS1tb3JlIiBjbGFzcz0idGV4dC1jb2xvci1saW5rIGZvbnQtYm9sZCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMGE2NmMyOyI-IHNlZSBtb3JlIDwvc3Bhbj4gPC90ZD4gPC90cj4gPHRyIGRhdGEtdGVzdC1pZD0ibmV0d29yay1wb3N0LXNvY2lhbC1tZXRhZGF0YSI-IDx0ZCBjbGFzcz0icHQtMiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXRvcDogMTZweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSJhdXRvIiBjbGFzcz0idy1hdXRvIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHdpZHRoOiBhdXRvOyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9InByLTAuNSIgZGF0YS10ZXN0LXJlYWN0aW9uPSJMSUtFIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctcmlnaHQ6IDRweDsiPiA8aW1nIGNsYXNzPSJibG9jayB3LTIgaC0yIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9zYy9oLzkxdGRzY24waDFhYW9lZnVpOWNyZjExajYiIGFsdD0iTElLRSIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTZweDsgd2lkdGg6IDE2cHg7IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPiA8L3RkPiA8dGQgY2xhc3M9InByLTAuNSIgZGF0YS10ZXN0LXJlYWN0aW9uPSJQUkFJU0UiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1yaWdodDogNHB4OyI-IDxpbWcgY2xhc3M9ImJsb2NrIHctMiBoLTIiIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL3NjL2gvYWRpZzV1cnF4aTAzcXp1eTZpeWpmbTFiNSIgYWx0PSJQUkFJU0UiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDE2cHg7IHdpZHRoOiAxNnB4OyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij4gPC90ZD4gPHRkIGNsYXNzPSJwci0wLjUiIGRhdGEtdGVzdC1yZWFjdGlvbj0iRU1QQVRIWSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXJpZ2h0OiA0cHg7Ij4gPGltZyBjbGFzcz0iYmxvY2sgdy0yIGgtMiIgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vc2MvaC9ldnMyeDV6Zm56NWcweHJjNnUyMnRyZXEyIiBhbHQ9IkVNUEFUSFkiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDE2cHg7IHdpZHRoOiAxNnB4OyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij4gPC90ZD4gPHRkIGNsYXNzPSJ0ZXh0LXNtIGxlYWRpbmctcmVndWxhciBmb250LW5vcm1hbCB0ZXh0LXN5c3RlbS1ncmF5LTcwIiBkYXRhLXRlc3QtaWQ9InJlYWN0aW9ucy1jb3VudCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGxpbmUtaGVpZ2h0OiAxLjI1OyBjb2xvcjogIzY2NjY2NjsiPiAxLDI4OSA8L3RkPiA8dGQgY2xhc3M9InB4LTAuNSIgZGF0YS10ZXN0LWlkPSJzZXBhcmF0b3IiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1sZWZ0OiA0cHg7IHBhZGRpbmctcmlnaHQ6IDRweDsiPsK3PC90ZD4gPHRkIGNsYXNzPSJ0ZXh0LXNtIGxlYWRpbmctcmVndWxhciBmb250LW5vcm1hbCB0ZXh0LXN5c3RlbS1ncmF5LTcwIiBkYXRhLXRlc3QtaWQ9ImNvbW1lbnRzLWNvdW50IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDQwMDsgbGluZS1oZWlnaHQ6IDEuMjU7IGNvbG9yOiAjNjY2NjY2OyI-IDIzOCBDb21tZW50cyA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8dHIgZGF0YS10ZXN0LWlkPSJyZWFkLW1vcmUtY3RhLWJsb2NrIj4gPHRkIGNsYXNzPSJwdC0zIiBjb2xzcGFuPSIyIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctdG9wOiAyNHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJlbWFpbC1idXR0b24gdy1mdWxsIGtvc2hpbl9fYnV0dG9uLXdpdGgtZnVsbC13aWR0aCIgZGF0YS10ZXN0LWlkPSJlbWFpbC1idXR0b24iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgd2lkdGg6IDEwMCU7Ij4gPHRib2R5PiA8dHI-IDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249Im1pZGRsZSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjY0NzE2ODQxOTc2MDUzNzYwP29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0fmN0YS0wLXJlYWR-bW9yZSZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhLTAtcmVhZH5tb3JlLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGFyaWEtbGFiZWw9IlJlYWQgbW9yZSIgY2xhc3M9ImFsaWduLXRvcCBuby11bmRlcmxpbmUgIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0iYm9yZGVyLXNlcGFyYXRlICIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9ImJ0bi1tZCBidG4tc2Vjb25kYXJ5LWVtcGhhc2lzIGJvcmRlci1jb2xvci1icmFuZCBidXR0b24tbGluayBsZWFkaW5nLXJlZ3VsYXIgIW1pbi1oLVthdXRvXSAhc2hhZG93LW5vbmUgYm9yZGVyLTEgYm9yZGVyLXNvbGlkIiBkYXRhLXRlc3QtaWQ9InJlYWQtbW9yZS1jdGEtYmVsb3ciIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgaGVpZ2h0OiBtaW4tY29udGVudDsgYm9yZGVyLXJhZGl1czogMjRweDsgcGFkZGluZy10b3A6IDEycHg7IHBhZGRpbmctYm90dG9tOiAxMnB4OyBwYWRkaW5nLWxlZnQ6IDI0cHg7IHBhZGRpbmctcmlnaHQ6IDI0cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOyBjb2xvcjogIzBhNjZjMjsgYm9yZGVyLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci1jb2xvcjogIzBhNjZjMjsgbGluZS1oZWlnaHQ6IDEuMjU7IG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsgYm94LXNoYWRvdzogMCAwICMwMDAwLCAwIDAgIzAwMDAsIDAgMCAjMDAwMCAhaW1wb3J0YW50OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjY0NzE2ODQxOTc2MDUzNzYwP29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0fmN0YS0wLXJlYWR-bW9yZSZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhLTAtcmVhZH5tb3JlLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIHRhYmluZGV4PSItMSIgYXJpYS1oaWRkZW49InRydWUiIGNsYXNzPSJuby11bmRlcmxpbmUiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyI-IDxzcGFuIGNsYXNzPSJuby11bmRlcmxpbmUgdGV4dC1jb2xvci1icmFuZCIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPiBSZWFkIG1vcmUgPC9zcGFuPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvYT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC9hPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icC0zIGJvcmRlci0wIGJvcmRlci1iLTEgYm9yZGVyLXNvbGlkIGJvcmRlci1zeXN0ZW0tZ3JheS0zMCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItd2lkdGg6IDA7IGJvcmRlci1ib3R0b20td2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLWNvbG9yOiAjZTZlNmU2OyBwYWRkaW5nOiAyNHB4OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjYzMDk4NjMwMDQ2MTcxMTM3P29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0LTAtd3JhcHBlcn5saW5rJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdC0wLXdyYXBwZXJ-bGluay1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idy1mdWxsIiBkYXRhLXRlc3QtaWQ9Im5ldHdvcmstcG9zdC1saW5rIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHdpZHRoOiAxMDAlOyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vZmVlZC91cGRhdGUvdXJuOmxpOmFjdGl2aXR5OjcyNjMwOTg2MzAwNDYxNzExMzc_aGlnaGxpZ2h0ZWRVcGRhdGVVcm49dXJuJTNBbGklM0FhY3Rpdml0eSUzQTcyNjMwOTg2MzAwNDYxNzExMzcmYW1wO3Nob3dDb21tZW50Qm94PXRydWUmYW1wO29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtYWN0b3JfY2FyZCZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrX3Bvc3QtMC1hY3Rvcl9jYXJkLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJibG9jayIgZGF0YS10ZXN0LWlkPSJuZXR3b3JrLXBvc3QtbGluayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgZGlzcGxheTogYmxvY2s7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyIGRhdGEtdGVzdC1pZD0idjJzdHlsZS1kaXNhYmxlIj4gPHRkIGNsYXNzPSJ3LVs3MnB4XSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB3aWR0aDogNzJweDsiIHdpZHRoPSI3MiI-IDxpbWcgY2xhc3M9ImlubGluZS1ibG9jayByZWxhdGl2ZSBiZy1jb2xvci1lbnRpdHktZ2hvc3QtYmFja2dyb3VuZCBjbGlwLXBhdGgtY2lyY2xlLTUwIHJvdW5kZWQtZnVsbCB3LTYgaC02ICF3LVs3MnB4XSAhaC1bNzJweF0gIWJsb2NrIiBzcmM9Imh0dHBzOi8vbWVkaWEubGljZG4uY29tL2Rtcy9pbWFnZS92Mi9ENEQwM0FRRm8tWkhqLU4wZlFnL3Byb2ZpbGUtZGlzcGxheXBob3RvLXNocmlua180MDBfNDAwL3Byb2ZpbGUtZGlzcGxheXBob3RvLXNocmlua180MDBfNDAwLzAvMTcyMjQxMzMzODM5OD9lPTIxNDc0ODM2NDcmYW1wO3Y9YmV0YSZhbXA7dD1sVC0wRk5xNmFmUmlXbkoyWHNrTnZPQTkwWXBXOURUTVJGY2JTbFNnanU4IiBhbHQ9IktodXNoaSBBZ3Jhd2FsIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBwb3NpdGlvbjogcmVsYXRpdmU7IGJvcmRlci1yYWRpdXM6IDk5OTlweDsgYmFja2dyb3VuZC1jb2xvcjogI2VhZTZkZjsgY2xpcC1wYXRoOiBjaXJjbGUoNTAlKTsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgaGVpZ2h0OiA3MnB4ICFpbXBvcnRhbnQ7IHdpZHRoOiA3MnB4ICFpbXBvcnRhbnQ7IiB3aWR0aD0iNzIiIGhlaWdodD0iNzIiPiA8L3RkPiA8dGQgY2xhc3M9InBsLTEiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1sZWZ0OiA4cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9ImZvbnQtYm9sZCB0ZXh0LW1kIGxlYWRpbmctcmVndWxhciB0ZXh0LXN5c3RlbS1ncmF5LTkwIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsgbGluZS1oZWlnaHQ6IDEuMjU7IGNvbG9yOiAjMjgyODI4OyI-IEtodXNoaSBBZ3Jhd2FsIDwvdGQ-IDwvdHI-IDx0ciBkYXRhLXRlc3QtaWQ9ImFjdG9yLWNhcmQtaGVhZGxpbmUiPiA8dGQgY2xhc3M9InRleHQtc20gbGVhZGluZy1bMTZweF0gdGV4dC1jb2xvci10ZXh0LXNvbGlkLXNlY29uZGFyeSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxNnB4OyBjb2xvcjogIzY2NjY2NjsiPiBTb2Z0d2FyZSBFbmdpbmVlciB8fCBFeCBTREUgSW50ZXJuIEAgSVRKT0JYUyxHRkcgfHzigKYgPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC9hPiA8L3RkPiA8dGQgY2xhc3M9InBsLTEgbXQtWzIycHhdIG1yLTEgaW5saW5lLWJsb2NrIiBkYXRhLXRlc3QtaWQ9Im5ldHdvcmstcG9zdC1mb2xsb3ctY3RhIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IG1hcmdpbi1yaWdodDogOHB4OyBtYXJnaW4tdG9wOiAyMnB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctbGVmdDogOHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJlbWFpbC1idXR0b24gIiBkYXRhLXRlc3QtaWQ9ImVtYWlsLWJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJtaWRkbGUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9idWlsZC1yZWxhdGlvbi9wZW9wbGUtZm9sbG93Lz9lbnRpdHlOYW1lPWtodXNoaS1hZ3Jhd2FsLXplcm90d28mYW1wO2VudGl0eVVybj1BRG9BQURPLWxvY0JySnRLQXVhaldQczJHbmhENWR0dVUxUmNpVWsmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtZm9sbG93X2N0YSZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrX3Bvc3QtMC1mb2xsb3dfY3RhLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGFyaWEtbGFiZWw9IkZvbGxvdyIgY2xhc3M9ImFsaWduLXRvcCBuby11bmRlcmxpbmUgIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9ImF1dG8iIGNsYXNzPSJib3JkZXItc2VwYXJhdGUgIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0iYnRuLXNtIGJ0bi10ZXJ0aWFyeS1lbXBoYXNpcyBib3JkZXItbm9uZSBidXR0b24tbGluayBsZWFkaW5nLXJlZ3VsYXIgIW1pbi1oLVthdXRvXSAhc2hhZG93LW5vbmUgYm9yZGVyLTEgYm9yZGVyLXNvbGlkIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGhlaWdodDogbWluLWNvbnRlbnQ7IGJvcmRlci1yYWRpdXM6IDI0cHg7IHBhZGRpbmctdG9wOiA3cHg7IHBhZGRpbmctYm90dG9tOiA3cHg7IHBhZGRpbmctbGVmdDogMTZweDsgcGFkZGluZy1yaWdodDogMTZweDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7IGNvbG9yOiAjMGE2NmMyOyBib3JkZXItd2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBub25lOyBsaW5lLWhlaWdodDogMS4yNTsgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50OyBib3gtc2hhZG93OiAwIDAgIzAwMDAsIDAgMCAjMDAwMCwgMCAwICMwMDAwICFpbXBvcnRhbnQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vYnVpbGQtcmVsYXRpb24vcGVvcGxlLWZvbGxvdy8_ZW50aXR5TmFtZT1raHVzaGktYWdyYXdhbC16ZXJvdHdvJmFtcDtlbnRpdHlVcm49QURvQUFETy1sb2NCckp0S0F1YWpXUHMyR25oRDVkdHVVMVJjaVVrJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtZm9sbG93X2N0YS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiB0YWJpbmRleD0iLTEiIGFyaWEtaGlkZGVuPSJ0cnVlIiBjbGFzcz0ibm8tdW5kZXJsaW5lIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IDxzcGFuIGNsYXNzPSJuby11bmRlcmxpbmUgIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gRm9sbG93IDwvc3Bhbj4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwdC0yIHRleHQtbWQgbGVhZGluZy1yZWd1bGFyIHRleHQtc3lzdGVtLWdyYXktOTAiIGNvbHNwYW49IjIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDE2cHg7IGZvbnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDEuMjU7IGNvbG9yOiAjMjgyODI4OyI-IDxzcGFuIGRhdGEtdGVzdC1pZD0idHJ1bmNhdGVkLW1lc3NhZ2UtdGV4dCI-IPCfmqhEZWxldGUgdGhlc2UgZnJvbSB5b3VyIENWIG5vdyHwn5qoIEltYWdpbmUgdGhlIHJlY3J1aXRlciBzaXR0aW5nIHRoZXJlLCBnb2luZyB0aHJvdWdoIGRvemVucyBvZiBDVnMgZXZlcnnigKYgPC9zcGFuPiA8c3BhbiBkYXRhLXRlc3QtaWQ9InRydW5jYXRlZC1tZXNzYWdlLXNlZS1tb3JlIiBjbGFzcz0idGV4dC1jb2xvci1saW5rIGZvbnQtYm9sZCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMGE2NmMyOyI-IHNlZSBtb3JlIDwvc3Bhbj4gPC90ZD4gPC90cj4gPHRyIGRhdGEtdGVzdC1pZD0ibmV0d29yay1wb3N0LXNvY2lhbC1tZXRhZGF0YSI-IDx0ZCBjbGFzcz0icHQtMiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXRvcDogMTZweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSJhdXRvIiBjbGFzcz0idy1hdXRvIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHdpZHRoOiBhdXRvOyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9InByLTAuNSIgZGF0YS10ZXN0LXJlYWN0aW9uPSJMSUtFIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctcmlnaHQ6IDRweDsiPiA8aW1nIGNsYXNzPSJibG9jayB3LTIgaC0yIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9zYy9oLzkxdGRzY24waDFhYW9lZnVpOWNyZjExajYiIGFsdD0iTElLRSIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTZweDsgd2lkdGg6IDE2cHg7IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPiA8L3RkPiA8dGQgY2xhc3M9InByLTAuNSIgZGF0YS10ZXN0LXJlYWN0aW9uPSJQUkFJU0UiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1yaWdodDogNHB4OyI-IDxpbWcgY2xhc3M9ImJsb2NrIHctMiBoLTIiIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL3NjL2gvYWRpZzV1cnF4aTAzcXp1eTZpeWpmbTFiNSIgYWx0PSJQUkFJU0UiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDE2cHg7IHdpZHRoOiAxNnB4OyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij4gPC90ZD4gPHRkIGNsYXNzPSJwci0wLjUiIGRhdGEtdGVzdC1yZWFjdGlvbj0iRU1QQVRIWSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXJpZ2h0OiA0cHg7Ij4gPGltZyBjbGFzcz0iYmxvY2sgdy0yIGgtMiIgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vc2MvaC9ldnMyeDV6Zm56NWcweHJjNnUyMnRyZXEyIiBhbHQ9IkVNUEFUSFkiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDE2cHg7IHdpZHRoOiAxNnB4OyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij4gPC90ZD4gPHRkIGNsYXNzPSJ0ZXh0LXNtIGxlYWRpbmctcmVndWxhciBmb250LW5vcm1hbCB0ZXh0LXN5c3RlbS1ncmF5LTcwIiBkYXRhLXRlc3QtaWQ9InJlYWN0aW9ucy1jb3VudCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGxpbmUtaGVpZ2h0OiAxLjI1OyBjb2xvcjogIzY2NjY2NjsiPiAyMjIgPC90ZD4gPHRkIGNsYXNzPSJweC0wLjUiIGRhdGEtdGVzdC1pZD0ic2VwYXJhdG9yIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctbGVmdDogNHB4OyBwYWRkaW5nLXJpZ2h0OiA0cHg7Ij7CtzwvdGQ-IDx0ZCBjbGFzcz0idGV4dC1zbSBsZWFkaW5nLXJlZ3VsYXIgZm9udC1ub3JtYWwgdGV4dC1zeXN0ZW0tZ3JheS03MCIgZGF0YS10ZXN0LWlkPSJjb21tZW50cy1jb3VudCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGxpbmUtaGVpZ2h0OiAxLjI1OyBjb2xvcjogIzY2NjY2NjsiPiAxMTEgQ29tbWVudHMgPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPHRyIGRhdGEtdGVzdC1pZD0icmVhZC1tb3JlLWN0YS1ibG9jayI-IDx0ZCBjbGFzcz0icHQtMyIgY29sc3Bhbj0iMiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXRvcDogMjRweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0iZW1haWwtYnV0dG9uIHctZnVsbCBrb3NoaW5fX2J1dHRvbi13aXRoLWZ1bGwtd2lkdGgiIGRhdGEtdGVzdC1pZD0iZW1haWwtYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHdpZHRoOiAxMDAlOyI-IDx0Ym9keT4gPHRyPiA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJtaWRkbGUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2MzA5ODYzMDA0NjE3MTEzNz9vcmlnaW49TkVUV09SS19DT05WRVJTQVRJT05TJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGEtMC1yZWFkfm1vcmUmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0fmN0YS0wLXJlYWR-bW9yZS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBhcmlhLWxhYmVsPSJSZWFkIG1vcmUiIGNsYXNzPSJhbGlnbi10b3Agbm8tdW5kZXJsaW5lICIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgdmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9ImJvcmRlci1zZXBhcmF0ZSAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJidG4tbWQgYnRuLXNlY29uZGFyeS1lbXBoYXNpcyBib3JkZXItY29sb3ItYnJhbmQgYnV0dG9uLWxpbmsgbGVhZGluZy1yZWd1bGFyICFtaW4taC1bYXV0b10gIXNoYWRvdy1ub25lIGJvcmRlci0xIGJvcmRlci1zb2xpZCIgZGF0YS10ZXN0LWlkPSJyZWFkLW1vcmUtY3RhLWJlbG93IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGhlaWdodDogbWluLWNvbnRlbnQ7IGJvcmRlci1yYWRpdXM6IDI0cHg7IHBhZGRpbmctdG9wOiAxMnB4OyBwYWRkaW5nLWJvdHRvbTogMTJweDsgcGFkZGluZy1sZWZ0OiAyNHB4OyBwYWRkaW5nLXJpZ2h0OiAyNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsgY29sb3I6ICMwYTY2YzI7IGJvcmRlci13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItY29sb3I6ICMwYTY2YzI7IGxpbmUtaGVpZ2h0OiAxLjI1OyBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IDAgMCAjMDAwMCwgMCAwICMwMDAwLCAwIDAgIzAwMDAgIWltcG9ydGFudDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2MzA5ODYzMDA0NjE3MTEzNz9vcmlnaW49TkVUV09SS19DT05WRVJTQVRJT05TJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGEtMC1yZWFkfm1vcmUmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0fmN0YS0wLXJlYWR-bW9yZS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiB0YWJpbmRleD0iLTEiIGFyaWEtaGlkZGVuPSJ0cnVlIiBjbGFzcz0ibm8tdW5kZXJsaW5lIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsiPiA8c3BhbiBjbGFzcz0ibm8tdW5kZXJsaW5lIHRleHQtY29sb3ItYnJhbmQiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gUmVhZCBtb3JlIDwvc3Bhbj4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDx0cj48dGQgY2xhc3M9ImgtMiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBoZWlnaHQ6IDE2cHg7IiBoZWlnaHQ9IjE2Ij48L3RkPjwvdHI-IDx0cj4gPHRkIGNsYXNzPSJyb3VuZGVkLW1kIG92ZXJmbG93LWhpZGRlbiIgZGF0YS10ZXN0LWlkPSJuZXR3b3JrLXBvc3QtdXBkYXRlLWNhcmQiIGNvbHNwYW49IjIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgb3ZlcmZsb3c6IGhpZGRlbjsgYm9yZGVyLXJhZGl1czogOHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJiZy1jb29sLWdyYXktMjAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYmFja2dyb3VuZC1jb2xvcjogI2VkZjNmODsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0iYmctY2VudGVyIGJnLW5vLXJlcGVhdCBoLVsyNTJweF0gYmctc3lzdGVtLWdyYXktNDAiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgaGVpZ2h0OiAyNTJweDsgYmFja2dyb3VuZC1jb2xvcjogI2NmY2ZjZjsgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyOyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJnF1b3Q7aHR0cHM6Ly9tZWRpYS5saWNkbi5jb20vZG1zL2ltYWdlL3YyL0Q0RDIyQVFGd2dpMEZnRHhvUkEvZmVlZHNoYXJlLXNocmlua18yMDQ4XzE1MzYvZmVlZHNoYXJlLXNocmlua18yMDQ4XzE1MzYvMC8xNzMxNjU3NjUzNzExP2U9MTczNTE3MTIwMCZhbXA7dj1iZXRhJmFtcDt0PXdWejE3Xy0ycy1tbkRSVDU3c1Nxbm9rckZVTkFqZmM0RWh4LTZic1MwdVEmcXVvdDspOyIgaGVpZ2h0PSIyNTIiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2MzA5ODYzMDA0NjE3MTEzNz9oaWdobGlnaHRlZFVwZGF0ZVVybj11cm4lM0FsaSUzQWFjdGl2aXR5JTNBNzI2MzA5ODYzMDA0NjE3MTEzNyZhbXA7c2hvd0NvbW1lbnRCb3g9dHJ1ZSZhbXA7b3JpZ2luPU5FVFdPUktfQ09OVkVSU0FUSU9OUyZhbXA7bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS11cGRhdGV-Y2FyZC0wLXRodW1ibmFpbH5vdmVybGF5fmltYWdlJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLXVwZGF0ZX5jYXJkLTAtdGh1bWJuYWlsfm92ZXJsYXl-aW1hZ2UtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgYXJpYS1sYWJlbD0iUmVhZCBtb3JlIiBjbGFzcz0idy1mdWxsICIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB3aWR0aDogMTAwJTsiPiA8aW1nIGNsYXNzPSJ3LVs0NDhweF0gaC1bMjUycHhdIGhpZGRlbiAiIHNyYz0iaHR0cHM6Ly9tZWRpYS5saWNkbi5jb20vZG1zL2ltYWdlL3YyL0Q0RDIyQVFGd2dpMEZnRHhvUkEvZmVlZHNoYXJlLXNocmlua18yMDQ4XzE1MzYvZmVlZHNoYXJlLXNocmlua18yMDQ4XzE1MzYvMC8xNzMxNjU3NjUzNzExP2U9MTczNTE3MTIwMCZhbXA7dj1iZXRhJmFtcDt0PXdWejE3Xy0ycy1tbkRSVDU3c1Nxbm9rckZVTkFqZmM0RWh4LTZic1MwdVEiIGFsdD0iVmlldyBpbWFnZSIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgZGlzcGxheTogbm9uZTsgaGVpZ2h0OiAyNTJweDsgd2lkdGg6IDQ0OHB4OyIgd2lkdGg9IjQ0OCIgaGVpZ2h0PSIyNTIiPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvYT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InAtMyBib3JkZXItMCBib3JkZXItYi0xIGJvcmRlci1zb2xpZCBib3JkZXItc3lzdGVtLWdyYXktMzAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLXdpZHRoOiAwOyBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci1jb2xvcjogI2U2ZTZlNjsgcGFkZGluZzogMjRweDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2MzUzNTAyMjU5MzIyMDYwOD9vcmlnaW49TkVUV09SS19DT05WRVJTQVRJT05TJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdC0wLXdyYXBwZXJ-bGluayZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3QtMC13cmFwcGVyfmxpbmstbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InctZnVsbCIgZGF0YS10ZXN0LWlkPSJuZXR3b3JrLXBvc3QtbGluayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB3aWR0aDogMTAwJTsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjYzNTM1MDIyNTkzMjIwNjA4P2hpZ2hsaWdodGVkVXBkYXRlVXJuPXVybiUzQWxpJTNBYWN0aXZpdHklM0E3MjYzNTM1MDIyNTkzMjIwNjA4JmFtcDtzaG93Q29tbWVudEJveD10cnVlJmFtcDtvcmlnaW49TkVUV09SS19DT05WRVJTQVRJT05TJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWFjdG9yX2NhcmQmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtYWN0b3JfY2FyZC1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iYmxvY2siIGRhdGEtdGVzdC1pZD0ibmV0d29yay1wb3N0LWxpbmsiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IGRpc3BsYXk6IGJsb2NrOyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0ciBkYXRhLXRlc3QtaWQ9InYyc3R5bGUtZGlzYWJsZSI-IDx0ZCBjbGFzcz0idy1bNzJweF0iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgd2lkdGg6IDcycHg7IiB3aWR0aD0iNzIiPiA8aW1nIGNsYXNzPSJpbmxpbmUtYmxvY2sgcmVsYXRpdmUgYmctY29sb3ItZW50aXR5LWdob3N0LWJhY2tncm91bmQgY2xpcC1wYXRoLWNpcmNsZS01MCByb3VuZGVkLWZ1bGwgdy02IGgtNiAhdy1bNzJweF0gIWgtWzcycHhdICFibG9jayIgc3JjPSJodHRwczovL21lZGlhLmxpY2RuLmNvbS9kbXMvaW1hZ2UvdjIvRDREMDNBUUgzT3ExSzJDTWFsQS9wcm9maWxlLWRpc3BsYXlwaG90by1zaHJpbmtfNDAwXzQwMC9wcm9maWxlLWRpc3BsYXlwaG90by1zaHJpbmtfNDAwXzQwMC8wLzE3MjMzNTQ3NTY0MTE_ZT0yMTQ3NDgzNjQ3JmFtcDt2PWJldGEmYW1wO3Q9UXF5SnZMYlZVZzFXVW10N0RteDlFUnFYZVhZTm5wZEwyN3U5OWZOYUI3YyIgYWx0PSJQdXJ2aSBCb3RocmEiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYm9yZGVyLXJhZGl1czogOTk5OXB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFlNmRmOyBjbGlwLXBhdGg6IGNpcmNsZSg1MCUpOyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyBoZWlnaHQ6IDcycHggIWltcG9ydGFudDsgd2lkdGg6IDcycHggIWltcG9ydGFudDsiIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiI-IDwvdGQ-IDx0ZCBjbGFzcz0icGwtMSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWxlZnQ6IDhweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0iZm9udC1ib2xkIHRleHQtbWQgbGVhZGluZy1yZWd1bGFyIHRleHQtc3lzdGVtLWdyYXktOTAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBsaW5lLWhlaWdodDogMS4yNTsgY29sb3I6ICMyODI4Mjg7Ij4gUHVydmkgQm90aHJhIDwvdGQ-IDwvdHI-IDx0ciBkYXRhLXRlc3QtaWQ9ImFjdG9yLWNhcmQtaGVhZGxpbmUiPiA8dGQgY2xhc3M9InRleHQtc20gbGVhZGluZy1bMTZweF0gdGV4dC1jb2xvci10ZXh0LXNvbGlkLXNlY29uZGFyeSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxNnB4OyBjb2xvcjogIzY2NjY2NjsiPiBWZXJzYXRpbGUgUHJvamVjdCBNYW5hZ2VyIGZyb20gUHJvamVjdCBJbml0aWF0aW9uIHRv4oCmIDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvYT4gPC90ZD4gPHRkIGNsYXNzPSJwbC0xIG10LVsyMnB4XSBtci0xIGlubGluZS1ibG9jayIgZGF0YS10ZXN0LWlkPSJuZXR3b3JrLXBvc3QtZm9sbG93LWN0YSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW4tcmlnaHQ6IDhweDsgbWFyZ2luLXRvcDogMjJweDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLWxlZnQ6IDhweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0iZW1haWwtYnV0dG9uICIgZGF0YS10ZXN0LWlkPSJlbWFpbC1idXR0b24iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibWlkZGxlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vYnVpbGQtcmVsYXRpb24vcGVvcGxlLWZvbGxvdy8_ZW50aXR5TmFtZT1wdXJ2aS1ib3RocmEyNCZhbXA7ZW50aXR5VXJuPUFEb0FBQVBHUV9nQnNjRFdXWkFMN29oLWdnMnBiNWxCUHV0VzlhQSZhbXA7bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrX3Bvc3QtMC1mb2xsb3dfY3RhJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgYXJpYS1sYWJlbD0iRm9sbG93IiBjbGFzcz0iYWxpZ24tdG9wIG5vLXVuZGVybGluZSAiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgdmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iYXV0byIgY2xhc3M9ImJvcmRlci1zZXBhcmF0ZSAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJidG4tc20gYnRuLXRlcnRpYXJ5LWVtcGhhc2lzIGJvcmRlci1ub25lIGJ1dHRvbi1saW5rIGxlYWRpbmctcmVndWxhciAhbWluLWgtW2F1dG9dICFzaGFkb3ctbm9uZSBib3JkZXItMSBib3JkZXItc29saWQiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgaGVpZ2h0OiBtaW4tY29udGVudDsgYm9yZGVyLXJhZGl1czogMjRweDsgcGFkZGluZy10b3A6IDdweDsgcGFkZGluZy1ib3R0b206IDdweDsgcGFkZGluZy1sZWZ0OiAxNnB4OyBwYWRkaW5nLXJpZ2h0OiAxNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDYwMDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsgY29sb3I6ICMwYTY2YzI7IGJvcmRlci13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IG5vbmU7IGxpbmUtaGVpZ2h0OiAxLjI1OyBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IDAgMCAjMDAwMCwgMCAwICMwMDAwLCAwIDAgIzAwMDAgIWltcG9ydGFudDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9idWlsZC1yZWxhdGlvbi9wZW9wbGUtZm9sbG93Lz9lbnRpdHlOYW1lPXB1cnZpLWJvdGhyYTI0JmFtcDtlbnRpdHlVcm49QURvQUFBUEdRX2dCc2NEV1daQUw3b2gtZ2cycGI1bEJQdXRXOWFBJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtZm9sbG93X2N0YS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiB0YWJpbmRleD0iLTEiIGFyaWEtaGlkZGVuPSJ0cnVlIiBjbGFzcz0ibm8tdW5kZXJsaW5lIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IDxzcGFuIGNsYXNzPSJuby11bmRlcmxpbmUgIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gRm9sbG93IDwvc3Bhbj4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwdC0yIHRleHQtbWQgbGVhZGluZy1yZWd1bGFyIHRleHQtc3lzdGVtLWdyYXktOTAiIGNvbHNwYW49IjIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDE2cHg7IGZvbnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDEuMjU7IGNvbG9yOiAjMjgyODI4OyI-IDxzcGFuIGRhdGEtdGVzdC1pZD0idHJ1bmNhdGVkLW1lc3NhZ2UtdGV4dCI-IE92ZXJjb21pbmcgQnVybm91dCBpbiBSZW1vdGUgV29yazogTXkgRXhwZXJpZW5jZSBhbmQgU3RyYXRlZ2llcyBCdXJub3V0IGluIHJlbW90ZSB3b3JrIGlzIHJlYWwsIGFuZCBJ4oCZdmXigKYgPC9zcGFuPiA8c3BhbiBkYXRhLXRlc3QtaWQ9InRydW5jYXRlZC1tZXNzYWdlLXNlZS1tb3JlIiBjbGFzcz0idGV4dC1jb2xvci1saW5rIGZvbnQtYm9sZCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMGE2NmMyOyI-IHNlZSBtb3JlIDwvc3Bhbj4gPC90ZD4gPC90cj4gPHRyIGRhdGEtdGVzdC1pZD0ibmV0d29yay1wb3N0LXNvY2lhbC1tZXRhZGF0YSI-IDx0ZCBjbGFzcz0icHQtMiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXRvcDogMTZweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSJhdXRvIiBjbGFzcz0idy1hdXRvIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHdpZHRoOiBhdXRvOyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9InByLTAuNSIgZGF0YS10ZXN0LXJlYWN0aW9uPSJMSUtFIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctcmlnaHQ6IDRweDsiPiA8aW1nIGNsYXNzPSJibG9jayB3LTIgaC0yIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9zYy9oLzkxdGRzY24waDFhYW9lZnVpOWNyZjExajYiIGFsdD0iTElLRSIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTZweDsgd2lkdGg6IDE2cHg7IiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiPiA8L3RkPiA8dGQgY2xhc3M9InByLTAuNSIgZGF0YS10ZXN0LXJlYWN0aW9uPSJQUkFJU0UiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1yaWdodDogNHB4OyI-IDxpbWcgY2xhc3M9ImJsb2NrIHctMiBoLTIiIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL3NjL2gvYWRpZzV1cnF4aTAzcXp1eTZpeWpmbTFiNSIgYWx0PSJQUkFJU0UiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDE2cHg7IHdpZHRoOiAxNnB4OyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij4gPC90ZD4gPHRkIGNsYXNzPSJwci0wLjUiIGRhdGEtdGVzdC1yZWFjdGlvbj0iQVBQUkVDSUFUSU9OIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctcmlnaHQ6IDRweDsiPiA8aW1nIGNsYXNzPSJibG9jayB3LTIgaC0yIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9zYy9oL2J1ZDhsM2JobTBhanB5Y2R3anZhaGEybDEiIGFsdD0iQVBQUkVDSUFUSU9OIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxNnB4OyB3aWR0aDogMTZweDsiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI-IDwvdGQ-IDx0ZCBjbGFzcz0idGV4dC1zbSBsZWFkaW5nLXJlZ3VsYXIgZm9udC1ub3JtYWwgdGV4dC1zeXN0ZW0tZ3JheS03MCIgZGF0YS10ZXN0LWlkPSJyZWFjdGlvbnMtY291bnQiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNDAwOyBsaW5lLWhlaWdodDogMS4yNTsgY29sb3I6ICM2NjY2NjY7Ij4gNzggPC90ZD4gPHRkIGNsYXNzPSJweC0wLjUiIGRhdGEtdGVzdC1pZD0ic2VwYXJhdG9yIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctbGVmdDogNHB4OyBwYWRkaW5nLXJpZ2h0OiA0cHg7Ij7CtzwvdGQ-IDx0ZCBjbGFzcz0idGV4dC1zbSBsZWFkaW5nLXJlZ3VsYXIgZm9udC1ub3JtYWwgdGV4dC1zeXN0ZW0tZ3JheS03MCIgZGF0YS10ZXN0LWlkPSJjb21tZW50cy1jb3VudCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA0MDA7IGxpbmUtaGVpZ2h0OiAxLjI1OyBjb2xvcjogIzY2NjY2NjsiPiA1NyBDb21tZW50cyA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8dHIgZGF0YS10ZXN0LWlkPSJyZWFkLW1vcmUtY3RhLWJsb2NrIj4gPHRkIGNsYXNzPSJwdC0zIiBjb2xzcGFuPSIyIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctdG9wOiAyNHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJlbWFpbC1idXR0b24gdy1mdWxsIGtvc2hpbl9fYnV0dG9uLXdpdGgtZnVsbC13aWR0aCIgZGF0YS10ZXN0LWlkPSJlbWFpbC1idXR0b24iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgd2lkdGg6IDEwMCU7Ij4gPHRib2R5PiA8dHI-IDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249Im1pZGRsZSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjYzNTM1MDIyNTkzMjIwNjA4P29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0fmN0YS0wLXJlYWR-bW9yZSZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhLTAtcmVhZH5tb3JlLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGFyaWEtbGFiZWw9IlJlYWQgbW9yZSIgY2xhc3M9ImFsaWduLXRvcCBuby11bmRlcmxpbmUgIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0iYm9yZGVyLXNlcGFyYXRlICIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9ImJ0bi1tZCBidG4tc2Vjb25kYXJ5LWVtcGhhc2lzIGJvcmRlci1jb2xvci1icmFuZCBidXR0b24tbGluayBsZWFkaW5nLXJlZ3VsYXIgIW1pbi1oLVthdXRvXSAhc2hhZG93LW5vbmUgYm9yZGVyLTEgYm9yZGVyLXNvbGlkIiBkYXRhLXRlc3QtaWQ9InJlYWQtbW9yZS1jdGEtYmVsb3ciIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgaGVpZ2h0OiBtaW4tY29udGVudDsgYm9yZGVyLXJhZGl1czogMjRweDsgcGFkZGluZy10b3A6IDEycHg7IHBhZGRpbmctYm90dG9tOiAxMnB4OyBwYWRkaW5nLWxlZnQ6IDI0cHg7IHBhZGRpbmctcmlnaHQ6IDI0cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOyBjb2xvcjogIzBhNjZjMjsgYm9yZGVyLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci1jb2xvcjogIzBhNjZjMjsgbGluZS1oZWlnaHQ6IDEuMjU7IG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsgYm94LXNoYWRvdzogMCAwICMwMDAwLCAwIDAgIzAwMDAsIDAgMCAjMDAwMCAhaW1wb3J0YW50OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjYzNTM1MDIyNTkzMjIwNjA4P29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0fmN0YS0wLXJlYWR-bW9yZSZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhLTAtcmVhZH5tb3JlLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIHRhYmluZGV4PSItMSIgYXJpYS1oaWRkZW49InRydWUiIGNsYXNzPSJuby11bmRlcmxpbmUiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyI-IDxzcGFuIGNsYXNzPSJuby11bmRlcmxpbmUgdGV4dC1jb2xvci1icmFuZCIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPiBSZWFkIG1vcmUgPC9zcGFuPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvYT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC9hPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icC0zIGJvcmRlci0wIGJvcmRlci1iLTEgYm9yZGVyLXNvbGlkIGJvcmRlci1zeXN0ZW0tZ3JheS0zMCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItd2lkdGg6IDA7IGJvcmRlci1ib3R0b20td2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLWNvbG9yOiAjZTZlNmU2OyBwYWRkaW5nOiAyNHB4OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjY0MzM4MDczMzkwMzUwMzM2P29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0LTAtd3JhcHBlcn5saW5rJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdC0wLXdyYXBwZXJ-bGluay1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idy1mdWxsIiBkYXRhLXRlc3QtaWQ9Im5ldHdvcmstcG9zdC1saW5rIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHdpZHRoOiAxMDAlOyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vZmVlZC91cGRhdGUvdXJuOmxpOmFjdGl2aXR5OjcyNjQzMzgwNzMzOTAzNTAzMzY_aGlnaGxpZ2h0ZWRVcGRhdGVVcm49dXJuJTNBbGklM0FhY3Rpdml0eSUzQTcyNjQzMzgwNzMzOTAzNTAzMzYmYW1wO3Nob3dDb21tZW50Qm94PXRydWUmYW1wO29yaWdpbj1ORVRXT1JLX0NPTlZFUlNBVElPTlMmYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtYWN0b3JfY2FyZCZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrX3Bvc3QtMC1hY3Rvcl9jYXJkLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJibG9jayIgZGF0YS10ZXN0LWlkPSJuZXR3b3JrLXBvc3QtbGluayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgZGlzcGxheTogYmxvY2s7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyIGRhdGEtdGVzdC1pZD0idjJzdHlsZS1kaXNhYmxlIj4gPHRkIGNsYXNzPSJ3LVs3MnB4XSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB3aWR0aDogNzJweDsiIHdpZHRoPSI3MiI-IDxpbWcgY2xhc3M9ImlubGluZS1ibG9jayByZWxhdGl2ZSBiZy1jb2xvci1lbnRpdHktZ2hvc3QtYmFja2dyb3VuZCBjbGlwLXBhdGgtY2lyY2xlLTUwIHJvdW5kZWQtZnVsbCB3LTYgaC02ICF3LVs3MnB4XSAhaC1bNzJweF0gIWJsb2NrIiBzcmM9Imh0dHBzOi8vbWVkaWEubGljZG4uY29tL2Rtcy9pbWFnZS92Mi9ENTYwM0FRR3Vlc0tGMi0wVmhBL3Byb2ZpbGUtZGlzcGxheXBob3RvLXNocmlua180MDBfNDAwL3Byb2ZpbGUtZGlzcGxheXBob3RvLXNocmlua180MDBfNDAwLzAvMTY3OTQ5NjkzMDIyMj9lPTIxNDc0ODM2NDcmYW1wO3Y9YmV0YSZhbXA7dD1kQkI4ZEpma2NpNGJNWFNxRkM5OFVCQTA5WjFuYkM3M0NjRWt4RnpnWUhZIiBhbHQ9IkFsaXNoYSBTYW50aWFnbyIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgcG9zaXRpb246IHJlbGF0aXZlOyBib3JkZXItcmFkaXVzOiA5OTk5cHg7IGJhY2tncm91bmQtY29sb3I6ICNlYWU2ZGY7IGNsaXAtcGF0aDogY2lyY2xlKDUwJSk7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IGhlaWdodDogNzJweCAhaW1wb3J0YW50OyB3aWR0aDogNzJweCAhaW1wb3J0YW50OyIgd2lkdGg9IjcyIiBoZWlnaHQ9IjcyIj4gPC90ZD4gPHRkIGNsYXNzPSJwbC0xIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctbGVmdDogOHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJmb250LWJvbGQgdGV4dC1tZCBsZWFkaW5nLXJlZ3VsYXIgdGV4dC1zeXN0ZW0tZ3JheS05MCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGxpbmUtaGVpZ2h0OiAxLjI1OyBjb2xvcjogIzI4MjgyODsiPiBBbGlzaGEgU2FudGlhZ28gPC90ZD4gPC90cj4gPHRyIGRhdGEtdGVzdC1pZD0iYWN0b3ItY2FyZC1oZWFkbGluZSI-IDx0ZCBjbGFzcz0idGV4dC1zbSBsZWFkaW5nLVsxNnB4XSB0ZXh0LWNvbG9yLXRleHQtc29saWQtc2Vjb25kYXJ5IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDE2cHg7IGNvbG9yOiAjNjY2NjY2OyI-IFNvY2lhbCBKdXN0aWNlIHwgQ3VsdHVyYWwgQXdhcmVuZXNzIHwgTGFuZ3VhZ2XigKYgPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC9hPiA8L3RkPiA8dGQgY2xhc3M9InBsLTEgbXQtWzIycHhdIG1yLTEgaW5saW5lLWJsb2NrIiBkYXRhLXRlc3QtaWQ9Im5ldHdvcmstcG9zdC1mb2xsb3ctY3RhIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IG1hcmdpbi1yaWdodDogOHB4OyBtYXJnaW4tdG9wOiAyMnB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBhZGRpbmctbGVmdDogOHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJlbWFpbC1idXR0b24gIiBkYXRhLXRlc3QtaWQ9ImVtYWlsLWJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJtaWRkbGUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9idWlsZC1yZWxhdGlvbi9wZW9wbGUtZm9sbG93Lz9lbnRpdHlOYW1lPWFsaXNoYWJzYW50aWFnbyZhbXA7ZW50aXR5VXJuPUFEb0FBRDQ5RlA4QmxwdVhhX2dENm5oYk4xVUR3Ymg1eGFzRHBXdyZhbXA7bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrX3Bvc3QtMC1mb2xsb3dfY3RhJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgYXJpYS1sYWJlbD0iRm9sbG93IiBjbGFzcz0iYWxpZ24tdG9wIG5vLXVuZGVybGluZSAiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgdmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iYXV0byIgY2xhc3M9ImJvcmRlci1zZXBhcmF0ZSAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJidG4tc20gYnRuLXRlcnRpYXJ5LWVtcGhhc2lzIGJvcmRlci1ub25lIGJ1dHRvbi1saW5rIGxlYWRpbmctcmVndWxhciAhbWluLWgtW2F1dG9dICFzaGFkb3ctbm9uZSBib3JkZXItMSBib3JkZXItc29saWQiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgaGVpZ2h0OiBtaW4tY29udGVudDsgYm9yZGVyLXJhZGl1czogMjRweDsgcGFkZGluZy10b3A6IDdweDsgcGFkZGluZy1ib3R0b206IDdweDsgcGFkZGluZy1sZWZ0OiAxNnB4OyBwYWRkaW5nLXJpZ2h0OiAxNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDYwMDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsgY29sb3I6ICMwYTY2YzI7IGJvcmRlci13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IG5vbmU7IGxpbmUtaGVpZ2h0OiAxLjI1OyBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IDAgMCAjMDAwMCwgMCAwICMwMDAwLCAwIDAgIzAwMDAgIWltcG9ydGFudDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9idWlsZC1yZWxhdGlvbi9wZW9wbGUtZm9sbG93Lz9lbnRpdHlOYW1lPWFsaXNoYWJzYW50aWFnbyZhbXA7ZW50aXR5VXJuPUFEb0FBRDQ5RlA4QmxwdVhhX2dENm5oYk4xVUR3Ymg1eGFzRHBXdyZhbXA7bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrX3Bvc3QtMC1mb2xsb3dfY3RhJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9Ii0xIiBhcmlhLWhpZGRlbj0idHJ1ZSIgY2xhc3M9Im5vLXVuZGVybGluZSIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPiA8c3BhbiBjbGFzcz0ibm8tdW5kZXJsaW5lICIgc3R5bGU9InRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IEZvbGxvdyA8L3NwYW4-IDwvYT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icHQtMiB0ZXh0LW1kIGxlYWRpbmctcmVndWxhciB0ZXh0LXN5c3RlbS1ncmF5LTkwIiBjb2xzcGFuPSIyIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctdG9wOiAxNnB4OyBmb250LXNpemU6IDE2cHg7IGxpbmUtaGVpZ2h0OiAxLjI1OyBjb2xvcjogIzI4MjgyODsiPiA8c3BhbiBkYXRhLXRlc3QtaWQ9InRydW5jYXRlZC1tZXNzYWdlLXRleHQiPiBEZXNwaXRlIHRoZSBudW1lcm91cyBqb2IgaW50ZXJ2aWV3cyBJJ3ZlIHBhcnRpY2lwYXRlZCBpbiwgSSBzdGlsbCBmaW5kIG15c2VsZiB1bmNlcnRhaW4gYWJvdXQgd2hlbiBpdCdz4oCmIDwvc3Bhbj4gPHNwYW4gZGF0YS10ZXN0LWlkPSJ0cnVuY2F0ZWQtbWVzc2FnZS1zZWUtbW9yZSIgY2xhc3M9InRleHQtY29sb3ItbGluayBmb250LWJvbGQiIHN0eWxlPSJmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzBhNjZjMjsiPiBzZWUgbW9yZSA8L3NwYW4-IDwvdGQ-IDwvdHI-IDx0ciBkYXRhLXRlc3QtaWQ9Im5ldHdvcmstcG9zdC1zb2NpYWwtbWV0YWRhdGEiPiA8dGQgY2xhc3M9InB0LTIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDE2cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iYXV0byIgY2xhc3M9InctYXV0byIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB3aWR0aDogYXV0bzsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJwci0wLjUiIGRhdGEtdGVzdC1yZWFjdGlvbj0iTElLRSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXJpZ2h0OiA0cHg7Ij4gPGltZyBjbGFzcz0iYmxvY2sgdy0yIGgtMiIgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vc2MvaC85MXRkc2NuMGgxYWFvZWZ1aTljcmYxMWo2IiBhbHQ9IkxJS0UiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDE2cHg7IHdpZHRoOiAxNnB4OyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij4gPC90ZD4gPHRkIGNsYXNzPSJwci0wLjUiIGRhdGEtdGVzdC1yZWFjdGlvbj0iUFJBSVNFIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctcmlnaHQ6IDRweDsiPiA8aW1nIGNsYXNzPSJibG9jayB3LTIgaC0yIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9zYy9oL2FkaWc1dXJxeGkwM3F6dXk2aXlqZm0xYjUiIGFsdD0iUFJBSVNFIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxNnB4OyB3aWR0aDogMTZweDsiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI-IDwvdGQ-IDx0ZCBjbGFzcz0icHItMC41IiBkYXRhLXRlc3QtcmVhY3Rpb249IkVNUEFUSFkiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1yaWdodDogNHB4OyI-IDxpbWcgY2xhc3M9ImJsb2NrIHctMiBoLTIiIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL3NjL2gvZXZzMng1emZuejVnMHhyYzZ1MjJ0cmVxMiIgYWx0PSJFTVBBVEhZIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxNnB4OyB3aWR0aDogMTZweDsiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI-IDwvdGQ-IDx0ZCBjbGFzcz0idGV4dC1zbSBsZWFkaW5nLXJlZ3VsYXIgZm9udC1ub3JtYWwgdGV4dC1zeXN0ZW0tZ3JheS03MCIgZGF0YS10ZXN0LWlkPSJyZWFjdGlvbnMtY291bnQiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNDAwOyBsaW5lLWhlaWdodDogMS4yNTsgY29sb3I6ICM2NjY2NjY7Ij4gMTQ1IDwvdGQ-IDx0ZCBjbGFzcz0icHgtMC41IiBkYXRhLXRlc3QtaWQ9InNlcGFyYXRvciIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWxlZnQ6IDRweDsgcGFkZGluZy1yaWdodDogNHB4OyI-wrc8L3RkPiA8dGQgY2xhc3M9InRleHQtc20gbGVhZGluZy1yZWd1bGFyIGZvbnQtbm9ybWFsIHRleHQtc3lzdGVtLWdyYXktNzAiIGRhdGEtdGVzdC1pZD0iY29tbWVudHMtY291bnQiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNDAwOyBsaW5lLWhlaWdodDogMS4yNTsgY29sb3I6ICM2NjY2NjY7Ij4gODcgQ29tbWVudHMgPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPHRyIGRhdGEtdGVzdC1pZD0icmVhZC1tb3JlLWN0YS1ibG9jayI-IDx0ZCBjbGFzcz0icHQtMyIgY29sc3Bhbj0iMiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXRvcDogMjRweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0iZW1haWwtYnV0dG9uIHctZnVsbCBrb3NoaW5fX2J1dHRvbi13aXRoLWZ1bGwtd2lkdGgiIGRhdGEtdGVzdC1pZD0iZW1haWwtYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHdpZHRoOiAxMDAlOyI-IDx0Ym9keT4gPHRyPiA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJtaWRkbGUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2NDMzODA3MzM5MDM1MDMzNj9vcmlnaW49TkVUV09SS19DT05WRVJTQVRJT05TJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGEtMC1yZWFkfm1vcmUmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0fmN0YS0wLXJlYWR-bW9yZS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBhcmlhLWxhYmVsPSJSZWFkIG1vcmUiIGNsYXNzPSJhbGlnbi10b3Agbm8tdW5kZXJsaW5lICIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgdmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9ImJvcmRlci1zZXBhcmF0ZSAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJidG4tbWQgYnRuLXNlY29uZGFyeS1lbXBoYXNpcyBib3JkZXItY29sb3ItYnJhbmQgYnV0dG9uLWxpbmsgbGVhZGluZy1yZWd1bGFyICFtaW4taC1bYXV0b10gIXNoYWRvdy1ub25lIGJvcmRlci0xIGJvcmRlci1zb2xpZCIgZGF0YS10ZXN0LWlkPSJyZWFkLW1vcmUtY3RhLWJlbG93IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGhlaWdodDogbWluLWNvbnRlbnQ7IGJvcmRlci1yYWRpdXM6IDI0cHg7IHBhZGRpbmctdG9wOiAxMnB4OyBwYWRkaW5nLWJvdHRvbTogMTJweDsgcGFkZGluZy1sZWZ0OiAyNHB4OyBwYWRkaW5nLXJpZ2h0OiAyNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsgY29sb3I6ICMwYTY2YzI7IGJvcmRlci13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItY29sb3I6ICMwYTY2YzI7IGxpbmUtaGVpZ2h0OiAxLjI1OyBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IDAgMCAjMDAwMCwgMCAwICMwMDAwLCAwIDAgIzAwMDAgIWltcG9ydGFudDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2NDMzODA3MzM5MDM1MDMzNj9vcmlnaW49TkVUV09SS19DT05WRVJTQVRJT05TJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGEtMC1yZWFkfm1vcmUmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya35wb3N0fmN0YS0wLXJlYWR-bW9yZS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiB0YWJpbmRleD0iLTEiIGFyaWEtaGlkZGVuPSJ0cnVlIiBjbGFzcz0ibm8tdW5kZXJsaW5lIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsiPiA8c3BhbiBjbGFzcz0ibm8tdW5kZXJsaW5lIHRleHQtY29sb3ItYnJhbmQiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gUmVhZCBtb3JlIDwvc3Bhbj4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvYT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InAtMyBib3JkZXItMCBib3JkZXItYi0xIGJvcmRlci1zb2xpZCBib3JkZXItc3lzdGVtLWdyYXktMzAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLXdpZHRoOiAwOyBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci1jb2xvcjogI2U2ZTZlNjsgcGFkZGluZzogMjRweDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL3VwZGF0ZS91cm46bGk6YWN0aXZpdHk6NzI2NDMzODA3MTE1MDYyODg2NT9vcmlnaW49TkVUV09SS19DT05WRVJTQVRJT05TJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdC0wLXdyYXBwZXJ-bGluayZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3QtMC13cmFwcGVyfmxpbmstbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InctZnVsbCIgZGF0YS10ZXN0LWlkPSJuZXR3b3JrLXBvc3QtbGluayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB3aWR0aDogMTAwJTsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybjpsaTphY3Rpdml0eTo3MjY0MzM4MDcxMTUwNjI4ODY1P2hpZ2hsaWdodGVkVXBkYXRlVXJuPXVybiUzQWxpJTNBYWN0aXZpdHklM0E3MjY0MzM4MDcxMTUwNjI4ODY1JmFtcDtzaG93Q29tbWVudEJveD10cnVlJmFtcDtvcmlnaW49TkVUV09SS19DT05WRVJTQVRJT05TJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWFjdG9yX2NhcmQmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtYWN0b3JfY2FyZC1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0iYmxvY2siIGRhdGEtdGVzdC1pZD0ibmV0d29yay1wb3N0LWxpbmsiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IGRpc3BsYXk6IGJsb2NrOyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0ciBkYXRhLXRlc3QtaWQ9InYyc3R5bGUtZGlzYWJsZSI-IDx0ZCBjbGFzcz0idy1bNzJweF0iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgd2lkdGg6IDcycHg7IiB3aWR0aD0iNzIiPiA8aW1nIGNsYXNzPSJpbmxpbmUtYmxvY2sgcmVsYXRpdmUgYmctY29sb3ItZW50aXR5LWdob3N0LWJhY2tncm91bmQgY2xpcC1wYXRoLWNpcmNsZS01MCByb3VuZGVkLWZ1bGwgdy02IGgtNiAhdy1bNzJweF0gIWgtWzcycHhdICFibG9jayIgc3JjPSJodHRwczovL21lZGlhLmxpY2RuLmNvbS9kbXMvaW1hZ2UvdjIvQzREMDNBUUVPYkFZYkJkWnZvQS9wcm9maWxlLWRpc3BsYXlwaG90by1zaHJpbmtfNDAwXzQwMC9wcm9maWxlLWRpc3BsYXlwaG90by1zaHJpbmtfNDAwXzQwMC8wLzE1OTA3ODUyMTIwODI_ZT0yMTQ3NDgzNjQ3JmFtcDt2PWJldGEmYW1wO3Q9VXF4ekdQUlZSSS1xVEpSSnFFQ25Hb29rXy1JU2RidEFvYnh1ZVRuMzYzSSIgYWx0PSJBdXN0aW4gQmVsY2FrIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBwb3NpdGlvbjogcmVsYXRpdmU7IGJvcmRlci1yYWRpdXM6IDk5OTlweDsgYmFja2dyb3VuZC1jb2xvcjogI2VhZTZkZjsgY2xpcC1wYXRoOiBjaXJjbGUoNTAlKTsgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsgaGVpZ2h0OiA3MnB4ICFpbXBvcnRhbnQ7IHdpZHRoOiA3MnB4ICFpbXBvcnRhbnQ7IiB3aWR0aD0iNzIiIGhlaWdodD0iNzIiPiA8L3RkPiA8dGQgY2xhc3M9InBsLTEiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1sZWZ0OiA4cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9ImZvbnQtYm9sZCB0ZXh0LW1kIGxlYWRpbmctcmVndWxhciB0ZXh0LXN5c3RlbS1ncmF5LTkwIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsgbGluZS1oZWlnaHQ6IDEuMjU7IGNvbG9yOiAjMjgyODI4OyI-IEF1c3RpbiBCZWxjYWsgPC90ZD4gPC90cj4gPHRyIGRhdGEtdGVzdC1pZD0iYWN0b3ItY2FyZC1oZWFkbGluZSI-IDx0ZCBjbGFzcz0idGV4dC1zbSBsZWFkaW5nLVsxNnB4XSB0ZXh0LWNvbG9yLXRleHQtc29saWQtc2Vjb25kYXJ5IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDE2cHg7IGNvbG9yOiAjNjY2NjY2OyI-IEkgVGVhY2ggUGVvcGxlIEhvdyBUbyBMYW5kIEFtYXppbmcgSm9icyBXaXRob3V04oCmIDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvYT4gPC90ZD4gPHRkIGNsYXNzPSJwbC0xIG10LVsyMnB4XSBtci0xIGlubGluZS1ibG9jayIgZGF0YS10ZXN0LWlkPSJuZXR3b3JrLXBvc3QtZm9sbG93LWN0YSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW4tcmlnaHQ6IDhweDsgbWFyZ2luLXRvcDogMjJweDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBwYWRkaW5nLWxlZnQ6IDhweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0iZW1haWwtYnV0dG9uICIgZGF0YS10ZXN0LWlkPSJlbWFpbC1idXR0b24iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibWlkZGxlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vYnVpbGQtcmVsYXRpb24vcGVvcGxlLWZvbGxvdy8_ZW50aXR5TmFtZT1hYmVsY2FrJmFtcDtlbnRpdHlVcm49QURvQUFBY241OElCc05SWDU4WEtOLUVDdngyVTZqZDluUWdZRmpZJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtbmV0d29ya19wb3N0LTAtZm9sbG93X2N0YS1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBhcmlhLWxhYmVsPSJGb2xsb3ciIGNsYXNzPSJhbGlnbi10b3Agbm8tdW5kZXJsaW5lICIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSJhdXRvIiBjbGFzcz0iYm9yZGVyLXNlcGFyYXRlICIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9ImJ0bi1zbSBidG4tdGVydGlhcnktZW1waGFzaXMgYm9yZGVyLW5vbmUgYnV0dG9uLWxpbmsgbGVhZGluZy1yZWd1bGFyICFtaW4taC1bYXV0b10gIXNoYWRvdy1ub25lIGJvcmRlci0xIGJvcmRlci1zb2xpZCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBoZWlnaHQ6IG1pbi1jb250ZW50OyBib3JkZXItcmFkaXVzOiAyNHB4OyBwYWRkaW5nLXRvcDogN3B4OyBwYWRkaW5nLWJvdHRvbTogN3B4OyBwYWRkaW5nLWxlZnQ6IDE2cHg7IHBhZGRpbmctcmlnaHQ6IDE2cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNjAwOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOyBjb2xvcjogIzBhNjZjMjsgYm9yZGVyLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogbm9uZTsgbGluZS1oZWlnaHQ6IDEuMjU7IG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsgYm94LXNoYWRvdzogMCAwICMwMDAwLCAwIDAgIzAwMDAsIDAgMCAjMDAwMCAhaW1wb3J0YW50OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2J1aWxkLXJlbGF0aW9uL3Blb3BsZS1mb2xsb3cvP2VudGl0eU5hbWU9YWJlbGNhayZhbXA7ZW50aXR5VXJuPUFEb0FBQWNuNThJQnNOUlg1OFhLTi1FQ3Z4MlU2amQ5blFnWUZqWSZhbXA7bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrX3Bvc3QtMC1mb2xsb3dfY3RhJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmtfcG9zdC0wLWZvbGxvd19jdGEtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9Ii0xIiBhcmlhLWhpZGRlbj0idHJ1ZSIgY2xhc3M9Im5vLXVuZGVybGluZSIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPiA8c3BhbiBjbGFzcz0ibm8tdW5kZXJsaW5lICIgc3R5bGU9InRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IEZvbGxvdyA8L3NwYW4-IDwvYT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icHQtMiB0ZXh0LW1kIGxlYWRpbmctcmVndWxhciB0ZXh0LXN5c3RlbS1ncmF5LTkwIiBjb2xzcGFuPSIyIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctdG9wOiAxNnB4OyBmb250LXNpemU6IDE2cHg7IGxpbmUtaGVpZ2h0OiAxLjI1OyBjb2xvcjogIzI4MjgyODsiPiA8c3BhbiBkYXRhLXRlc3QtaWQ9InRydW5jYXRlZC1tZXNzYWdlLXRleHQiPiBJIHNoYXJlZCBhIHBvc3QgYWJvdXQgd2h5IHlvdSBwdXJzdWUgam9icyBldmVuIGlmIHlvdSBkb27igJl0IG1lZXQgMTAwJSBvZiB0aGUgcXVhbGlmaWNhdGlvbnMuIE1hbnkgcGVvcGxl4oCmIDwvc3Bhbj4gPHNwYW4gZGF0YS10ZXN0LWlkPSJ0cnVuY2F0ZWQtbWVzc2FnZS1zZWUtbW9yZSIgY2xhc3M9InRleHQtY29sb3ItbGluayBmb250LWJvbGQiIHN0eWxlPSJmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzBhNjZjMjsiPiBzZWUgbW9yZSA8L3NwYW4-IDwvdGQ-IDwvdHI-IDx0ciBkYXRhLXRlc3QtaWQ9Im5ldHdvcmstcG9zdC1zb2NpYWwtbWV0YWRhdGEiPiA8dGQgY2xhc3M9InB0LTIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDE2cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iYXV0byIgY2xhc3M9InctYXV0byIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB3aWR0aDogYXV0bzsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJwci0wLjUiIGRhdGEtdGVzdC1yZWFjdGlvbj0iTElLRSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLXJpZ2h0OiA0cHg7Ij4gPGltZyBjbGFzcz0iYmxvY2sgdy0yIGgtMiIgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vc2MvaC85MXRkc2NuMGgxYWFvZWZ1aTljcmYxMWo2IiBhbHQ9IkxJS0UiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDE2cHg7IHdpZHRoOiAxNnB4OyIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij4gPC90ZD4gPHRkIGNsYXNzPSJwci0wLjUiIGRhdGEtdGVzdC1yZWFjdGlvbj0iUFJBSVNFIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctcmlnaHQ6IDRweDsiPiA8aW1nIGNsYXNzPSJibG9jayB3LTIgaC0yIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9zYy9oL2FkaWc1dXJxeGkwM3F6dXk2aXlqZm0xYjUiIGFsdD0iUFJBSVNFIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxNnB4OyB3aWR0aDogMTZweDsiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI-IDwvdGQ-IDx0ZCBjbGFzcz0icHItMC41IiBkYXRhLXRlc3QtcmVhY3Rpb249IkVNUEFUSFkiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1yaWdodDogNHB4OyI-IDxpbWcgY2xhc3M9ImJsb2NrIHctMiBoLTIiIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL3NjL2gvZXZzMng1emZuejVnMHhyYzZ1MjJ0cmVxMiIgYWx0PSJFTVBBVEhZIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxNnB4OyB3aWR0aDogMTZweDsiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI-IDwvdGQ-IDx0ZCBjbGFzcz0idGV4dC1zbSBsZWFkaW5nLXJlZ3VsYXIgZm9udC1ub3JtYWwgdGV4dC1zeXN0ZW0tZ3JheS03MCIgZGF0YS10ZXN0LWlkPSJyZWFjdGlvbnMtY291bnQiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNDAwOyBsaW5lLWhlaWdodDogMS4yNTsgY29sb3I6ICM2NjY2NjY7Ij4gNTI2IDwvdGQ-IDx0ZCBjbGFzcz0icHgtMC41IiBkYXRhLXRlc3QtaWQ9InNlcGFyYXRvciIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWxlZnQ6IDRweDsgcGFkZGluZy1yaWdodDogNHB4OyI-wrc8L3RkPiA8dGQgY2xhc3M9InRleHQtc20gbGVhZGluZy1yZWd1bGFyIGZvbnQtbm9ybWFsIHRleHQtc3lzdGVtLWdyYXktNzAiIGRhdGEtdGVzdC1pZD0iY29tbWVudHMtY291bnQiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNDAwOyBsaW5lLWhlaWdodDogMS4yNTsgY29sb3I6ICM2NjY2NjY7Ij4gMTE4IENvbW1lbnRzIDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDx0ciBkYXRhLXRlc3QtaWQ9InJlYWQtbW9yZS1jdGEtYmxvY2siPiA8dGQgY2xhc3M9InB0LTMiIGNvbHNwYW49IjIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDI0cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9ImVtYWlsLWJ1dHRvbiB3LWZ1bGwga29zaGluX19idXR0b24td2l0aC1mdWxsLXdpZHRoIiBkYXRhLXRlc3QtaWQ9ImVtYWlsLWJ1dHRvbiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB3aWR0aDogMTAwJTsiPiA8dGJvZHk-IDx0cj4gPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibWlkZGxlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vZmVlZC91cGRhdGUvdXJuOmxpOmFjdGl2aXR5OjcyNjQzMzgwNzExNTA2Mjg4NjU_b3JpZ2luPU5FVFdPUktfQ09OVkVSU0FUSU9OUyZhbXA7bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhLTAtcmVhZH5tb3JlJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGEtMC1yZWFkfm1vcmUtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgYXJpYS1sYWJlbD0iUmVhZCBtb3JlIiBjbGFzcz0iYWxpZ24tdG9wIG5vLXVuZGVybGluZSAiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJib3JkZXItc2VwYXJhdGUgIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0iYnRuLW1kIGJ0bi1zZWNvbmRhcnktZW1waGFzaXMgYm9yZGVyLWNvbG9yLWJyYW5kIGJ1dHRvbi1saW5rIGxlYWRpbmctcmVndWxhciAhbWluLWgtW2F1dG9dICFzaGFkb3ctbm9uZSBib3JkZXItMSBib3JkZXItc29saWQiIGRhdGEtdGVzdC1pZD0icmVhZC1tb3JlLWN0YS1iZWxvdyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBoZWlnaHQ6IG1pbi1jb250ZW50OyBib3JkZXItcmFkaXVzOiAyNHB4OyBwYWRkaW5nLXRvcDogMTJweDsgcGFkZGluZy1ib3R0b206IDEycHg7IHBhZGRpbmctbGVmdDogMjRweDsgcGFkZGluZy1yaWdodDogMjRweDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7IGNvbG9yOiAjMGE2NmMyOyBib3JkZXItd2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLWNvbG9yOiAjMGE2NmMyOyBsaW5lLWhlaWdodDogMS4yNTsgbWluLWhlaWdodDogYXV0byAhaW1wb3J0YW50OyBib3gtc2hhZG93OiAwIDAgIzAwMDAsIDAgMCAjMDAwMCwgMCAwICMwMDAwICFpbXBvcnRhbnQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vZmVlZC91cGRhdGUvdXJuOmxpOmFjdGl2aXR5OjcyNjQzMzgwNzExNTA2Mjg4NjU_b3JpZ2luPU5FVFdPUktfQ09OVkVSU0FUSU9OUyZhbXA7bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1uZXR3b3JrfnBvc3R-Y3RhLTAtcmVhZH5tb3JlJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLW5ldHdvcmt-cG9zdH5jdGEtMC1yZWFkfm1vcmUtbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9Ii0xIiBhcmlhLWhpZGRlbj0idHJ1ZSIgY2xhc3M9Im5vLXVuZGVybGluZSIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Ij4gPHNwYW4gY2xhc3M9Im5vLXVuZGVybGluZSB0ZXh0LWNvbG9yLWJyYW5kIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IFJlYWQgbW9yZSA8L3NwYW4-IDwvYT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwdC00IHBiLTIgcHgtMyBiZy1jb2xvci1iYWNrZ3JvdW5kLWNhbnZhcyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmMmYwOyBwYWRkaW5nLWxlZnQ6IDI0cHg7IHBhZGRpbmctcmlnaHQ6IDI0cHg7IHBhZGRpbmctYm90dG9tOiAxNnB4OyBwYWRkaW5nLXRvcDogMzJweDsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0iZW1haWwtYnV0dG9uICIgZGF0YS10ZXN0LWlkPSJlbWFpbC1idXR0b24iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibWlkZGxlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vZmVlZC8_bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDElM0JsaURBSWtKSFN0cUtua2kwOGNJaG5RJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTBGRXJaN0xYdzREYncxJmFtcDt0cms9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1mb290ZXJfcHJvbW8tMC1mb290ZXJfc2VlX2FsbCZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS1mb290ZXJfcHJvbW8tMC1mb290ZXJfc2VlX2FsbC1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBhcmlhLWxhYmVsPSJTZWUgbW9yZSBvbiBMaW5rZWRJbiIgY2xhc3M9ImFsaWduLXRvcCBuby11bmRlcmxpbmUgIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9ImF1dG8iIGNsYXNzPSJib3JkZXItc2VwYXJhdGUgIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0iYnRuLW1kIGJ0bi1wcmltYXJ5IGJvcmRlci1jb2xvci1icmFuZCBidXR0b24tbGluayBsZWFkaW5nLXJlZ3VsYXIgIW1pbi1oLVthdXRvXSAhc2hhZG93LW5vbmUgYm9yZGVyLTEgYm9yZGVyLXNvbGlkIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGhlaWdodDogbWluLWNvbnRlbnQ7IGJvcmRlci1yYWRpdXM6IDI0cHg7IHBhZGRpbmctdG9wOiAxMnB4OyBwYWRkaW5nLWJvdHRvbTogMTJweDsgcGFkZGluZy1sZWZ0OiAyNHB4OyBwYWRkaW5nLXJpZ2h0OiAyNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogIzBhNjZjMjsgY29sb3I6ICNmZmZmZmY7IGJvcmRlci13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItY29sb3I6ICMwYTY2YzI7IGxpbmUtaGVpZ2h0OiAxLjI1OyBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IDAgMCAjMDAwMCwgMCAwICMwMDAwLCAwIDAgIzAwMDAgIWltcG9ydGFudDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkLz9saXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLWZvb3Rlcl9wcm9tby0wLWZvb3Rlcl9zZWVfYWxsJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLWZvb3Rlcl9wcm9tby0wLWZvb3Rlcl9zZWVfYWxsLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIHRhYmluZGV4PSItMSIgYXJpYS1oaWRkZW49InRydWUiIGNsYXNzPSJuby11bmRlcmxpbmUiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gPHNwYW4gY2xhc3M9Im5vLXVuZGVybGluZSB0ZXh0LXdoaXRlIiBzdHlsZT0iY29sb3I6ICNmZmZmZmY7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IFNlZSBtb3JlIG9uIExpbmtlZEluIDwvc3Bhbj4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvZGl2PiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0iYmctY29sb3ItYmFja2dyb3VuZC1jYW52YXMgcC0zIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJhY2tncm91bmQtY29sb3I6ICNmM2YyZjA7IHBhZGRpbmc6IDI0cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9InRleHQtY2VudGVyIHBiLTIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1ib3R0b206IDE2cHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPiA8aDIgY2xhc3M9InRleHQtbGcgdGV4dC10ZWFsLTgwIiBzdHlsZT0ibWFyZ2luOiAwOyBmb250LXdlaWdodDogNTAwOyBmb250LXNpemU6IDIwcHg7IGNvbG9yOiAjMTE0OTUxOyI-IEdldCB0aGUgbmV3IExpbmtlZEluIGRlc2t0b3AgYXBwIDwvaDI-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBwYi0yIiBkYXRhLXRlc3QtaWQ9ImZvb3Rlci1hcHAtc3RvcmUtaWNvbiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWJvdHRvbTogMTZweDsgdGV4dC1hbGlnbjogY2VudGVyOyI-IDxhIGhyZWY9Imh0dHBzOi8vYXBwcy5taWNyb3NvZnQuY29tL3N0b3JlL2RldGFpbC85V1pETkNSRko0UTc_bGF1bmNoPXRydWUmYW1wO2NpZD1saW5rZWRpbl9lbWFpbF91cHNlbGwmYW1wO21vZGU9ZnVsbCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxpbWcgYWx0PSJHZXQgaXQgZnJvbSBNaWNyb3NvZnQiIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL3NjL2gvZWpwa2twd3Zxa3MzMWEzY2pxb2tiN2ZibSIgY2xhc3M9ImgtWzQwcHhdIHctWzExMnB4XSIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgaGVpZ2h0OiA0MHB4OyB3aWR0aDogMTEycHg7IiB3aWR0aD0iMTEyIiBoZWlnaHQ9IjQwIj4gPC9hPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgcGItMiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWJvdHRvbTogMTZweDsgdGV4dC1hbGlnbjogY2VudGVyOyI-IDxoMiBjbGFzcz0idGV4dC1tZCB0ZXh0LXRlYWwtODAiIHN0eWxlPSJtYXJnaW46IDA7IGZvbnQtd2VpZ2h0OiA1MDA7IGZvbnQtc2l6ZTogMTZweDsgY29sb3I6ICMxMTQ5NTE7Ij4gQWxzbyBhdmFpbGFibGUgb24gbW9iaWxlIDwvaDI-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciIgZGF0YS10ZXN0LWlkPSJmb290ZXItYXBwLXN0b3JlLWljb24iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgdGV4dC1hbGlnbjogY2VudGVyOyI-IDxhIGhyZWY9Imh0dHBzOi8vaXR1bmVzLmFwcGxlLmNvbS91cy9hcHAvbGlua2VkaW4vaWQyODg0MjkwNDA_cHQ9MTA3NDYmYW1wO2N0PXN0X2FwcHNpdGVfZmxhZ3NoaXAmYW1wO210PTgiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsiPiA8aW1nIGFsdD0iRG93bmxvYWQgb24gdGhlIEFwcCBTdG9yZSIgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vc2MvaC83Nnl6a2QwaDVraXYyN2xyZDR5YWVueWxrIiBjbGFzcz0iaC1bNDBweF0gdy1bMTIwcHhdIHByLTEiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGhlaWdodDogNDBweDsgd2lkdGg6IDEyMHB4OyBwYWRkaW5nLXJpZ2h0OiA4cHg7IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjQwIj4gPC9hPiA8YSBocmVmPSJodHRwczovL3BsYXkuZ29vZ2xlLmNvbS9zdG9yZS9hcHBzL2RldGFpbHM_aWQ9Y29tLmxpbmtlZGluLmFuZHJvaWQmYW1wO3JlZmVycmVyPXN0X2FwcHNpdGVfZmxhZ3NoaXAiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsiPiA8aW1nIGFsdD0iR2V0IGl0IG9uIEdvb2dsZSBQbGF5IiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9zYy9oLzE0MnF1ZHdibHA1OHp3bWM5dmtxZnBsdWciIGNsYXNzPSJoLVs0MHB4XSB3LVsxMzRweF0iIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGhlaWdodDogNDBweDsgd2lkdGg6IDEzNHB4OyIgd2lkdGg9IjEzNCIgaGVpZ2h0PSI0MCI-IDwvYT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InB5LTIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDE2cHg7IHBhZGRpbmctYm90dG9tOiAxNnB4OyI-PGhyIGNsYXNzPSJib3JkZXItbm9uZSBiZy1bI2UwZGZkZF0gaC1bMXB4XSIgc3R5bGU9ImhlaWdodDogMXB4OyBib3JkZXItc3R5bGU6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6ICNlMGRmZGQ7Ij48L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0idGV4dC14cyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDEycHg7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0icGItMSBtLTAiIGRhdGEtdGVzdC1pZD0iZW1haWwtZm9vdGVyX19pbnRlbmRlZCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW46IDBweDsgcGFkZGluZy1ib3R0b206IDhweDsiPiBUaGlzIGVtYWlsIHdhcyBpbnRlbmRlZCBmb3IgS2h1c2hhbCBQUyAoLS0pIDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwYi0xIG0tMCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW46IDBweDsgcGFkZGluZy1ib3R0b206IDhweDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vaGVscC9saW5rZWRpbi9hbnN3ZXIvNDc4OD9sYW5nPWVuJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLVNlY3VyaXR5SGVscC0wLWZvb3RlcmdsaW1tZXImYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtU2VjdXJpdHlIZWxwLTAtZm9vdGVyZ2xpbW1lci1udWxsLWo3enU3aX5tM3g0M2Nzdn4yYy1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NDNjc3YtMmMmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1NNFpEZzBNems1WVdVNE56WmtOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5ETmtZV1l3WkRjME5qaGlaams0TUdaall6QTJNakEyWVRsak5ESXdPREU1WldKak5UVmhaV0l5T1dSaVpEa3dMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idGV4dC1pbmhlcml0IHVuZGVybGluZSIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IGNvbG9yOiBpbmhlcml0OyB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyI-TGVhcm4gd2h5IHdlIGluY2x1ZGVkIHRoaXMuPC9hPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icGItMSBtLTAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgbWFyZ2luOiAwcHg7IHBhZGRpbmctYm90dG9tOiA4cHg7Ij5Zb3UgYXJlIHJlY2VpdmluZyBOZXR3b3JrIENvbnZlcnNhdGlvbnMgZW1haWxzLiBTb21lIGNvbnRlbnQgbWF5IGJlIGF1dG9tYXRpY2FsbHkgdHJhbnNsYXRlZCBiYXNlZCBvbiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vbXlwcmVmZXJlbmNlcy9kL2xhbmd1YWdlLWZvci10cmFuc2xhdGlvbiIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJsaW5rLW5vLXZpc2l0ZWQtc3RhdGUiIGRhdGEtdHJhY2tpbmctd2lsbC1uYXZpZ2F0ZSBkYXRhLXRyYWNraW5nLWNvbnRyb2wtbmFtZT0iZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zX2NvbnRlbnRfc2V0dGluZ3NfbGluayIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAjMGE2NmMyOyI-eW91ciBzZXR0aW5nczwvYT4uPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InBiLTEgbS0wIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IG1hcmdpbjogMHB4OyBwYWRkaW5nLWJvdHRvbTogOHB4OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL3BzZXR0aW5ncy9lbWFpbC11bnN1YnNjcmliZT9saXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLXVuc3Vic2NyaWJlLTAtZm9vdGVyR2xpbW1lciZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMS11bnN1YnNjcmliZS0wLWZvb3RlckdsaW1tZXItbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtsb2lkPUFRR1NlMFF6V1F4MjZBQUFBWk5qMW5mY3RCalBkV2V6a2lud05HMFVkN3ZZd3NuYWxoMFVzTWFZWWFRM2wzNmZUcnJqOXNjVko5emJjRzgtdENqalhhWEFDQkZEbWpjZ0pCVEZheHNRMFR4MDdpLU5FLVh5LU55V2JnIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InRleHQtaW5oZXJpdCB1bmRlcmxpbmUiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTsiPlVuc3Vic2NyaWJlPC9hPiDCoMKgwrfCoMKgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9oZWxwL2xpbmtlZGluL2Fuc3dlci82Nz9sYW5nPWVuJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25ldHdvcmtfY29udmVyc2F0aW9uc18wMSUzQmxpREFJa0pIU3RxS25raTA4Y0loblElM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MEZFclo3TFh3NERidzEmYW1wO3Ryaz1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLWhlbHAtMC1mb290ZXJnbGltbWVyJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxLWhlbHAtMC1mb290ZXJnbGltbWVyLW51bGwtajd6dTdpfm0zeDQzY3N2fjJjLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0M2Nzdi0yYyZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU00WkRnME16azVZV1U0Tnpaa04ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkROa1lXWXdaRGMwTmpoaVpqazRNR1pqWXpBMk1qQTJZVGxqTkRJd09ERTVaV0pqTlRWaFpXSXlPV1JpWkRrd0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ0ZXh0LWluaGVyaXQgdW5kZXJsaW5lIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgY29sb3I6IGluaGVyaXQ7IHRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7Ij5IZWxwPC9hPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icGItMSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWJvdHRvbTogOHB4OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvP2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbmV0d29ya19jb252ZXJzYXRpb25zXzAxJTNCbGlEQUlrSkhTdHFLbmtpMDhjSWhuUSUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0wRkVyWjdMWHc0RGJ3MSZhbXA7dHJrPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtZm9vdGVyLTAtbG9nb0dsaW1tZXImYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9uZXR3b3JrX2NvbnZlcnNhdGlvbnNfMDEtZm9vdGVyLTAtbG9nb0dsaW1tZXItbnVsbC1qN3p1N2l-bTN4NDNjc3Z-MmMtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDQzY3N2LTJjJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTTRaRGcwTXprNVlXVTROelprTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVORE5rWVdZd1pEYzBOamhpWmprNE1HWmpZekEyTWpBMllUbGpOREl3T0RFNVpXSmpOVFZoWldJeU9XUmlaRGt3TERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxpbWcgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vc2MvaC85ZWhlNm4zOWZhMDdkYzVlZHp2MHJsYTRlIiBhbHQ9IkxpbmtlZEluIiBjbGFzcz0iYmxvY2sgaC1bMTRweF0gdy1bNTZweF0gaW1hZ2UtcmVuZGVyaW5nLWNyaXNwIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7IGltYWdlLXJlbmRlcmluZzogLW8tY3Jpc3AtZWRnZXM7IGltYWdlLXJlbmRlcmluZzogLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdDsgaW1hZ2UtcmVuZGVyaW5nOiBjcmlzcC1lZGdlczsgLW1zLWludGVycG9sYXRpb24tbW9kZTogbmVhcmVzdC1uZWlnaGJvcjsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTRweDsgd2lkdGg6IDU2cHg7IiB3aWR0aD0iNTYiIGhlaWdodD0iMTQiPiA8L2E-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGRhdGEtdGVzdC1jb3B5cmlnaHQtdGV4dCBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gwqkgMjAyNCBMaW5rZWRJbiBDb3Jwb3JhdGlvbiwgMSZ6d25qOzAwMCBXZXN0IE1hdWRlIEF2ZW51ZSwgU3Vubnl2YWxlLCBDQSA5NDA4NS4gPHNwYW4gZGF0YS10ZXN0LXRyYWRlbWFya3MtdGV4dD4gTGlua2VkSW4gYW5kIHRoZSBMaW5rZWRJbiBsb2dvIGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgTGlua2VkSW4uIDwvc3Bhbj4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPGltZyBhbHQgcm9sZT0icHJlc2VudGF0aW9uIiBzcmM9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9lbWltcC9pcF9ZV3BrTm1SVVpIQk1WekI2WlVSUmVsa3pUakpNVkVwcU9scFhNV2hoVjNobVltMVdNR1F5T1hsaE1UbHFZakkxTWxwWVNucFpXRkp3WWpJMWVsaDZRWGc2LmdpZiIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj4gPC9ib2R5PiA8L2h0bWw-" + } + } + ] + }, + "sizeEstimate": 126327, + "historyId": "527489", + "internalDate": "1732546821000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_06_19363ba8e2582133_20241126.json b/goog/controllers/gmail/json/messages/raw_message_06_19363ba8e2582133_20241126.json new file mode 100644 index 0000000..540a154 --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_06_19363ba8e2582133_20241126.json @@ -0,0 +1,183 @@ +{ + "id": "19363ba8e2582133", + "threadId": "19363ba8e2582133", + "labelIds": [ + "UNREAD", + "CATEGORY_SOCIAL", + "INBOX" + ], + "snippet": "Here's what's happened since you were last on LinkedIn \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f", + "payload": { + "partId": "", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp931742wrq; Mon, 25 Nov 2024 06:29:51 -0800 (PST)" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IEbPIe+TQ88Z+DHd/A8yyLcAOjv+R1/RIRwiGYiSt7ujLYGK/lw0vafU0SHGdQj6lXZicwS" + }, + { + "name": "X-Received", + "value": "by 2002:a05:6a00:3ccc:b0:71e:818a:97d9 with SMTP id d2e1a72fcca58-724df3c8151mr20294806b3a.5.1732544991113; Mon, 25 Nov 2024 06:29:51 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732544991; cv=none; d=google.com; s=arc-20240605; b=Wxqp5Njjc5z1wRZ9vyWy4ihWjaE4SrMZsFoHfAbUhXYc7PnTsQaLebvf+Zg9oqipO2 7e72Ig1P9gfmke8h4jj0AfYHkiXQjkcOk0L0qQRrk7Fhm8y+bbqU/R6GjhZJO5Hp5njx bN/jQzJtO8Rnz5NpVU1ETfKChDRkM4/STfudNz0CvRDyskVVkeuoYmbvLFcSN6CUn4tt ye1hOKaQtTkq52DX9jVw1T0VXynCViWWpaybNg1TJOnezXXcNm2b+sTA61Cu8PQnhrNJ n9gi1Q/PW60s8yENi5loDvB3iAvi+7E1iNrUui3OhKTVHgWAV7KWiAKkvlsCCLORUc1T z42Q==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=require-recipient-valid-since:feedback-id:list-unsubscribe-post :list-unsubscribe:date:to:mime-version:subject:message-id:from :dkim-signature:dkim-signature; bh=udF/XJRPK1mCktHLuGIIfGeisUjxh0OfM+Tlg7u5R9g=; fh=kl8GOc3xH49wmCQ5W74DCe5pDhPNnAeFoI4mGP4/wX4=; b=RgsKftzTPZcKwxh/G/887LKpeDh6lU89MW+LoktXl0h6OZM2Mv8afCVBFjWsojIANF OY81a561ZEk9EbYADd1vGn7zL1cByE1/7p6xsigppTnhotEK8DpHCwGJeqdnpjVitPvA I106x5rD2+qzC/Lsmb0zAfify/FXY+NfInQQczg16gG6ONKcVGgxbUgzbtHePWmhxdRI XSbZNVRZIzLz1vTX/GfZjRmKBe1J2vY22BpD1mx0GAmAPE1rjVS0cFKavyz8rF/br8WN OLjkjTwY/CyKq4cfnH5uvDI7N+CsxMIgIu6NDt8/l01KLYjSmKPFOBkpzT6Ks/Grtt3+ 5O4w==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@mailc.linkedin.com header.s=d2048-202308-0c header.b=XUxElvqG; dkim=pass header.i=@linkedin.com header.s=d2048-202308-00 header.b=eEOICj8q; spf=pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emjprzmiodkrl@bounce.linkedin.com designates 2620:109:c003:104::161 as permitted sender) smtp.mailfrom=m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emjprzmiodkrl@bounce.linkedin.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=linkedin.com" + }, + { + "name": "Return-Path", + "value": "" + }, + { + "name": "Received", + "value": "from mailc-ca.linkedin.com (mailc-ca.linkedin.com. [2620:109:c003:104::161]) by mx.google.com with ESMTPS id d2e1a72fcca58-72519ec5c96si400699b3a.371.2024.11.25.06.29.50 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 25 Nov 2024 06:29:51 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emjprzmiodkrl@bounce.linkedin.com designates 2620:109:c003:104::161 as permitted sender) client-ip=2620:109:c003:104::161;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@mailc.linkedin.com header.s=d2048-202308-0c header.b=XUxElvqG; dkim=pass header.i=@linkedin.com header.s=d2048-202308-00 header.b=eEOICj8q; spf=pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emjprzmiodkrl@bounce.linkedin.com designates 2620:109:c003:104::161 as permitted sender) smtp.mailfrom=m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo1emjprzmiodkrl@bounce.linkedin.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=linkedin.com" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailc.linkedin.com; s=d2048-202308-0c; t=1732544987; bh=udF/XJRPK1mCktHLuGIIfGeisUjxh0OfM+Tlg7u5R9g=; h=From:Subject:MIME-Version:Content-Type:To:Date:X-LinkedIn-Class:\t X-LinkedIn-Template:X-LinkedIn-fbl; b=XUxElvqGO3ViqDffleqSmJOF/ZDaKDpiTnSv7vejgQqlK5ac8rl7QpZ74KquDvVSY\t OhGD5AQMrZw+yR913qRvj3tzS+n+9x2M4vdiCzVaZEZB4vPoeg7osKsdsFgor5yi+R\t b9zg16ovDDFoB2QPkrwSWQyFss+iOxGvM0w0fyHoqoNYf/q3JOwigzjj4SvtmGSxJ3\t UNIR9Lc2K9DGvTyYJ8e3Y/906t20DvpelCbxvTBEyGgi0diSxmA0Rw5a0UUSxVaUqd\t VqjhBTDqxSwRQwttoRQ0XBVjqm64XQ5fGsazJSRjuHD1VloxHu3dtX/Ss5dAoajvus\t cMMSwhfbsnUBA==" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linkedin.com; s=d2048-202308-00; t=1732544987; bh=udF/XJRPK1mCktHLuGIIfGeisUjxh0OfM+Tlg7u5R9g=; h=From:Subject:MIME-Version:Content-Type:To:Date:X-LinkedIn-Class:\t X-LinkedIn-Template:X-LinkedIn-fbl; b=eEOICj8q4rI5QFph2OzYmK3p6xwZY3pJfAfq7/+JS+IHd0fAjuEA34d3dZgADxUNo\t QefEvudi3vlE6D/ygvX+8l1pm/8/feQaCnSTzssropJtrmc+PZGO12ba6m9sxfG7EQ\t +pq8I4pZ8+3YyDKCjcneoPzPbBqqX+LCnhJ8yuAX7v9IcW7KtT9qQtje9LwY7RRjTL\t QtYSqp7FCzay59pBDSFSYNeYXhYRGNtylfWofu+xgQ5D1YiR2ARqI4kolxvgPEmtkO\t PzxlGATlIzInLPKEppcmQ0cz1xK0sDIapONVyOhNgJaA+xK8AwbunLrSeqei2TgyO0\t p0uM+TQMHBGXg==" + }, + { + "name": "From", + "value": "LinkedIn " + }, + { + "name": "Message-ID", + "value": "<1307744455.19685006.1732544987164@lor1-app113732.prod.linkedin.com>" + }, + { + "name": "Subject", + "value": "Don\u2019t be too quick to accept a job\u2026" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"----=_Part_19685004_847781199.1732544987162\"" + }, + { + "name": "To", + "value": "Khushal PS " + }, + { + "name": "Date", + "value": "Mon, 25 Nov 2024 14:29:47 +0000 (UTC)" + }, + { + "name": "X-LinkedIn-Class", + "value": "NETWORKDIGEST" + }, + { + "name": "X-LinkedIn-Template", + "value": "email_notification_digest_01" + }, + { + "name": "X-LinkedIn-fbl", + "value": "m2-aszqd8zkspuf287a8bx31vrz8sk5ja17z01xcysyvru7cm8ox3fyjnnbn805spqs14tmds35nuyhnbcesiw70a1qp24c3d0m71rtbm" + }, + { + "name": "X-LinkedIn-Id", + "value": "j7zu7i-m3x4exhn-ja" + }, + { + "name": "List-Unsubscribe", + "value": "" + }, + { + "name": "List-Unsubscribe-Post", + "value": "List-Unsubscribe=One-Click" + }, + { + "name": "Feedback-ID", + "value": "email_notification_digest_01:linkedin" + }, + { + "name": "Require-Recipient-Valid-Since", + "value": "pskhushal@gmail.com; Mon, 24 Jul 2023 06:55:23 +0000" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain;charset=UTF-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + }, + { + "name": "Content-ID", + "value": "text-body" + } + ], + "body": { + "size": 2736, + "data": "RG9u4oCZdCBiZSB0b28gcXVpY2sgdG8gYWNjZXB0IGEgam9iIG9mZmVyLiBNYWtlIHN1cmUgdG8gYXNrIHlvdXJzZWxmIHRoZXNlIHF1ZXN0aW9ucyBmaXJzdC4NClNlZSBuZXdzbGV0dGVyOmh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybiUzQWxpJTNBYWN0aXZpdHklM0E3MjY1MzMzNDQ5NDA4ODY0MjU3P2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJm1pZFRva2VuPUFRRlBhMjNOem8xOEZRJm1pZFNpZz0ybWF1Y19tZnZCQ1h3MSZ0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtbm90aWZpY2F0aW9uX2RpZ2VzdC0wLUVESVRPUklBTF9CTEFaRV9JTkFQUCZ0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1ub3RpZmljYXRpb25fZGlnZXN0LTAtRURJVE9SSUFMX0JMQVpFX0lOQVBQLW51bGwtajd6dTdpfm0zeDRleGhufmphLW51bGwtbnVsbCZlaWQ9ajd6dTdpLW0zeDRleGhuLWphJm90cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1OaFpEazBPVGxtWVdFNFpUWmhOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5HUmtObU5oWmpNME5XWmpZekpoWWpFelpXSTJPVEZtTWpNd1lXUm1PVFppTXpJek1EWm1aR1V4T1RFME5UZzBMREVzTVElM0QlM0QNCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClRoaXMgZW1haWwgd2FzIGludGVuZGVkIGZvciBLaHVzaGFsIFBTICgtLSkNCkxlYXJuIHdoeSB3ZSBpbmNsdWRlZCB0aGlzOiBodHRwczovL3d3dy5saW5rZWRpbi5jb20vaGVscC9saW5rZWRpbi9hbnN3ZXIvNDc4OD9sYW5nPWVuJmxpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJm1pZFRva2VuPUFRRlBhMjNOem8xOEZRJm1pZFNpZz0ybWF1Y19tZnZCQ1h3MSZ0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtU2VjdXJpdHlIZWxwLTAtdGV4dGZvb3RlcmdsaW1tZXImdHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtU2VjdXJpdHlIZWxwLTAtdGV4dGZvb3RlcmdsaW1tZXItbnVsbC1qN3p1N2l-bTN4NGV4aG5-amEtbnVsbC1udWxsJmVpZD1qN3p1N2ktbTN4NGV4aG4tamEmb3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU5oWkRrME9UbG1ZV0U0WlRaaE4ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkdSa05tTmhaak0wTldaall6SmhZakV6WldJMk9URm1Nak13WVdSbU9UWmlNekl6TURabVpHVXhPVEUwTlRnMExERXNNUSUzRCUzRA0KWW91IGFyZSByZWNlaXZpbmcgTGlua2VkSW4gbm90aWZpY2F0aW9uIGVtYWlscy4NCg0KVW5zdWJzY3JpYmU6IGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL3BzZXR0aW5ncy9lbWFpbC11bnN1YnNjcmliZT9saXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDElM0IlMkJsOWY1ejVZUk9TbXJWc00lMkZFZ2hoZyUzRCUzRCZtaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZtaWRTaWc9Mm1hdWNfbWZ2QkNYdzEmdHJrPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLXVuc3Vic2NyaWJlLTAtdGV4dGZvb3RlcmdsaW1tZXImdHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtdW5zdWJzY3JpYmUtMC10ZXh0Zm9vdGVyZ2xpbW1lci1udWxsLWo3enU3aX5tM3g0ZXhobn5qYS1udWxsLW51bGwmZWlkPWo3enU3aS1tM3g0ZXhobi1qYSZsb2lkPUFRSDVQQ3dDVjR3WF9BQUFBWk5qdW4wTEhVVHROM3R5dHdEYlN2Q0U0UWR2RTNNMFhaVzV4cmpfdFFRdFRLdEZ4WHljMHNOZnVmRHVXR2dkLXl5blNudkVrcFlDbWVIUEs3RFFNancNCkhlbHA6IGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9oZWxwL2xpbmtlZGluL2Fuc3dlci82Nz9sYW5nPWVuJmxpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJm1pZFRva2VuPUFRRlBhMjNOem8xOEZRJm1pZFNpZz0ybWF1Y19tZnZCQ1h3MSZ0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVscC0wLXRleHRmb290ZXJnbGltbWVyJnRya0VtYWlsPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLWhlbHAtMC10ZXh0Zm9vdGVyZ2xpbW1lci1udWxsLWo3enU3aX5tM3g0ZXhobn5qYS1udWxsLW51bGwmZWlkPWo3enU3aS1tM3g0ZXhobi1qYSZvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTmhaRGswT1RsbVlXRTRaVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVOR1JrTm1OaFpqTTBOV1pqWXpKaFlqRXpaV0kyT1RGbU1qTXdZV1JtT1RaaU16SXpNRFptWkdVeE9URTBOVGcwTERFc01RJTNEJTNEDQoNCsKpIDIwMjQgTGlua2VkSW4gQ29ycG9yYXRpb24sIDF6d25qMDAwIFdlc3QgTWF1ZGUgQXZlbnVlLCBTdW5ueXZhbGUsIENBIDk0MDg1Lg0KTGlua2VkSW4gYW5kIHRoZSBMaW5rZWRJbiBsb2dvIGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgTGlua2VkSW4u" + } + }, + { + "partId": "1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html;charset=UTF-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + }, + { + "name": "Content-ID", + "value": "html-body" + } + ], + "body": { + "size": 22899, + "data": "PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPiA8aGVhZD4gPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCI-IDxtZXRhIG5hbWU9IkhhbmRoZWxkRnJpZW5kbHkiIGNvbnRlbnQ9InRydWUiPiA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoOyBpbml0aWFsLXNjYWxlPTAuNjY2NjY3OyB1c2VyLXNjYWxhYmxlPTAiPiA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoIj4gPHRpdGxlPjwvdGl0bGU-IDxzdHlsZT4NCiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MTJweCkgeyAubWVyY2Fkby1jb250YWluZXIgeyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9IH0NCiAgICAgICAgICA8L3N0eWxlPiA8c3R5bGU-DQogICAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHsgLmlubGluZS1idXR0b24sIC5pbmxpbmUtYnV0dG9uIHRhYmxlIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9DQogICAgICAgICAgICAuZnVsbC13aWR0aC1idXR0b24sIC5mdWxsLXdpZHRoLWJ1dHRvbiB0YWJsZSB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH0gfQ0KICAgICAgICAgIDwvc3R5bGU-IDxzdHlsZT5ib2R5IHtmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgc3lzdGVtLXVpLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgJ0hlbHZldGljYSBOZXVlJywNCiAgICAgICAgICAgICdGaXJhIFNhbnMnLCBVYnVudHUsIE94eWdlbiwgJ094eWdlbiBTYW5zJywgQ2FudGFyZWxsLCAnRHJvaWQgU2FucycsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsDQogICAgICAgICAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJywgJ0x1Y2lkYSBHcmFuZGUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO308L3N0eWxlPiA8IS0tW2lmIG1zb10-PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gPC9zdHlsZT48IVtlbmRpZl0tLT4gPCEtLVtpZiBJRV0-PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gPC9zdHlsZT48IVtlbmRpZl0tLT4gPC9oZWFkPiA8Ym9keSBkaXI9Imx0ciIgY2xhc3M9ImZvbnQtc2FucyBiZy1jb2xvci1iYWNrZ3JvdW5kLWNhbnZhcyB3LWZ1bGwgbS0wIHAtMCBwdC0xIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbWFyZ2luOiAwcHg7IHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmMmYwOyBwYWRkaW5nOiAwcHg7IHBhZGRpbmctdG9wOiA4cHg7IGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCAnSGVsdmV0aWNhIE5ldWUnLCAnRmlyYSBTYW5zJywgVWJ1bnR1LCBPeHlnZW4sICdPeHlnZW4gU2FucycsIENhbnRhcmVsbCwgJ0Ryb2lkIFNhbnMnLCAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJywgJ0x1Y2lkYSBHcmFuZGUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyI-IDxkaXYgY2xhc3M9ImgtMCBvcGFjaXR5LTAgdGV4dC10cmFuc3BhcmVudCBpbnZpc2libGUgb3ZlcmZsb3ctaGlkZGVuIHctMCBtYXgtaC1bMF0iIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IGhlaWdodDogMHB4OyBtYXgtaGVpZ2h0OiAwOyB3aWR0aDogMHB4OyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAwOyBtc28taGlkZTogYWxsOyIgZGF0YS1lbWFpbC1wcmVoZWFkZXI9InRydWUiPkhlcmXigJlzIHdoYXTigJlzIGhhcHBlbmVkIHNpbmNlIHlvdSB3ZXJlIGxhc3Qgb24gTGlua2VkSW48L2Rpdj4gPGRpdiBjbGFzcz0iaC0wIG9wYWNpdHktMCB0ZXh0LXRyYW5zcGFyZW50IGludmlzaWJsZSBvdmVyZmxvdy1oaWRkZW4gdy0wIG1heC1oLVswXSIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgaGVpZ2h0OiAwcHg7IG1heC1oZWlnaHQ6IDA7IHdpZHRoOiAwcHg7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IDA7IG1zby1oaWRlOiBhbGw7Ij4gzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCA8L2Rpdj4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iNTEyIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0ibWVyY2Fkby1jb250YWluZXIgdy1bNTEycHhdIG1heC13LVs1MTJweF0gbXgtYXV0byBteS0wIHAtMCBiZy1jb2xvci1iYWNrZ3JvdW5kLWNvbnRhaW5lciIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW4tbGVmdDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyBtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDsgd2lkdGg6IDUxMnB4OyBtYXgtd2lkdGg6IDUxMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyBwYWRkaW5nOiAwcHg7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgcC0zIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmc6IDI0cHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0ibWluLXctZnVsbCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtaW4td2lkdGg6IDEwMCU7Ij4gPHRib2R5PiA8dHI-IDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkLz9saXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDElM0IlMkJsOWY1ejVZUk9TbXJWc00lMkZFZ2hoZyUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0ybWF1Y19tZnZCQ1h3MSZhbXA7dHJrPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLWhlYWRlci0wLWhvbWVfZ2xpbW1lcl9keW5hbWljX2JhZGdpbmdfaGlnaF9kcGkmYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLWhlYWRlci0wLWhvbWVfZ2xpbW1lcl9keW5hbWljX2JhZGdpbmdfaGlnaF9kcGktbnVsbC1qN3p1N2l-bTN4NGV4aG5-amEtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDRleGhuLWphJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTmhaRGswT1RsbVlXRTRaVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVOR1JrTm1OaFpqTTBOV1pqWXpKaFlqRXpaV0kyT1RGbU1qTXdZV1JtT1RaaU16SXpNRFptWkdVeE9URTBOVGcwTERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InctWzg0cHhdIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHdpZHRoOiA4NHB4OyI-IDxpbWcgY2xhc3M9ImgtWzM3cHhdIHctWzEwMXB4XSIgYWx0PSJMaW5rZWRJbiIgc3JjPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9kbXMvbG9nby92Mj9iYWRnZVRoZW1lPW1lcmNhZG8mYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJmFtcDttaWRTaWc9Mm1hdWNfbWZ2QkNYdzEmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1udWxsLTAtY29tbXMlN0ViYWRnaW5nJTdFZHluYW1pYyU3RWdsaW1tZXIlN0V2Mi1udWxsLWo3enU3aSU3RW0zeDRleGhuJTdFamEtbnVsbC1udWxsJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtbnVsbC0wLWNvbW1zJTdFYmFkZ2luZyU3RWR5bmFtaWMlN0VnbGltbWVyJTdFdjImYW1wO19zaWc9MTVhdXNGVUtUQkNYdzEiIGRhdGEtdGVzdC1oZWFkZXItZHluYW1pYy1iYWRnaW5nLWltZy1oaWdoLWRwaSBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBoZWlnaHQ6IDM3cHg7IHdpZHRoOiAxMDFweDsiIHdpZHRoPSIxMDEiIGhlaWdodD0iMzciPiA8L2E-IDwvdGQ-IDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249InJpZ2h0IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgZGF0YS10ZXN0LWhlYWRlci1wcm9maWxlIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIGFsaWduPSJyaWdodCIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8YSBocmVmPSJodHRwczovL2luLmxpbmtlZGluLmNvbS9jb21tL2luL2todXNoYWwtcHMtN2E2MmI3Mjg1P2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTJtYXVjX21mdkJDWHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVhZGVyLTAtcHJvZmlsZV9nbGltbWVyJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1oZWFkZXItMC1wcm9maWxlX2dsaW1tZXItbnVsbC1qN3p1N2l-bTN4NGV4aG5-amEtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDRleGhuLWphJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTmhaRGswT1RsbVlXRTRaVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVOR1JrTm1OaFpqTTBOV1pqWXpKaFlqRXpaV0kyT1RGbU1qTXdZV1JtT1RaaU16SXpNRFptWkdVeE9URTBOVGcwTERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxzcGFuIGNsYXNzPSJuby11bmRlcmxpbmUgdGV4dC1zeXN0ZW0tZ3JheS05MCIgc3R5bGU9ImNvbG9yOiAjMjgyODI4OyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPktodXNoYWwgUFM8L3NwYW4-IDwvYT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InB4LTMgcGItMyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWxlZnQ6IDI0cHg7IHBhZGRpbmctcmlnaHQ6IDI0cHg7IHBhZGRpbmctYm90dG9tOiAyNHB4OyI-IDxkaXY-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJweC0xICIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWxlZnQ6IDhweDsgcGFkZGluZy1yaWdodDogOHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJwYi0yIHRleHQtY2VudGVyIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctYm90dG9tOiAxNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iYXV0byIgYWxpZ249ImNlbnRlciIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9ImlubGluZS1ibG9jayB3LTggaC04IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiA2NHB4OyB3aWR0aDogNjRweDsiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybiUzQWxpJTNBYWN0aXZpdHklM0E3MjY1MzMzNDQ5NDA4ODY0MjU3P2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTJtYXVjX21mdkJDWHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtZW50aXR5X3BpbGUtMC1FRElUT1JJQUxfQkxBWkVfSU5BUFBfMCZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtZW50aXR5X3BpbGUtMC1FRElUT1JJQUxfQkxBWkVfSU5BUFBfMC1udWxsLWo3enU3aX5tM3g0ZXhobn5qYS1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN4NGV4aG4tamEmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakU0WW1OaFpEazBPVGxtWVdFNFpUWmhOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU5HUmtObU5oWmpNME5XWmpZekpoWWpFelpXSTJPVEZtTWpNd1lXUm1PVFppTXpJek1EWm1aR1V4T1RFME5UZzBMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7Ij4gPGltZyBjbGFzcz0iaW5saW5lLWJsb2NrIHJlbGF0aXZlIGJnLWNvbG9yLWVudGl0eS1naG9zdC1iYWNrZ3JvdW5kIHctOCBoLTggIWJsb2NrIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9hZXJvLXYxL3NjL2gvODd1dTd4NW13bWF0c243djZmMjhzMjZvNSIgYWx0PSJHZXQgSGlyZWQgTG9nbyIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgcG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDY0cHg7IHdpZHRoOiA2NHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZWFlNmRmOyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyIgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0Ij4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icGItMiB0ZXh0LWNlbnRlciIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWJvdHRvbTogMTZweDsgdGV4dC1hbGlnbjogY2VudGVyOyI-IERvbuKAmXQgYmUgdG9vIHF1aWNrIHRvIGFjY2VwdCBhIGpvYiBvZmZlci4gTWFrZSBzdXJlIHRvIGFzayB5b3Vyc2VsZiB0aGVzZSBxdWVzdGlvbnMgZmlyc3QuIDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgY2xhc3M9ImVtYWlsLWJ1dHRvbiAiIGRhdGEtdGVzdC1pZD0iZW1haWwtYnV0dG9uIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249Im1pZGRsZSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybiUzQWxpJTNBYWN0aXZpdHklM0E3MjY1MzMzNDQ5NDA4ODY0MjU3P2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTJtYXVjX21mdkJDWHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVyb19ub3RpZmljYXRpb25fY3RhLTAtRURJVE9SSUFMX0JMQVpFX0lOQVBQJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1oZXJvX25vdGlmaWNhdGlvbl9jdGEtMC1FRElUT1JJQUxfQkxBWkVfSU5BUFAtbnVsbC1qN3p1N2l-bTN4NGV4aG5-amEtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDRleGhuLWphJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTmhaRGswT1RsbVlXRTRaVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVOR1JrTm1OaFpqTTBOV1pqWXpKaFlqRXpaV0kyT1RGbU1qTXdZV1JtT1RaaU16SXpNRFptWkdVeE9URTBOVGcwTERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgYXJpYS1sYWJlbD0iUmVhZCBtb3JlIiBjbGFzcz0iYWxpZ24tdG9wIG5vLXVuZGVybGluZSAiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgdmVydGljYWwtYWxpZ246IHRvcDsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iYXV0byIgY2xhc3M9ImJvcmRlci1zZXBhcmF0ZSAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJidG4tbWQgYnRuLXByaW1hcnkgYm9yZGVyLWNvbG9yLWJyYW5kIGJ1dHRvbi1saW5rIGxlYWRpbmctcmVndWxhciAhbWluLWgtW2F1dG9dICFzaGFkb3ctbm9uZSBib3JkZXItMSBib3JkZXItc29saWQgdy1bMzkwcHhdIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGhlaWdodDogbWluLWNvbnRlbnQ7IGJvcmRlci1yYWRpdXM6IDI0cHg7IHBhZGRpbmctdG9wOiAxMnB4OyBwYWRkaW5nLWJvdHRvbTogMTJweDsgcGFkZGluZy1sZWZ0OiAyNHB4OyBwYWRkaW5nLXJpZ2h0OiAyNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogIzBhNjZjMjsgY29sb3I6ICNmZmZmZmY7IHdpZHRoOiAzOTBweDsgYm9yZGVyLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7IGJvcmRlci1jb2xvcjogIzBhNjZjMjsgbGluZS1oZWlnaHQ6IDEuMjU7IG1pbi1oZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsgYm94LXNoYWRvdzogMCAwICMwMDAwLCAwIDAgIzAwMDAsIDAgMCAjMDAwMCAhaW1wb3J0YW50OyIgd2lkdGg9IjM5MCI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvdXBkYXRlL3VybiUzQWxpJTNBYWN0aXZpdHklM0E3MjY1MzMzNDQ5NDA4ODY0MjU3P2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTJtYXVjX21mdkJDWHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVyb19ub3RpZmljYXRpb25fY3RhLTAtRURJVE9SSUFMX0JMQVpFX0lOQVBQJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1oZXJvX25vdGlmaWNhdGlvbl9jdGEtMC1FRElUT1JJQUxfQkxBWkVfSU5BUFAtbnVsbC1qN3p1N2l-bTN4NGV4aG5-amEtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDRleGhuLWphJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTmhaRGswT1RsbVlXRTRaVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVOR1JrTm1OaFpqTTBOV1pqWXpKaFlqRXpaV0kyT1RGbU1qTXdZV1JtT1RaaU16SXpNRFptWkdVeE9URTBOVGcwTERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9Ii0xIiBhcmlhLWhpZGRlbj0idHJ1ZSIgY2xhc3M9Im5vLXVuZGVybGluZSIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPiA8c3BhbiBjbGFzcz0ibm8tdW5kZXJsaW5lIHRleHQtd2hpdGUiIHN0eWxlPSJjb2xvcjogI2ZmZmZmZjsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gUmVhZCBtb3JlIDwvc3Bhbj4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvZGl2PiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0iYmctY29sb3ItYmFja2dyb3VuZC1jYW52YXMgcC0zIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJhY2tncm91bmQtY29sb3I6ICNmM2YyZjA7IHBhZGRpbmc6IDI0cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9InRleHQtY2VudGVyIHBiLTIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1ib3R0b206IDE2cHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPiA8aDIgY2xhc3M9InRleHQtbGcgdGV4dC10ZWFsLTgwIiBzdHlsZT0ibWFyZ2luOiAwOyBmb250LXdlaWdodDogNTAwOyBmb250LXNpemU6IDIwcHg7IGNvbG9yOiAjMTE0OTUxOyI-IEdldCB0aGUgbmV3IExpbmtlZEluIGRlc2t0b3AgYXBwIDwvaDI-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBwYi0yIiBkYXRhLXRlc3QtaWQ9ImZvb3Rlci1hcHAtc3RvcmUtaWNvbiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWJvdHRvbTogMTZweDsgdGV4dC1hbGlnbjogY2VudGVyOyI-IDxhIGhyZWY9Imh0dHBzOi8vYXBwcy5taWNyb3NvZnQuY29tL3N0b3JlL2RldGFpbC85V1pETkNSRko0UTc_bGF1bmNoPXRydWUmYW1wO2NpZD1saW5rZWRpbl9lbWFpbF91cHNlbGwmYW1wO21vZGU9ZnVsbCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxpbWcgYWx0PSJHZXQgaXQgZnJvbSBNaWNyb3NvZnQiIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL2Flcm8tdjEvc2MvaC9lanBra3B3dnFrczMxYTNjanFva2I3ZmJtIiBjbGFzcz0iaC1bNDBweF0gdy1bMTEycHhdIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBoZWlnaHQ6IDQwcHg7IHdpZHRoOiAxMTJweDsiIHdpZHRoPSIxMTIiIGhlaWdodD0iNDAiPiA8L2E-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBwYi0yIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctYm90dG9tOiAxNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gPGgyIGNsYXNzPSJ0ZXh0LW1kIHRleHQtdGVhbC04MCIgc3R5bGU9Im1hcmdpbjogMDsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAxNnB4OyBjb2xvcjogIzExNDk1MTsiPiBBbHNvIGF2YWlsYWJsZSBvbiBtb2JpbGUgPC9oMj4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InRleHQtY2VudGVyIiBkYXRhLXRlc3QtaWQ9ImZvb3Rlci1hcHAtc3RvcmUtaWNvbiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gPGEgaHJlZj0iaHR0cHM6Ly9pdHVuZXMuYXBwbGUuY29tL3VzL2FwcC9saW5rZWRpbi9pZDI4ODQyOTA0MD9wdD0xMDc0NiZhbXA7Y3Q9c3RfYXBwc2l0ZV9mbGFnc2hpcCZhbXA7bXQ9OCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxpbWcgYWx0PSJEb3dubG9hZCBvbiB0aGUgQXBwIFN0b3JlIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9hZXJvLXYxL3NjL2gvNzZ5emtkMGg1a2l2MjdscmQ0eWFlbnlsayIgY2xhc3M9ImgtWzQwcHhdIHctWzEyMHB4XSBwci0xIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBoZWlnaHQ6IDQwcHg7IHdpZHRoOiAxMjBweDsgcGFkZGluZy1yaWdodDogOHB4OyIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI0MCI-IDwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS5saW5rZWRpbi5hbmRyb2lkJmFtcDtyZWZlcnJlcj1zdF9hcHBzaXRlX2ZsYWdzaGlwIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7Ij4gPGltZyBhbHQ9IkdldCBpdCBvbiBHb29nbGUgUGxheSIgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vYWVyby12MS9zYy9oLzE0MnF1ZHdibHA1OHp3bWM5dmtxZnBsdWciIGNsYXNzPSJoLVs0MHB4XSB3LVsxMzRweF0iIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGhlaWdodDogNDBweDsgd2lkdGg6IDEzNHB4OyIgd2lkdGg9IjEzNCIgaGVpZ2h0PSI0MCI-IDwvYT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InB5LTIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDE2cHg7IHBhZGRpbmctYm90dG9tOiAxNnB4OyI-PGhyIGNsYXNzPSJib3JkZXItbm9uZSBiZy1bI2UwZGZkZF0gaC1bMXB4XSIgc3R5bGU9ImhlaWdodDogMXB4OyBib3JkZXItc3R5bGU6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6ICNlMGRmZGQ7Ij48L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0idGV4dC14cyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDEycHg7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0icGItMSBtLTAiIGRhdGEtdGVzdC1pZD0iZW1haWwtZm9vdGVyX19pbnRlbmRlZCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW46IDBweDsgcGFkZGluZy1ib3R0b206IDhweDsiPiBUaGlzIGVtYWlsIHdhcyBpbnRlbmRlZCBmb3IgS2h1c2hhbCBQUyAoLS0pIDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwYi0xIG0tMCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW46IDBweDsgcGFkZGluZy1ib3R0b206IDhweDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vaGVscC9saW5rZWRpbi9hbnN3ZXIvNDc4OD9sYW5nPWVuJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDElM0IlMkJsOWY1ejVZUk9TbXJWc00lMkZFZ2hoZyUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0ybWF1Y19tZnZCQ1h3MSZhbXA7dHJrPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLVNlY3VyaXR5SGVscC0wLWZvb3RlcmdsaW1tZXImYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLVNlY3VyaXR5SGVscC0wLWZvb3RlcmdsaW1tZXItbnVsbC1qN3p1N2l-bTN4NGV4aG5-amEtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDRleGhuLWphJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpFNFltTmhaRGswT1RsbVlXRTRaVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVOR1JrTm1OaFpqTTBOV1pqWXpKaFlqRXpaV0kyT1RGbU1qTXdZV1JtT1RaaU16SXpNRFptWkdVeE9URTBOVGcwTERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InRleHQtaW5oZXJpdCB1bmRlcmxpbmUiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTsiPkxlYXJuIHdoeSB3ZSBpbmNsdWRlZCB0aGlzLjwvYT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InBiLTEgbS0wIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IG1hcmdpbjogMHB4OyBwYWRkaW5nLWJvdHRvbTogOHB4OyI-WW91IGFyZSByZWNlaXZpbmcgTGlua2VkSW4gbm90aWZpY2F0aW9uIGVtYWlscy48L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icGItMSBtLTAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgbWFyZ2luOiAwcHg7IHBhZGRpbmctYm90dG9tOiA4cHg7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vcHNldHRpbmdzL2VtYWlsLXVuc3Vic2NyaWJlP2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTJtYXVjX21mdkJDWHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtdW5zdWJzY3JpYmUtMC1mb290ZXJHbGltbWVyJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS11bnN1YnNjcmliZS0wLWZvb3RlckdsaW1tZXItbnVsbC1qN3p1N2l-bTN4NGV4aG5-amEtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zeDRleGhuLWphJmFtcDtsb2lkPUFRSDVQQ3dDVjR3WF9BQUFBWk5qdW4wTEhVVHROM3R5dHdEYlN2Q0U0UWR2RTNNMFhaVzV4cmpfdFFRdFRLdEZ4WHljMHNOZnVmRHVXR2dkLXl5blNudkVrcFlDbWVIUEs3RFFNanciIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idGV4dC1pbmhlcml0IHVuZGVybGluZSIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IGNvbG9yOiBpbmhlcml0OyB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyI-VW5zdWJzY3JpYmU8L2E-IMKgwqDCt8KgwqAgPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2hlbHAvbGlua2VkaW4vYW5zd2VyLzY3P2xhbmc9ZW4mYW1wO2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTJtYXVjX21mdkJDWHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVscC0wLWZvb3RlcmdsaW1tZXImYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLWhlbHAtMC1mb290ZXJnbGltbWVyLW51bGwtajd6dTdpfm0zeDRleGhufmphLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0ZXhobi1qYSZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU5oWkRrME9UbG1ZV0U0WlRaaE4ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkdSa05tTmhaak0wTldaall6SmhZakV6WldJMk9URm1Nak13WVdSbU9UWmlNekl6TURabVpHVXhPVEUwTlRnMExERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ0ZXh0LWluaGVyaXQgdW5kZXJsaW5lIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgY29sb3I6IGluaGVyaXQ7IHRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7Ij5IZWxwPC9hPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icGItMSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWJvdHRvbTogOHB4OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvP2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyQmw5ZjV6NVlST1NtclZzTSUyRkVnaGhnJTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTJtYXVjX21mdkJDWHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtZm9vdGVyLTAtbG9nb0dsaW1tZXImYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLWZvb3Rlci0wLWxvZ29HbGltbWVyLW51bGwtajd6dTdpfm0zeDRleGhufmphLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3g0ZXhobi1qYSZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqRTRZbU5oWkRrME9UbG1ZV0U0WlRaaE4ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TkdSa05tTmhaak0wTldaall6SmhZakV6WldJMk9URm1Nak13WVdSbU9UWmlNekl6TURabVpHVXhPVEUwTlRnMExERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsiPiA8aW1nIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL2Flcm8tdjEvc2MvaC85ZWhlNm4zOWZhMDdkYzVlZHp2MHJsYTRlIiBhbHQ9IkxpbmtlZEluIiBjbGFzcz0iYmxvY2sgaC1bMTRweF0gdy1bNTZweF0gaW1hZ2UtcmVuZGVyaW5nLWNyaXNwIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7IGltYWdlLXJlbmRlcmluZzogLW8tY3Jpc3AtZWRnZXM7IGltYWdlLXJlbmRlcmluZzogLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdDsgaW1hZ2UtcmVuZGVyaW5nOiBjcmlzcC1lZGdlczsgLW1zLWludGVycG9sYXRpb24tbW9kZTogbmVhcmVzdC1uZWlnaGJvcjsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTRweDsgd2lkdGg6IDU2cHg7IiB3aWR0aD0iNTYiIGhlaWdodD0iMTQiPiA8L2E-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGRhdGEtdGVzdC1jb3B5cmlnaHQtdGV4dCBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gwqkgMjAyNCBMaW5rZWRJbiBDb3Jwb3JhdGlvbiwgMSZ6d25qOzAwMCBXZXN0IE1hdWRlIEF2ZW51ZSwgU3Vubnl2YWxlLCBDQSA5NDA4NS4gPHNwYW4gZGF0YS10ZXN0LXRyYWRlbWFya3MtdGV4dD4gTGlua2VkSW4gYW5kIHRoZSBMaW5rZWRJbiBsb2dvIGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgTGlua2VkSW4uIDwvc3Bhbj4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPGltZyBhbHQgcm9sZT0icHJlc2VudGF0aW9uIiBzcmM9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9lbWltcC9pcF9ZV3BrTm1SVVpIQk1WekI2WlVSU2JHVkhhSFZNVjNCb09scFhNV2hoVjNobVltMDVNR0ZYV25CWk1rWXdZVmM1ZFZneVVuQmFNbFo2WkVZNGQwMVJQVDA2LmdpZiIgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj4gPC9ib2R5PiA8L2h0bWw-" + } + } + ] + }, + "sizeEstimate": 35324, + "historyId": "527418", + "internalDate": "1732544987000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_07_19362f9983e58ea6_20241126.json b/goog/controllers/gmail/json/messages/raw_message_07_19362f9983e58ea6_20241126.json new file mode 100644 index 0000000..5786592 --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_07_19362f9983e58ea6_20241126.json @@ -0,0 +1,210 @@ +{ + "id": "19362f9983e58ea6", + "threadId": "19362f9983e58ea6", + "labelIds": [ + "CATEGORY_PROMOTIONS", + "UNREAD", + "INBOX" + ], + "snippet": "INDIAN FILM & TELEVISION DIRECTORS' ASSOCIATION G- 8/9/10, Crescent Towers, Near Morya House, Andheri (W), Mumbai - 400 053 Tel: 022 46088096 Mob: 9892885346/ 7021494476 www.directorsiftda.com", + "payload": { + "partId": "", + "mimeType": "multipart/related", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp832066wrq; Mon, 25 Nov 2024 02:59:05 -0800 (PST)" + }, + { + "name": "X-Forwarded-Encrypted", + "value": "i=2; AJvYcCWTJ16JRatSfV54WvhqvY7z3mW9LUmKJsBYYVJp5gas68X0OXWAugWTJyyEQE0ESerQAquXl7ZIugA=@gmail.com" + }, + { + "name": "X-Received", + "value": "by 2002:a17:906:3188:b0:a99:7bc0:bca9 with SMTP id a640c23a62f3a-aa50990b300mr1091084466b.3.1732532345051; Mon, 25 Nov 2024 02:59:05 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732532345; cv=none; d=google.com; s=arc-20240605; b=cGPTlt9iJZomIZrEX1YxFZt7CeiQG3g/9XJ/DHe6g6ghGuBopYyGtWRIq/b0u5ezsK 3JyasTQwmCnqAmvhDEgUZQM/f2Bk8PshykVmLfSUzhP0vUS2wfg90N1jmaMTefDGFvlF lSjmHBlgpl4Vhn4BKGBnLuN3ttrMXvyZ6Vi4xGil9yDgW+KjwrL3fN2jdlFsOvhxODZR EE7q5SC0waIenSAllTd+0CcG4TrH7Q0ZrQYR0yVH98JZ4UJN6v5xqhwBmTMtlPx3mWw2 d8H5HXwevTXeYzYf/F7iKAlaaWu2IPM7k/e3HAatqQk/pKHfh6cmYqN1G/MzENERvOsk HmUQ==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=52sadrERSC8TqD31OwCOGWYBr43KUD3rPyq2rw8jz2Y=; fh=3tsGDR7RWsLBUvHMNbctop2/zoZmFmKl/B1BkNJ2jsE=; b=N9JHVDUsSOQO9HPax1y++VDKEbumii3FfXCPi2ec+NDD0lV4w+48dqXsrPO9k8XO03 FgGp+qnSgZps8TogBykk8a/bFPO4VJ0AZgt5b7v4i08Y+auiO+ywcP37yeZjB52iGVSU U0TcBLTtqQSBtlirHN4lG5t4CvNTgDhKDwr9UjvOqtLgValnrsySlSpoQQ+CRhaxC3Pq bEVn4CKh8dGlJWVvOA037UDZFBQtR6ygY7IbiXBEIFZsC49aH4lZbpyzA+Xh3H3X0Xtg LrM/0hxRNj33PLOvbm5gdS7F32djBbaoIXRl057QZV0JQbPa1fvEeDOwJCv8H6rECfHK m0UQ==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@directorsiftda-com.20230601.gappssmtp.com header.s=20230601 header.b=h3FDhhUH; spf=fail (google.com: domain of contact@directorsiftda.com does not designate 209.85.220.41 as permitted sender) smtp.mailfrom=contact@directorsiftda.com; dara=pass header.i=@gmail.com" + }, + { + "name": "Return-Path", + "value": "" + }, + { + "name": "Received", + "value": "from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id a640c23a62f3a-aa560bdd42csor237566b.0.2024.11.25.02.59.04 for (Google Transport Security); Mon, 25 Nov 2024 02:59:04 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "fail (google.com: domain of contact@directorsiftda.com does not designate 209.85.220.41 as permitted sender) client-ip=209.85.220.41;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@directorsiftda-com.20230601.gappssmtp.com header.s=20230601 header.b=h3FDhhUH; spf=fail (google.com: domain of contact@directorsiftda.com does not designate 209.85.220.41 as permitted sender) smtp.mailfrom=contact@directorsiftda.com; dara=pass header.i=@gmail.com" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=directorsiftda-com.20230601.gappssmtp.com; s=20230601; t=1732532344; x=1733137144; dara=google.com; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=52sadrERSC8TqD31OwCOGWYBr43KUD3rPyq2rw8jz2Y=; b=h3FDhhUHelnzSe5+as+rP+HnwiQlFmbqO/XDImaXOHroIQfkSRt1MAwH2o8MiNS07l fzAKjxqRmO+p+fy9FyRuQ7d0/TDALivdP4HW1CpU7nHUqqp8BamVDC06zS1RI2PCVo7s qp4cxTIJsFTVaMauaTWQCIj9xstz9lGMa7DuhyJ8deSJU6zIAn0rFOhLISFZfZkVtZEy Q4J4MBtf2DZVvaxqUNr/DqkaownkPsTWaxfXTE8Ztq41a9kb+2IfX+6kk6M80DF4pm8I 5Wju6mVd6xpms0UXJPtRPfRBFKEjEApYq6dypd37ETr+tkUynPrv10xfuSUvrZdzU73L 1uEQ==" + }, + { + "name": "X-Google-DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732532344; x=1733137144; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=52sadrERSC8TqD31OwCOGWYBr43KUD3rPyq2rw8jz2Y=; b=tQU+3IcgiGI90Bknb75WOMN2IpL9BIunrIP5KwfkJMvrRTWq9GzjUl0t6gUocRNiPn 1fJ2VgBd/nAvzUpg/2lcypTBbfp7019CxuW5aqungvCD5iWFzMUcOoudN0O4kMx0KrMX DFThj9pD951evE/jteODFBQt0886+8Ofo8KIWaCsSiJ7uerf968pWkkJm6lkHsMCFf97 wgiA4kN8X8i9d+ZFs2yo5MxZykY1Ll2YYmMozgIS6jsXLb0pveLtA1L0SFxbqRU+/Njf n6ibGo42xOWOM92qDEbJnDXNtlnOEVOAKA3sgazkG8pDpC9yf2RqMPWex9xCNAbbVNQE KTog==" + }, + { + "name": "X-Forwarded-Encrypted", + "value": "i=1; AJvYcCWtfq6Mi9XsVN+r9oOb64yoh/F6ROqg/9C0UMWDuXU/fz1A74BwcwwZQy0hyIykg2dwtgxUFBLIz0w=@gmail.com" + }, + { + "name": "X-Gm-Message-State", + "value": "AOJu0YxUy7pf/My+et+YkWa4bqQ26C2PeklIXRKdME1VkRVdK9A8dtmN p34rPukc6VEwoEvOLsIh42JHO+nLEOYgcdIMTfklpdIp+2SaamAG+j/zSQFpfdFhWov4PO2vbqx aOztICe4xCfaWEiv4jKQ3arZkHmUWwrT6xb1sOQ==" + }, + { + "name": "X-Gm-Gg", + "value": "ASbGncsXwRmXGJJAyTvAKY+pMS2y7/Mf8mmUI9AmHaycDBvZnbQkc20j125cXkjxmOG o3M/KYTcTZDKyHLOi5xRqMfOv1Qs8lwFelQ==" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IFopa4irNtf4tkqOS0N6Tc13BHGQQ6fNDsmqoW9klWPS/JD7cYNG9eMDQkP9k7DPZCzWaTq4bPYSLxo6IJY2OU=" + }, + { + "name": "X-Received", + "value": "by 2002:a17:906:1daa:b0:aa5:3853:5532 with SMTP id a640c23a62f3a-aa53853589dmr630025266b.43.1732532343546; Mon, 25 Nov 2024 02:59:03 -0800 (PST)" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "From", + "value": "Iftda India " + }, + { + "name": "Date", + "value": "Mon, 25 Nov 2024 16:28:50 +0530" + }, + { + "name": "Message-ID", + "value": "" + }, + { + "name": "Subject", + "value": "Sad Demise of Mr. Jalaj Dhir" + }, + { + "name": "To", + "value": "undisclosed-recipients:;" + }, + { + "name": "Content-Type", + "value": "multipart/related; boundary=\"000000000000e67bea0627ba9e63\"" + }, + { + "name": "Bcc", + "value": "pskhushal@gmail.com" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"000000000000e67be90627ba9e62\"" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0.0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain; charset=\"UTF-8\"" + } + ], + "body": { + "size": 672, + "data": "W2ltYWdlOiBjb25kb2xlbmNlcyBNci4gSkFMQUogREhJUi5qcGddDQoNCg0KKklORElBTioqIEZJTE0gJiBURUxFVklTSU9OIERJUkVDVE9SUycgQVNTT0NJQVRJT04qDQpHLSA4LzkvMTAsIENyZXNjZW50IFRvd2VycywNCk5lYXIgTW9yeWEgSG91c2UsDQpBbmRoZXJpIChXKSwgTXVtYmFpIC0gNDAwIDA1Mw0KVGVsOiAwMjIgNDYwODgwOTYNCk1vYjogOTg5Mjg4NTM0Ni8gNzAyMTQ5NDQ3Ng0Kd3d3LmRpcmVjdG9yc2lmdGRhLmNvbSB8IEZhY2Vib29rL2RpcmVjdG9yc2lmdGRhDQoNCipESVNDTEFJTUVSOiogVGhpcyBlLW1haWwgbWF5IGJlIHByaXZpbGVnZWQgYW5kL29yIGNvbmZpZGVudGlhbCwgYW5kIHRoZQ0Kc2VuZGVyIGRvZXMgbm90IHdhaXZlIGFueSByZWxhdGVkIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMuIEFueSBkaXN0cmlidXRpb24sDQp1c2Ugb3IgY29weWluZyBvZiB0aGlzIGUtbWFpbCBvciB0aGUgaW5mb3JtYXRpb24gaXQgY29udGFpbnMgYnkgb3RoZXIgdGhhbg0KYW4gaW50ZW5kZWQgcmVjaXBpZW50KHMpIGlzIHVuYXV0aG9yaXplZC4gSWYgeW91IHJlY2VpdmVkIHRoaXMgZS1tYWlsIGluDQplcnJvciwgcGxlYXNlIGFkdmlzZSB1cyAoYnkgcmV0dXJuIGUtbWFpbCBvciBvdGhlcndpc2UpIGltbWVkaWF0ZWx5IGFuZA0KZGVsZXRlIHRoaXMgZS1tYWlsLg0K" + } + }, + { + "partId": "0.1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html; charset=\"UTF-8\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 2187, + "data": "PGRpdiBkaXI9Imx0ciI-PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6JnF1b3Q7dHJlYnVjaGV0IG1zJnF1b3Q7LHNhbnMtc2VyaWY7Y29sb3I6cmdiKDY4LDY4LDY4KSI-PC9kaXY-PGltZyBzcmM9ImNpZDppaV9tM3d4MGo5YzAiIGFsdD0iY29uZG9sZW5jZXMgTXIuIEpBTEFKIERISVIuanBnIiB3aWR0aD0iNDcyIiBoZWlnaHQ9IjMzNCI-PGJyPjxiciBjbGVhcj0iYWxsIj48L2Rpdj48ZGl2PjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9zaWduYXR1cmUiIGRhdGEtc21hcnRtYWlsPSJnbWFpbF9zaWduYXR1cmUiPjxkaXYgZGlyPSJsdHIiPjxkaXY-PGRpdiBkaXI9Imx0ciI-PGRpdj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48ZGl2PjxzcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNjgsNjgsNjgpIj48c3Bhbj48Yj48Zm9udCBzaXplPSI0Ij48YnI-PC9mb250PjwvYj48L3NwYW4-PC9zcGFuPjwvc3Bhbj48ZGl2Pjxmb250IGZhY2U9InRhaG9tYSwgc2Fucy1zZXJpZiI-PGZvbnQ-PGI-SU5ESUFOPC9iPjwvZm9udD48Yj7CoEZJTE0gJmFtcDsgVEVMRVZJU0lPTiBESVJFQ1RPUlMmIzM5OyBBU1NPQ0lBVElPTjwvYj48L2ZvbnQ-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJ0YWhvbWEsIHNhbnMtc2VyaWYiPkctIDgvOS8xMCwgQ3Jlc2NlbnQgVG93ZXJzLMKgPGJyPjwvZm9udD48L2Rpdj48ZGl2IGRpcj0ibHRyIj48ZGl2Pjxmb250IGZhY2U9InRhaG9tYSwgc2Fucy1zZXJpZiI-TmVhciBNb3J5YSBIb3VzZSw8L2ZvbnQ-PC9kaXY-PGRpdj48Zm9udCBmYWNlPSJ0YWhvbWEsIHNhbnMtc2VyaWYiPkFuZGhlcmkgKFcpLCBNdW1iYWkgLSA0MDAgMDUzPC9mb250PjwvZGl2PjxkaXY-PHNwYW4gc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj5UZWw6wqA8L3NwYW4-PHNwYW4gc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj4wMjIgNDYwODgwOTY8L3NwYW4-PGZvbnQgZmFjZT0idGFob21hLCBzYW5zLXNlcmlmIj48YnI-PC9mb250PjwvZGl2PjxkaXY-PGZvbnQgZmFjZT0idGFob21hLCBzYW5zLXNlcmlmIj5Nb2I6IDxzcGFuIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI-OTg5Mjg4NTM0Ni8gNzAyMTQ5NDQ3Njwvc3Bhbj48L2ZvbnQ-PC9kaXY-PC9kaXY-PC9kaXY-PGRpdj48ZGl2IGRpcj0ibHRyIj48ZGl2PjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNjgsNjgsNjgpIj48Zm9udCBmYWNlPSJ0YWhvbWEsIHNhbnMtc2VyaWYiPjxmb250IHNpemU9IjIiPnd3dy5kaXJlY3RvcnNpZnRkYTwvZm9udD4uY29tIHwgRmFjZWJvb2svZGlyZWN0b3JzaWZ0ZGE8L2ZvbnQ-PGJyPjxicj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjhweCI-PGI-PGk-PHU-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo4cHQiIGxhbmc9IkVOLVVTIj5ESVNDTEFJTUVSOjwvc3Bhbj48L3U-PC9pPjwvYj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjhwdCI-PC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6OHB0O2JhY2tncm91bmQ6d2hpdGUgbm9uZSByZXBlYXQgc2Nyb2xsIDAlIDAlIj4gVGhpcw0KIGUtbWFpbCBtYXkgYmUgcHJpdmlsZWdlZCBhbmQvb3IgY29uZmlkZW50aWFsLCBhbmQgdGhlIHNlbmRlciBkb2VzIG5vdCANCndhaXZlIGFueSByZWxhdGVkIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMuIEFueSBkaXN0cmlidXRpb24sIHVzZSBvciANCmNvcHlpbmcgb2YgdGhpcyBlLW1haWwgb3IgdGhlIGluZm9ybWF0aW9uIGl0IGNvbnRhaW5zIGJ5IG90aGVyIHRoYW4gYW4gDQppbnRlbmRlZCByZWNpcGllbnQocykgaXMgdW5hdXRob3JpemVkLiBJZiB5b3UgcmVjZWl2ZWQgdGhpcyBlLW1haWwgaW4gDQplcnJvciwgcGxlYXNlIGFkdmlzZSB1cyAoYnkgcmV0dXJuIGUtbWFpbCBvciBvdGhlcndpc2UpIGltbWVkaWF0ZWx5IGFuZCANCmRlbGV0ZSB0aGlzIGUtbWFpbC48L3NwYW4-PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTo4cHQiPjwvc3Bhbj48L3NwYW4-PC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg0K" + } + } + ] + }, + { + "partId": "1", + "mimeType": "image/jpeg", + "filename": "condolences Mr. JALAJ DHIR.jpg", + "headers": [ + { + "name": "Content-Type", + "value": "image/jpeg; name=\"condolences Mr. JALAJ DHIR.jpg\"" + }, + { + "name": "Content-Disposition", + "value": "inline; filename=\"condolences Mr. JALAJ DHIR.jpg\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "base64" + }, + { + "name": "Content-ID", + "value": "" + }, + { + "name": "X-Attachment-Id", + "value": "ii_m3wx0j9c0" + } + ], + "body": { + "attachmentId": "ANGjdJ8zCv8y-pC8ecFP7IVoYsW4sTkayvcSepjUwiCDIrSUTJPBua7Ack8YvSuFPYcM-np_PeWRTl_wq5dYpyz3k6Hc5e-tp4RZjT6t2ITBDpkqJhPn17eR36sVN41ojkJ63Wzd9HD60LDk3o4GiL8C6iyMlsHMhadvOXKYK5zITlU9mvtdMoye6fofiiLwRsoNuT9dEpBbk9r2gh-vmuYpbu0waybh_EKefEejDvuOl7cIFU1Y3Dv8kxWYQwtZ1kx1LhHF24TzisZjvBaF6cno1T6f9aTdNd3x5T0_YsgJNilfU3xdWbCYilbVACU8axpIN5mC9CwhD45ogliA9kLadSpig8KmW9MNJJxr1vMnOAI4G-zr1SAhkzm6ZXcHllk9WpncS8RRRaLilLxo", + "size": 1736748 + } + } + ] + }, + "sizeEstimate": 2385712, + "historyId": "527104", + "internalDate": "1732532330000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_08_19360aabcb976cfc_20241126.json b/goog/controllers/gmail/json/messages/raw_message_08_19360aabcb976cfc_20241126.json new file mode 100644 index 0000000..3d27db3 --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_08_19360aabcb976cfc_20241126.json @@ -0,0 +1,175 @@ +{ + "id": "19360aabcb976cfc", + "threadId": "19360aabcb976cfc", + "labelIds": [ + "CATEGORY_PROMOTIONS", + "UNREAD", + "INBOX" + ], + "snippet": "We have recommendations for you. Amazon.in Your Amazon.in Today's Deals Get Amazon App Hello Khushal PS, Amazon has new recommendations for you based on your browsing history. ApTechDeals Jumper", + "payload": { + "partId": "", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp661788wrq; Sun, 24 Nov 2024 16:13:42 -0800 (PST)" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IHanryCaGmStSWs4yq7Sf1frpeEiyg5Nggft2Z8FInics0aCrk0ZHEoyH5QEoE10zCg/rlE" + }, + { + "name": "X-Received", + "value": "by 2002:a05:6402:1ed1:b0:5cf:d154:8360 with SMTP id 4fb4d7f45d1cf-5d020629086mr8314902a12.14.1732493622319; Sun, 24 Nov 2024 16:13:42 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732493622; cv=none; d=google.com; s=arc-20240605; b=UIRhCb665snEBYH7WT/9jeDblWtB56t1BU6l9H+yfSaNFtRD5rWCBgwJA3px3AmImK DdiaEz0+DyVA5MZzVNNE7ElVVLv16fRL+2rkS7BsocFTdooUdo746+MlE/8Nc7LAjLVU 02xrjPGQnPg0R+gia6OTfn6EB2CaNxgzvTTNrc4MLX8B2fQGbVcgorjBZXb7SLXtcPEe YgmyvfLt5rH/zIxUUxcWVDffT4naGSgLZu4gGJEWc1Lb4bimx0JyXMZZz0JQKpoCngZ2 vz3KECtMn3zyBx7074Dfgkp+AJ1c6pdUeOaOmLyb/kRJbYlZzKmjARDOw0opKjsmmTIJ X6hw==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:list-unsubscribe:list-unsubscribe-post:bounces-to :mime-version:subject:message-id:to:from:date:dkim-signature :dkim-signature; bh=ldmDubq3LFGMnmC2Cu4/f11BWUDZh+9c76Uthp8D9q4=; fh=u/EceduMLbMJaVmVACWimtVNyu5iebWbNB9Q7JrDYgs=; b=BMSGvb44O+D1FMvIpIUyDdENgV2TzRErw6LmoIlmuab/SR6d+bWpDaEpskmxWYGl35 58rcSu0aeIDRmj/t859PlX7YBf5ncJt47K9VaNj8HkAYajFcp3jGUxXNuvo0pI4RmX+e DQTTKqw036f2nsuSoZT/6ZUFKODp7Ul6okiO/Ox1qVlB2IEAGcPun1lGOjIhKCRgbYao G51Tx9eZz73WUWN2px/FN3es920oHjbAkFiu869kZNb+wHROuqY6s3EepMPkX2V6cEFm EszKcCahoFYW3z3LUVEpQTIbCwtJ1nqhXQHxkdVFzs/LeAzptWwXd4eRJt3B/I+1/tcq XWow==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@amazon.in header.s=55spn7jg3iwyluzn4ej7wq3ev2vqedgu header.b=s9BTBq8d; dkim=pass header.i=@amazonses.com header.s=uku4taia5b5tsbglxyj6zym32efj7xqv header.b=\"g/7NynP4\"; spf=pass (google.com: domain of 202411250013413641827aa48d45a0a7523e458630p0eu-c1omwb0dighlu8@bounces.amazon.in designates 23.249.218.111 as permitted sender) smtp.mailfrom=202411250013413641827aa48d45a0a7523e458630p0eu-C1OMWB0DIGHLU8@bounces.amazon.in; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.in" + }, + { + "name": "Return-Path", + "value": "<202411250013413641827aa48d45a0a7523e458630p0eu-C1OMWB0DIGHLU8@bounces.amazon.in>" + }, + { + "name": "Received", + "value": "from d218-111.smtp-out.eu-west-2.amazonses.com (d218-111.smtp-out.eu-west-2.amazonses.com. [23.249.218.111]) by mx.google.com with ESMTPS id a640c23a62f3a-aa50b5aac4bsi380328066b.813.2024.11.24.16.13.42 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 24 Nov 2024 16:13:42 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of 202411250013413641827aa48d45a0a7523e458630p0eu-c1omwb0dighlu8@bounces.amazon.in designates 23.249.218.111 as permitted sender) client-ip=23.249.218.111;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@amazon.in header.s=55spn7jg3iwyluzn4ej7wq3ev2vqedgu header.b=s9BTBq8d; dkim=pass header.i=@amazonses.com header.s=uku4taia5b5tsbglxyj6zym32efj7xqv header.b=\"g/7NynP4\"; spf=pass (google.com: domain of 202411250013413641827aa48d45a0a7523e458630p0eu-c1omwb0dighlu8@bounces.amazon.in designates 23.249.218.111 as permitted sender) smtp.mailfrom=202411250013413641827aa48d45a0a7523e458630p0eu-C1OMWB0DIGHLU8@bounces.amazon.in; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amazon.in" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=55spn7jg3iwyluzn4ej7wq3ev2vqedgu; d=amazon.in; t=1732493621; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type:List-Unsubscribe-Post:List-Unsubscribe; bh=BWlUoMNUXOKxZJNOjaXvq7Yu52kYUSPrnq16gYbWThY=; b=s9BTBq8d8PNsS3tkQOQHNpDubQYycaDvfh9Yo7nr675VilgUodcx+FoDklgEz1fy sAccjqxkAgSGtulLLF9LeALdylPONbtfh5tPNnWtq5ffx4jQ23Wx2ctCYcYu92jl31k 3u0SS6pqy97wJC6cxQj1YDDBifahkV0JUiOpxsy0=" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=uku4taia5b5tsbglxyj6zym32efj7xqv; d=amazonses.com; t=1732493621; h=Date:From:To:Message-ID:Subject:MIME-Version:Content-Type:List-Unsubscribe-Post:List-Unsubscribe:Feedback-ID; bh=BWlUoMNUXOKxZJNOjaXvq7Yu52kYUSPrnq16gYbWThY=; b=g/7NynP4SzLDufmCYtRzshP8Vhzusb0okP9AzqCIOl88VBEHn51s+ixZmMD8TBbj XapRYYsU6j7DxsYv7e7hkMLFk7BooJxrcqxNsI7RSsShBr82OUptA6VmpinPN1W8Trq 0288+IonhmVzaQwXJ+0OfhxJmtJHULN66zT5zXDE=" + }, + { + "name": "Date", + "value": "Mon, 25 Nov 2024 00:13:41 +0000" + }, + { + "name": "From", + "value": "\"Amazon.in\" " + }, + { + "name": "To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Message-ID", + "value": "<0102019360aaba40-7b9b78a6-a8c2-466a-b85d-ae4a38330684-000000@eu-west-1.amazonses.com>" + }, + { + "name": "Subject", + "value": "\"ApTechDeals Jumper Wires Male to...\" and more" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"----=_Part_3547416_1504951793.1732493621814\"" + }, + { + "name": "X-AMAZON-MAIL-RELAY-TYPE", + "value": "notification" + }, + { + "name": "Bounces-to", + "value": "202411250013413641827aa48d45a0a7523e458630p0eu-C1OMWB0DIGHLU8@bounces.amazon.in" + }, + { + "name": "X-AMAZON-METADATA", + "value": "CA=C1OMWB0DIGHLU8-CU=AO8IZF00FXJKW" + }, + { + "name": "List-Unsubscribe-Post", + "value": "List-Unsubscribe=One-Click" + }, + { + "name": "List-Unsubscribe", + "value": "" + }, + { + "name": "X-Original-MessageID", + "value": "" + }, + { + "name": "Feedback-ID", + "value": "1217521881::1.eu-west-1.kjoQSiqb8G+7lWWiDVsxjM2m0ynYd4I6yEFlfoox6aY=:AmazonSES" + }, + { + "name": "X-SES-Outgoing", + "value": "2024.11.25-23.249.218.111" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain; charset=utf-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 2315, + "data": "DQoNCg0KDQo9PT09PT09PT09DQpBTUFaT04uSU4NCj09PT09PT09PT0NCg0KDQoNCkFtYXpvbiBoYXMgbmV3IHJlY29tbWVuZGF0aW9ucyBmb3IgeW91IGJhc2VkIG9uIHlvdXIgYnJvd3NpbmcgaGlzdG9yeS4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KDQpBcFRlY2hEZWFscyBKdW1wZXIgV2lyZXMgTWFsZSB0byBNYWxlLCBNYWxlIHRvIEZlbWFsZSwgRmVtYWxlIHRvIEZlbWFsZS9icmVhZGJvYXJkIGp1bXBlciB3aXJlcyAoNDArNDArNDApDQpBcFRlY2hEZWFscw0KaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3Byb2R1Y3QvQjA3NEpCNlNYOC9yZWY9cGVfNDEwNzUwMV8xMjE3NTIxODgxX2VtXzFwXzFfdGkNCk0uUi5QLjog4oK5NDk5LjAwICAgDQpQcmljZTog4oK5MTg5LjAwDQpZb3UgU2F2ZTog4oK5MzEwLjAwICg2MiUpDQouLi4NCg0KICAgIA0KDQoNClNxdWFkUGl4ZWwgRXNwLTMyIFdpZmksIEJsdWV0b290aCwgRHVhbCBDb3JlIENoaXAgRGV2ZWxvcG1lbnQgQm9hcmQgKEVTUC1XUk9PTS0zMikNCmRpeW1vcmUNCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9wcm9kdWN0L0IwNzFYUDU2TE0vcmVmPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9lbV8xcF8yX3RpDQpNLlIuUC46IOKCuTk5OS4wMCAgIA0KUHJpY2U6IOKCuTU1Ny4wMA0KWW91IFNhdmU6IOKCuTQ0Mi4wMCAoNDQlKQ0KLi4uDQoNCiAgICANCg0KDQp4Y2x1bWEgREFDIE1vZHVsZSAxMzM0IFVEQTEzMzRBIEkyUyBEQUMgU3RlcmVvIERlY29kZXIgTW9kdWxlIEZvciB1bm8gMy4zViAtIDVWDQp4Y2x1bWENCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9wcm9kdWN0L0IwQkI3UEc1NFQvcmVmPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9lbV8xcF8zX3RpDQpNLlIuUC46IOKCuTcwOS4wMCAgIA0KRGVhbCBQcmljZTog4oK5NTE2LjAwDQpZb3UgU2F2ZTog4oK5MTkzLjAwICgyNyUpDQouLi4NCg0KICAgIA0KDQoNCg0KDQoNCg0KU2VlIHNpbWlsYXIgcHJvZHVjdHMNCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC95b3Vyc3RvcmUvcmVmPWVtX2ZsDQoNCj09PT09PT09PT0NCkFtYXpvbi5pbg0KaHR0cDovL3d3dy5hbWF6b24uaW4vcmVmPXBlX2Zvb3Rlci8NCg0KQ29ubmVjdCB3aXRoIFVzDQpPbiBGYWNlYm9vaw0KaHR0cDovL3d3dy5hbWF6b24uaW4vZ3AvcmVkaXJlY3QuaHRtbC9yZWY9cGVfNDIzMzcxXzM4NDc4OTMxX3BlXzBfMzQzNl9wZV9mYl9mdHIvP2xvY2F0aW9uPWh0dHA6Ly93d3cuZmFjZWJvb2suY29tL0FtYXpvbklOJnRva2VuPTIwNzVENUVBQzdCQjIxNDA4OTcyOEUyMTgzRkQzOTE3MDZENDFFOTQNCg0KT24gVHdpdHRlcg0KaHR0cDovL3d3dy5hbWF6b24uaW4vZ3AvcmVkaXJlY3QuaHRtbC9yZWY9cGVfNDIzMzcxXzM4NDc4OTMxX3BlXzBfMzQzNl9wZV90d19mdHIvP2xvY2F0aW9uPWh0dHA6Ly90d2l0dGVyLmNvbS9BbWF6b25JTiZ0b2tlbj1BMzA5REZCRkNCMUUzN0E4MDhGRjUzMTkzNDg1NURDODE3RjEzMEI2DQoNCj09PT09PT09PT0NCg0KV2UgaG9wZSB5b3UgZm91bmQgdGhpcyBtZXNzYWdlIHRvIGJlIHVzZWZ1bC4gSG93ZXZlciwgaWYgeW91J2QgcmF0aGVyIG5vdCByZWNlaXZlIGZ1dHVyZSBlLW1haWxzIG9mIHRoaXMgc29ydCBmcm9tIEFtYXpvbi5pbiwgcGxlYXNlIHZpc2l0IHRoZSBvcHQtb3V0IGxpbmsgaGVyZToNCmh0dHBzOi8vd3d3LmFtYXpvbi5pbi8vZ3AvZ3NzL28vMS1QaXZqVnF4STU2aFBTNGJFUElhaWZyekswcXFVaHk0UlZlSklQRmFGU21kTmpaemplNVc0dlRob3AwY21RM0EuDQoNClBsZWFzZSBub3RlIHRoYXQgcHJvZHVjdCBwcmljZXMgYW5kIGF2YWlsYWJpbGl0eSBhcmUgc3ViamVjdCB0byBjaGFuZ2UuIFByaWNlcyBhbmQgYXZhaWxhYmlsaXR5IHdlcmUgYWNjdXJhdGUgYXQgdGhlIHRpbWUgdGhpcyBuZXdzbGV0dGVyIHdhcyBzZW50OyBob3dldmVyLCB0aGV5IG1heSBkaWZmZXIgZnJvbSB0aG9zZSB5b3Ugc2VlIHdoZW4geW91IHZpc2l0IEFtYXpvbi5pbi4gDQoNCg0KDQpBbWF6b24uaW4gTWFya2V0cGxhY2UgcGxhdGZvcm06IFByb2R1Y3RzIHNvbGQgYnkgYSBNYXJrZXRwbGFjZSBzZWxsZXIgYXJlIHN1YmplY3QgdG8gdGhhdCBzZWxsZXIncyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiBzYWxlLiBTZWUgd3d3LkFtYXpvbi5pbiBmb3IgZGV0YWlscy4NCg0KUmVmZXJlbmNlOiAxMjE3NTIxODgxDQoNClRoaXMgbWVzc2FnZSB3YXMgc2VudCB0byB0aGUgZm9sbG93aW5nIGUtbWFpbCBhZGRyZXNzOiBwc2todXNoYWxAZ21haWwuY29tDQo=" + } + }, + { + "partId": "1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html; charset=utf-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 81426, + "data": "DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoJDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI-DQo8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgc3R5bGU9IndpZHRoOiAxMDAlIj4NCiA8aGVhZD4NCiAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0idGFyZ2V0LWRlbnNpdHlkcGk9ZGV2aWNlLWRwaSI-DQogIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGUgPSAxLjAsIG1heGltdW0tc2NhbGUgPSAxLjAiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgICAgICAgYm9keSB7DQogICAgcGFkZGluZzowOw0KICAgIG1hcmdpbjowOw0KICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7DQogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7DQp9DQppbWcgew0KICAgIGhlaWdodDogYXV0bzsNCiAgICBvdXRsaW5lOm5vbmU7DQogICAgYm9yZGVyOjAgbm9uZTsNCiAgICAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOmJpY3ViaWM7DQp9DQoNCnRhYmxlIHsNCiAgICBtc28tdGFibGUtbHNwYWNlOjBwdDsNCiAgICBtc28tdGFibGUtcnNwYWNlOjBwdDsNCiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOw0KfQ0KDQouRXh0ZXJuYWxDbGFzc3sNCiAgICB3aWR0aDoxMDAlOw0KfQ0KDQouRXh0ZXJuYWxDbGFzcywNCi5FeHRlcm5hbENsYXNzIHAsDQouRXh0ZXJuYWxDbGFzcyBzcGFuLA0KLkV4dGVybmFsQ2xhc3MgdGQsDQouRXh0ZXJuYWxDbGFzcyBkaXYgew0KICAgIGxpbmUtaGVpZ2h0OiAxMDAlOw0KfQ0KDQojb3V0bG9vayBhIHsNCiAgcGFkZGluZzogMDsgDQp9DQoNCi53aWRnZXRIZWFkZXINCnsNCnRleHQtZGVjb3JhdGlvbjpub25lOw0KY29sb3I6I0U0NzkxMTsNCmZvbnQtc2l6ZToxNXB4Ow0KZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7DQpmb250LXdlaWdodDpib2xkOw0KfQ0KLmJ0bi1sZWFybm1vcmUtc21hbGwNCnsgDQpiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmN2RmYTUsI2YwYzE0Yik7DQpib3JkZXItcmFkaXVzOiA1cHg7IA0KZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyANCmZvbnQtc2l6ZTogMTJweDsNCmZvbnQtd2VpZ2h0OiBub3JtYWw7DQpib3JkZXItY29sb3I6ICNhODg3MzQgIzljN2UzMSAjODQ2YTI5ICFpbXBvcnRhbnQ7DQpib3JkZXItc3R5bGU6c29saWQgIWltcG9ydGFudDsNCmJvcmRlci13aWR0aDoxcHggIWltcG9ydGFudDsNCmJvcmRlci1jb2xsYXBzZTppbml0aWFsICFpbXBvcnRhbnQ7DQp9DQouYnRuLWFkZHRvbGlzdC1zbWFsbA0Kew0KYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZjdmOGZhLCNlN2U5ZWMpOw0KYm9yZGVyLXJhZGl1czogNXB4Ow0KZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyANCmZvbnQtc2l6ZTogMTJweDsNCmZvbnQtd2VpZ2h0OiBub3JtYWw7DQpib3JkZXItY29sb3I6ICNhZGIxYjggI2EyYTZhYyAjOGQ5MDk2ICFpbXBvcnRhbnQ7DQpib3JkZXItc3R5bGU6c29saWQgIWltcG9ydGFudDsNCmJvcmRlci13aWR0aDoxcHggIWltcG9ydGFudDsNCm1pbi13aWR0aDogMTAwcHg7DQpib3JkZXItY29sbGFwc2U6aW5pdGlhbCAhaW1wb3J0YW50Ow0KfSANCnNwYW4ubWFpbm1lc3NhZ2Ugew0KICAgIGZvbnQtc2l6ZTogMzRweDsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGxpbmUtaGVpZ2h0OiAxOw0KICAgIGNvbG9yOiAjRkY5OTAwOw0KICAgIGZvbnQtd2VpZ2h0OiA1MDA7DQogICAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KfQ0KLm9tYV9wcl9pbWFnZSB7DQogICAgZGlzcGxheTpibG9jazsNCiAgDQp9DQouZW1haWxfc3VwZXJfc3ViamVjdCBhIHsNCiAgICBjb2xvcjogIzMzNjY5OSAhaW1wb3J0YW50Ow0KfQ0KLmN0YS1idG4gew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkM0MzU7DQogICAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQouYnRuLWxlYXJubW9yZS1iaWcgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkM0MzU7DQogICAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQouYnRuLWFkZHRvbGlzdC1iaWcgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNFN0U3QzI7DQogICAgYm9yZGVyLXJhZGl1czogNXB4Ow0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDEycHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQouZW1haWwtc3VwZXItc3ViamVjdCB7DQogICAgZm9udC1mYW1pbHk6IHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogOXB4Ow0KICAgIGxpbmUtaGVpZ2h0OiAxMXB4Ow0KICAgIGNvbG9yOiAjNTU1Ow0KfQ0KLmhlYWRlci1tZW51IHsNCiAgICBmb250LWZhbWlseTogYXJpYWwsIHZlcmRhbmEsIHNhbnMtc2VyaWY7DQogICAgZm9udC1zaXplOiAxMnB4Ow0KICAgIGNvbG9yOiByZ2IoNTEsIDEwMiwgMTUzKTsNCiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQouaW50cm8tdGV4dCB7DQogICAgZm9udC1zaXplOiAxMnB4Ow0KICAgIGNvbG9yOiAjMzMzMzMzOw0KICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgbGluZS1oZWlnaHQ6IDE2cHg7DQogICAgdmVydGljYWwtYWxpZ246IHRvcDsNCiAgICBwYWRkaW5nOiA2cHggMTVweCAxMnB4IDE1cHg7DQp9DQouZmFybWhlYWQgew0KICAgIGZvbnQtZmFtaWx5OiBhcmlhbDsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgY29sb3I6ICNlNDc5MTE7DQogICAgbGluZS1oZWlnaHQ6IDE2cHg7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQouZmFybWhlYWQtZm9udCB7DQogICAgZm9udC1mYW1pbHk6IGFyaWFsOw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICBjb2xvcjogI2U0NzkxMTsNCiAgICBsaW5lLWhlaWdodDogMTZweDsNCn0NCi5saW5rZmFybS1jb2wtczEgew0KICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTRweDsNCn0NCi5saW5rZmFybS1jb2wtczIgew0KICAgIGZvbnQtZmFtaWx5OiBhcmlhbCwgaGVsdmV0aWNhLCBzYW5zLXNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTJweDsNCn0NCi5saW5rZmFybS1saW5rLXMxIHsNCiAgICBjb2xvcjogIzY2NjsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoubGVnYWwtdGV4dCB7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIFNhbnMtU2VyaWY7DQogICAgZm9udC1zaXplOiAxMHB4Ow0KICAgIGNvbG9yOiAjNjY2DQp9DQoubGVnYWwtdGV4dC1jMSB7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIFNhbnMtU2VyaWY7DQogICAgZm9udC1zaXplOiAxMHB4Ow0KICAgIGNvbG9yOiAjOTk5Ow0KfQ0KLmxlZ2FsLXRleHQtYzIgew0KICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBTYW5zLVNlcmlmOw0KICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICBjb2xvcjogI2JmYmZiZjsNCn0NCi5sZWdhbC10ZXh0LWMzIHsNCiAgICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCiAgICBmb250LXNpemU6IDdwdDsNCiAgICBjb2xvcjogIzNFN0NCQjsNCn0NCi5zYWx1dGF0aW9uLXRleHQgew0KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgICBjb2xvcjogIzMwMzk0MjsNCiAgICBmb250LXNpemU6IDE0cHg7DQogICAgY29sb3I6ICMzMDM5NDI7DQogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsNCn0NCmJvZHkgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2UzZTM7DQp9DQpib2R5W3lhaG9vXSB7DQogICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBub25lOw0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2UzZTM7DQogICAgbWFyZ2luOiAwOw0KICAgIHBhZGRpbmc6IDA7DQogICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7DQp9DQouUmVhZE1zZ0JvZHkgew0KICAgIHdpZHRoOiAxMDAlOw0KICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2UzZTM7DQp9DQouRXh0ZXJuYWxDbGFzcyB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTNlMzsNCn0NCmh0bWwgew0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KYm9keVt5YWhvb10gdGFibGUgew0KICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQp9DQpib2R5W3lhaG9vXSAuYnRuIHsNCiAgICB3aWR0aDogMTAwJTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXIhaW1wb3J0YW50Ow0KfQ0KYm9keVt5YWhvb10gLmZhcm0tcm93IHsNCiAgICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgZm9udC1zaXplOiAxMnB4Ow0KICAgIHBhZGRpbmc6IDNweDsNCiAgICBjb2xvcjogIzMzMzMzMw0KfQ0KYm9keVt5YWhvb10gLnRvcDEwLWltZy1XaWR0aCB7DQogICAgd2lkdGg6IDI5MHB4IWltcG9ydGFudDsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXINCn0NCnNwYW4ubWFpbm1lc3NhZ2Ugew0KICAgIGZvbnQtc2l6ZTogMzRweDsNCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOw0KICAgIGxpbmUtaGVpZ2h0OiAxOw0KICAgIGNvbG9yOiAjRkY5OTAwOw0KICAgIGZvbnQtd2VpZ2h0OiA1MDANCn0NCmJvZHlbeWFob29dIC5pbWFnZS1jc3Nsb3Qtbm9ybWFsIGltZyB7DQogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsNCn0NCmJvZHlbeWFob29dIHRkW2NsYXNzPSJsY29sIl0gaW1nIHsNCiAgICB3aWR0aDogMTc1cHggIWltcG9ydGFudDsNCiAgICBoZWlnaHQ6IDE3NXB4ICFpbXBvcnRhbnQ7DQp9DQouc2VmX2xlZ2FsX2Zvb3RlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0UzRTNFMzsNCn0NCi5zZWZfZm9vdGVyX2Nvbm5lY3Qgew0KICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjODg4ODg4Ow0KICAgIGhlaWdodDogMHB4ICFpbXBvcnRhbnQ7DQogICAgbWF4LWhlaWdodDogMHB4ICFpbXBvcnRhbnQ7DQogICAgZm9udC1zaXplOiAwcHg7DQogICAgbWFyZ2luOiAwOw0KICAgIHdpZHRoOiAxMDAlOw0KfQ0KYm9keVt5YWhvb10gLnNlZl9zcGFjZXIgZGl2IHsNCiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoImh0dHBzOi8vaW1hZ2VzLW5hLnNzbC1pbWFnZXMtYW1hem9uLmNvbS9pbWFnZXMvRy8wMS90ZW1wbGF0ZS9zZWN0aW9uLWRpdl82NDB4OC5qcGciKSAhaW1wb3J0YW50Ow0KICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkY7DQogICAgaGVpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7DQogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsNCn0NCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjgwcHgpIHsNCiAgICAubW9iaWxlLWhpZGUtZ21haWwgew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIG92ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50Ow0KICAgICAgICBtc28taGlkZTphbGwgIWltcG9ydGFudDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDBweCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICAubW9iaWxlLWhpZGUtZ21haWwgdGFibGV7DQogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgb3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnQ7DQogICAgICAgIG1zby1oaWRlOmFsbCAhaW1wb3J0YW50Ow0KICAgICAgICBsaW5lLWhlaWdodDogMHB4ICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIA0KICAgIGJvZHlbeWFob29dIC5kZXZpY2VXaWR0aCB7DQogICAgICAgIHdpZHRoOiAxMDAlIWltcG9ydGFudA0KICAgIH0NCiAgICBib2R5W3lhaG9vXSB0ZFtjbGFzcz0iY29sIl0gYSBpbWcgew0KICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgICAgICBtYXgtd2lkdGg6IDYwcHggIWltcG9ydGFudDsNCiAgICAgICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7DQogICAgICAgIG1pbi13aWR0aDogNDFweCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICB0ZFtjbGFzcz0iY29sIl0gew0KICAgICAgICB3aWR0aDogMzAlICFpbXBvcnRhbnQ7DQogICAgICAgIG1heC13aWR0aDogNjBweCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuZmFybUxpbmtzIHsNCiAgICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsNCiAgICAgICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuZmFybUxpbmtzIHRkIHsNCiAgICAgICAgdGV4dC1hbGlnbjogbGVmdCAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSB0ZFtjbGFzcz0iZmFybUNvbnRhaW5lciJdIHsNCiAgICAgICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50Ow0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5zZWZfZm9vdGVyX2xpbmtmYXJtIHRkIHsNCiAgICAgICAgd2lkdGg6IGF1dG8gIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlZl9mb290ZXJfbGlua2Zhcm0gdGFibGUgew0KICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2xlZ2FsX2Zvb3RlciwNCiAgICBib2R5W3lhaG9vXSAuc2VmX3NwYWNlciwNCiAgICBib2R5W3lhaG9vXSAuc2VmX2Zvb3Rlcl9jb25uZWN0LA0KICAgIGJvZHlbeWFob29dIC5zZWZfbGVnYWxfZm9vdGVyLA0KICAgIGJvZHlbeWFob29dIC5zZWZfZm9vdGVyX2xpbmtmYXJtIHsNCiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlZl9mb290ZXJfbGlua2Zhcm0gdHI6bGFzdC1jaGlsZCB0ZCwNCiAgICBib2R5W3lhaG9vXSAuc2VmX2Zvb3Rlcl9saW5rZmFybSB0cjpmaXJzdC1jaGlsZCB0ZCB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2Zvb3Rlcl9saW5rZmFybSB0ciB0ZCB0YWJsZSB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuYnRuIHsNCiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gdGRbY2xhc3M9Ingtc2l0ZS10YWJsZXQiXSB7DQogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlcGVyYXRvciB7DQogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5zZXBlcmF0b3IgaW1nIHsNCiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICAgICAgaGVpZ2h0OiBhdXRvOw0KICAgIH0NCn0NCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTk5cHgpIHsNCiAgICBib2R5W3lhaG9vXSAudG9wMTAtaW1nLVdpZHRoIHsNCiAgICAgICAgd2lkdGg6IDQ0MHB4IWltcG9ydGFudDsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyDQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5jZW50ZXIgew0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuZm9vdGVyTGlua3Mgew0KICAgICAgICB3aWR0aDogMzIlOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4DQogICAgfQ0KICAgIGJvZHlbeWFob29dIHRkW2NsYXNzPSJsY29sIl0sDQogICAgYm9keVt5YWhvb10gdGRbY2xhc3M9InJjb2wiXSB7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jayAhaW1wb3J0YW50Ow0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgICAgIGZsb2F0OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7DQogICAgICAgIG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5mYXJtTGlua3Mgew0KICAgICAgICBtaW4td2lkdGg6IDE0OHB4ICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5mYXJtQm90dG9tIHsNCiAgICAgICAgd2lkdGg6IDEwMCUhaW1wb3J0YW50DQogICAgfQ0KICAgIGJvZHlbeWFob29dIHRkW2NsYXNzPSJwZV9hc2luIl0gew0KICAgICAgICBwYWRkaW5nOiA0cHggMTVweCA0cHggMTVweCAhaW1wb3J0YW50Ow0KICAgIH0NCn0NCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTE1cHgpIHsNCiAgICBib2R5W3lhaG9vXSAubG9nb1RvcCB7DQogICAgICAgIHdpZHRoOiAxMDAlIWltcG9ydGFudA0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAudG9wMTAtaW1nLVdpZHRoIHsNCiAgICAgICAgd2lkdGg6IDI5MHB4IWltcG9ydGFudDsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyDQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5jZW50ZXIgew0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXIhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuZm9vdGVyTGlua3Mgew0KICAgICAgICB3aWR0aDogMzIlOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiA0MHB4DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5idG4gew0KICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gdGRbY2xhc3M9Ingtc2l0ZSJdLA0KICAgIGJvZHlbeWFob29dIC54LXNpdGUgew0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2Zvb3Rlcl9saW5rZmFybSB7DQogICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnNlZl9zcGFjZXIgew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5zZWZfZm9vdGVyX2Nvbm5lY3Qgew0KICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAuc2VmX2xlZ2FsX2Zvb3RlciB7DQogICAgICAgIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogICAgfQ0KICAgIGJvZHlbeWFob29dIC5sb2dvVG9wIC5jZW50ZXIgYSB7DQogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Ow0KICAgIH0NCiAgICBib2R5W3lhaG9vXSAubG9nb1RvcCB0ZCB7DQogICAgICAgIHBhZGRpbmc6IHJpZ2h0OiAwcHggIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLmFtYXpvbkxvZ28gew0KICAgICAgICBwYWRkaW5nOiAwIDEwcHggIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLnRvcE1lbnUgew0KICAgICAgICBwYWRkaW5nOiAwIDAgNXB4IDAgIWltcG9ydGFudDsNCiAgICB9DQogICAgYm9keVt5YWhvb10gLmNzLWltYWdlLXNsb3Qgew0KICAgICAgICBtYXJnaW46IGF1dG87DQogICAgfQ0KfQ0KQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCkgew0KICAgIGJvZHlbeWFob29dIHRkW2NsYXNzPSJwYWNrQ29sIl0gew0KICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2sgIWltcG9ydGFudDsNCiAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICAgICAgZmxvYXQ6IG5vbmUgIWltcG9ydGFudDsNCiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsNCiAgICAgICAgbWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBwYWRkaW5nOiAwcHggIWltcG9ydGFudDsNCiAgICB9DQp9DQogICAgICAgIDwvc3R5bGU-DQogPC9oZWFkPg0KIDxib2R5IHlhaG9vPSJmaXgiIGNsYXNzPSJvbWFfbWFpbl9ib2R5IiBzdHlsZT0icGFkZGluZzogMDsgbWFyZ2luOiAwOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO2JhY2tncm91bmQtY29sb3I6IHJnYigyMjcsIDIyNywgMjI3KTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IG5vbmU7IHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjI3LCAyMjcsIDIyNyk7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQiPjxpbWcgd2lkdGg9IjEiIGhlaWdodD0iMSIgc3JjPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MUtVQlQ0V1ZXME9CUCZUPU8mVT1odHRwcyUzQSUyRiUyRmltYWdlcy1ldS5zc2wtaW1hZ2VzLWFtYXpvbi5jb20lMkZpbWFnZXMlMkZHJTJGMDElMkZuYXYlMkZ0cmFuc3AuZ2lmJkg9SUxSMUNPWVJWS05JNExZRFA3TkFUWFJTVEJZQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9vcGVucyIgLz4NCiAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIxMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZTNlM2UzO21zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIHlhaG9vPSJmaXgiPg0KICAgPHRib2R5Pg0KICAgIDx0cj4NCiAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIj4NCiAgICAgIDx0YWJsZSB3aWR0aD0iNjQwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImRldmljZVdpZHRoIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgPHRib2R5Pg0KICAgICAgICA8dHI-DQogICAgICAgICA8dGQgc3R5bGU9InBhZGRpbmc6MCAwIDEwcHggMDsgZm9udC1zaXplOjA7IGhlaWdodDowOyIgY2xhc3M9Ingtc2l0ZSIgdmFsaWduPSJib3R0b20iPg0KICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPSJlbWFpbF9zdXBlcl9zdWJqZWN0IiBzdHlsZT0iZm9udC1mYW1pbHk6dmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTo5cHg7bGluZS1oZWlnaHQ6MTFweDtjb2xvcjojNTU1OyI-IFdlIGhhdmUgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL2YuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTFPSVRLSkxTUzI1QlQmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZ5b3Vyc3RvcmUlMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcmVjX3NzJkg9UlU2SVNBQ0tPV1FHV1BBQVBBTE5IVFBEM09VQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9yZWNfc3MiIHN0eWxlPSJjb2xvcjogcmdiKDUxLCAxMDIsIDE1MykgIWltcG9ydGFudCI-cmVjb21tZW5kYXRpb25zPC9hPiBmb3IgeW91LiA8L3NwYW4-PC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgPHRkIGFsaWduPSJyaWdodCIgY2xhc3M9ImhlYWRlci1jc3Nsb3QiPjwvdGQ-DQogICAgICAgIDwvdHI-DQogICAgICAgPC90Ym9keT4NCiAgICAgIDwvdGFibGU-DQogICAgICA8dGFibGUgd2lkdGg9IjY0MCIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJkZXZpY2VXaWR0aCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgIDx0Ym9keT4NCiAgICAgICAgPHRyPg0KICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJoZWFkZXItY3NzbG90Ij48L3RkPg0KICAgICAgICA8L3RyPg0KICAgICAgIDwvdGJvZHk-DQogICAgICA8L3RhYmxlPg0KICAgICAgPHRhYmxlIHdpZHRoPSI2NDAiIGhlaWdodD0iNiIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJkZXZpY2VXaWR0aCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgIDx0Ym9keT4NCiAgICAgICAgPHRyPg0KICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjZTNlM2UzIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0iYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkICNGRjk5MDA7IGhlaWdodDogMHB4ICFpbXBvcnRhbnQ7IG1heC1oZWlnaHQ6IDBweCAhaW1wb3J0YW50OyBmb250LXNpemU6MHB4OyBtYXJnaW46IDA7Ij48cD4mbmJzcDs8L3A-PC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICA8L3Rib2R5Pg0KICAgICAgPC90YWJsZT4NCiAgICAgIDx0YWJsZSB3aWR0aD0iNjQwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiNmZmZmZmYiIGJvcmRlcj0iMCIgYWxpZ249ImNlbnRlciIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6I2ZmZmZmZjttc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIiBjbGFzcz0iZGV2aWNlV2lkdGgiPg0KICAgICAgIDx0Ym9keT4NCiAgICAgICAgPHRyPg0KICAgICAgICAgPHRkPg0KICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgaGVpZ2h0PSI1cHgiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iZGV2aWNlV2lkdGgiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgIDx0ZD48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIHZhbGlnbj0ibWlkZGxlIj48IS0tIEJlZ2luIFNpbXBsZSBUZW1wbGF0ZSAtLT4gPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCiAgICBib2R5W3lhaG9vXSAuc2VwZXJhdG9yIHt3aWR0aDogMTAwJSAhaW1wb3J0YW50O30NCiAgICBib2R5W3lhaG9vXSAuc2VwZXJhdG9yIGltZyB7d2lkdGg6IDEwMCUgIWltcG9ydGFudDsgaGVpZ2h0OiBhdXRvO30NCjwvc3R5bGU-DQogICAgICAgICAgICAgIDx0YWJsZSBiZ2NvbG9yPSIjRkZGRkZGIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9ImxvZ29Ub3AiIGFsaWduPSJsZWZ0IiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNlbnRlciI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPVo4MEE5Nzc4VVhDNSZUPUMmVT1odHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9zZWZfbG9nbyZIPUtXVzJTTDVQQlhBRFBWUFhNNEVBT1JSU1VUT0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfc2VmX2xvZ28iPiA8aW1nIHNyYz0iaHR0cHM6Ly9pbWFnZXMtZXUuc3NsLWltYWdlcy1hbWF6b24uY29tL2ltYWdlcy9HLzMxL2VtYWlsL2luL2xvZ28vYW1hem9uX3ByaW1lX2xvZ29faW5fMTUweDQ4LmpwZyIgYWx0PSJBbWF6b24uaW4iIGJvcmRlcj0iMCIgaHNwYWNlPSI2IiB2c3BhY2U9IjYiIHN0eWxlPSJoZWlnaHQ6IGF1dG87IG91dGxpbmU6IG5vbmU7IGJvcmRlcjogMCBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljIj4gPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0ibG9nb1RvcCAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjEwIiBjZWxsc3BhY2luZz0iMCIgYWxpZ249InJpZ2h0IiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0IiBjbGFzcz0idG9wTWVudSI-DQogICAgICAgICAgICAgICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0ibWFyZ2luOjAgYXV0bzttc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9VjA1VUYwS1M4U0dJJlQ9QyZVPWh0dHAlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZ5b3Vyc3RvcmUlMkZob21lJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX3lvdXJzdG9yZSUyRiZIPVRYMVVMTVZST1JISENCWFEzSFkyV1BPRkQwVUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfeW91cnN0b3JlIiBzdHlsZT0iZm9udC1mYW1pbHk6IGFyaWFsLHZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogcmdiKDUxLCAxMDIsIDE1Myk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7IHdvcmQtd3JhcDogbm9ybWFsICEgaW1wb3J0YW50OyI-IFlvdXIgQW1hem9uLmluIDwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiIHdpZHRoPSI4Ij4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNjY2MiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ij48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IjIiIHdpZHRoPSIxMiI-Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MTVXNlU0NjJaN0MwTSZUPUMmVT1odHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcmVkaXJlY3QuaHRtbCUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9kZWFscyUzRmxvY2F0aW9uJTNEaHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmdvbGRib3gmSD1EME1RMEE1VDFJRU9BWU9YTERMOFIxVkFUUE1BJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2RlYWxzIiBzdHlsZT0iZm9udC1mYW1pbHk6IGFyaWFsLHZlcmRhbmEsc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjogcmdiKDUxLCAxMDIsIDE1Myk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC13ZWlnaHQ6IGJvbGQ7dGV4dC1hbGlnbjpjZW50ZXI7IHdvcmQtd3JhcDogbm9ybWFsICEgaW1wb3J0YW50OyI-IFRvZGF5J3MgRGVhbHMgPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiIgd2lkdGg9IjgiPiZuYnNwOzwvdGQ-DQogICAgICAgICAgICAgICAgICAgICA8dGQgYmdjb2xvcj0iI2NjYyIgd2lkdGg9IjIiIGhlaWdodD0iMTUiPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiIgd2lkdGg9IjgiPiZuYnNwOzwvdGQ-DQogICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL2YuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTJITlg0RTJPWDYzVEImVD1DJlU9aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnJlZGlyZWN0Lmh0bWwlMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfYXBwJTJGJTNGbG9jYXRpb24lM0RodHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRm1zaG9wJkg9WFlVRzI0WEdEV0tMUlZCV1VGV1cxV1pHWVY4QSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9hcHAiIHN0eWxlPSJmb250LWZhbWlseTogYXJpYWwsdmVyZGFuYSxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiByZ2IoNTEsIDEwMiwgMTUzKTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXdlaWdodDogYm9sZDt0ZXh0LWFsaWduOmNlbnRlcjsgd29yZC13cmFwOiBub3JtYWwgISBpbXBvcnRhbnQ7Ij4gR2V0IEFtYXpvbiBBcHAgPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiIgd2lkdGg9IjgiIGNsYXNzPSJ4LXNpdGUiPiZuYnNwOzwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgIDwvdGFibGU-PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgPC90YWJsZT48IS0tIEVuZCBTaW1wbGUgVGVtcGxhdGUgLS0-PC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgPC90YWJsZT48IS0tICBFbmQgSEVBREVSIC0tPg0KICAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjQwIiBjbGFzcz0iZGV2aWNlV2lkdGgiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBhbGlnbj0iY2VudGVyIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI-PGltZyBzcmM9Imh0dHBzOi8vaW1hZ2VzLW5hLnNzbC1pbWFnZXMtYW1hem9uLmNvbS9pbWFnZXMvRy8wMS90ZW1wbGF0ZS9zZWN0aW9uLWRpdl82NDB4OC5qcGciIGFsdD0iPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ICIgYm9yZGVyPSIwIiBhbGlnbj0ibWlkZGxlIiBjbGFzcz0iZGV2aWNlV2lkdGgiIHN0eWxlPSJiaWN1YmljOyBtYXgtd2lkdGg6NjQwcHg7IG1heC1oZWlnaHQ6OHB4OyBjb2xvcjojQ0NDQ0NDOyBsaW5lLWhlaWdodDoxcHg7aGVpZ2h0OiBhdXRvOyBvdXRsaW5lOiBub25lOyBib3JkZXI6IDAgbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYyI-PC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICA8dGFibGUgYWxpZ249ImNlbnRlciIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDoxMDAlO21zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgPHRkIGNsYXNzPSJBbGV4YS1iYW5uZXIiIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0ibWlkZGxlIj48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjEwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjE1IiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJkZXZpY2VXaWR0aCIgc3R5bGU9IndpZHRoOjEwMCU7bXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICA8dGQgY2xhc3M9ImludHJvLXRleHQiIGFsaWduPSJsZWZ0IiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0O2ZvbnQtc2l6ZTogMTJweDsgY29sb3I6IHJnYig1MSwgNTEsIDUxKTsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBsaW5lLWhlaWdodDogMTZweDsgdmVydGljYWwtYWxpZ246IHRvcDsgcGFkZGluZzogNnB4IDE1cHggMTJweCAxNXB4Ij48c3BhbiBjbGFzcz0ic2FsdXRhdGlvbi10ZXh0IiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyBjb2xvcjogcmdiKDQ4LCA1NywgNjYpOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiByZ2IoNDgsIDU3LCA2Nik7IGZvbnQtd2VpZ2h0OiBub3JtYWwiPiBIZWxsbyBLaHVzaGFsIFAgUywgPGJyPg0KICAgICAgICAgICAgICAgQW1hem9uIGhhcyBuZXcgcmVjb21tZW5kYXRpb25zIGZvciB5b3UgYmFzZWQgb24geW91ciBicm93c2luZyBoaXN0b3J5LiA8L3NwYW4-PC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICA8dGFibGUgd2lkdGg9IjY0MCIgY2xhc3M9ImRldmljZVdpZHRoIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYWxpZ249ImNlbnRlciIgYmdjb2xvcj0iI0ZGRkZGRiIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxpbWcgc3JjPSJodHRwczovL2ltYWdlcy1uYS5zc2wtaW1hZ2VzLWFtYXpvbi5jb20vaW1hZ2VzL0cvMDEvdGVtcGxhdGUvc2VjdGlvbi1kaXZfNjQweDguanBnIiBhbHQ9Ij0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSAiIGJvcmRlcj0iMCIgYWxpZ249Im1pZGRsZSIgY2xhc3M9ImRldmljZVdpZHRoIiBzdHlsZT0iYmljdWJpYzsgbWF4LXdpZHRoOjY0MHB4OyBtYXgtaGVpZ2h0OjhweDsgY29sb3I6I0NDQ0NDQzsgbGluZS1oZWlnaHQ6MXB4O2hlaWdodDogYXV0bzsgb3V0bGluZTogbm9uZTsgYm9yZGVyOiAwIG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWMiPjwvdGQ-DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgPHRhYmxlIHdpZHRoPSI2NDAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0idmVydGljYWwtYWxpZ246Y2VudHJhbDttc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIiBjbGFzcz0iZGV2aWNlV2lkdGgiPg0KICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgPHRkIHdpZHRoPSIzMiUiIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCIgc3R5bGU9InBhZGRpbmc6NnB4IDAiIGNsYXNzPSJsY29sIj4NCiAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMHB4IiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJib3R0b20iIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBwYWRkaW5nOjRweCA4cHggNHB4IDhweDttYXgtd2lkdGg6MjQycHggIWltcG9ydGFudDsiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj1ZODhJSUs1STkzUSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMDc0SkI2U1g4JTNGcmVmJTNEZW1fMXBfMV9pbSUyNnJlZl8lM0RwZV80MTA3NTAxXzEyMTc1MjE4ODEmSD1RN0pTQk9FQjFENUZOT0owNElHSFNCUzRZUElBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxIj4gPGltZyBzcmM9Imh0dHBzOi8vbS5tZWRpYS1hbWF6b24uY29tL2ltYWdlcy9JLzUxMkVudWJmTXpMLl9TUjUwMCw1MDBfLl9BQ19TTDUwMF9TUzE3NV8uanBnIiBjbGFzcz0ib21hX3ByX2ltYWdlIiBhbHQ9IkFwVGVjaERlYWxzIEp1bXBlciBXaXJlcyBNYWxlIHRvIE1hbGUsIE1hbGUgdG8gRmVtYWxlLCBGZW1hbGUgdG8gRmVtYWxlL2JyZWFkYm9hcmQganVtcGVyIHdpcmVzICg0MCs0MCs0MCkiIGJvcmRlcj0iMCIgc3R5bGU9ImhlaWdodDogYXV0bzsgb3V0bGluZTogbm9uZTsgYm9yZGVyOiAwIG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7ZGlzcGxheTogYmxvY2s7d2lkdGg6IDE3NXB4ICFpbXBvcnRhbnQ7IGhlaWdodDogMTc1cHggIWltcG9ydGFudCI-IDwvYT48L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICAgPHRkIHdpZHRoPSI2NyUiIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJwYWRkaW5nOjZweCAwIiBjbGFzcz0icmNvbCI-DQogICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiIGNsYXNzPSJwZV9hc2luIiBzdHlsZT0iZm9udC1zaXplOiAxNHB4OyBjb2xvcjogIzMzMzMzMzsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgdGV4dC1hbGlnbjogbGVmdDsgZm9udC1mYW1pbHk6QXJpYWwsIHNhbnMtc2VyaWY7IGxpbmUtaGVpZ2h0OiAxNHB4OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBwYWRkaW5nOjRweCAxNXB4IDRweCAwIj4NCiAgICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfdGl0bGUiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibGVmdCI-PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLFNhbnMtU2VyaWY7Zm9udC1zaXplOjE1cHg7Zm9udC1zdHlsZTpub3JtYWw7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMzMzY2OTk7Ij4gPGEgY2xhc3M9Im9tYV9wcl90aXRsZSIgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTI0SlBSVEEzRU5VRTAmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA3NEpCNlNYOCUzRnJlZiUzRGVtXzFwXzFfdGklMjZyZWZfJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxJkg9T1NZR1EwTVFZOEZXTlhFR1BBVFdUSVRBVjFDQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MSIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGNvbG9yOiMzMzY2OTk7Ij4gQXBUZWNoRGVhbHMgSnVtcGVyIFdpcmVzIE1hbGUgdG8gTWFsZSwgTWFsZSB0byBGZW1hbGUsIEZlbWFsZS4uLjwvYT4gPC9zcGFuPiA8c3BhbiBjbGFzcz0ib21hLXByLWJsIiBzdHlsZT0iZm9udC1mYW1pbHk6QXJpYWwsSGVsdmV0aWNhLFNhbnMtU2VyaWY7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpsZWZ0OyI-IDxicj48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MlBPUldFQVFVNk8yMSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZzdG9yZXMlMkZBcHRlY2hkZWFscyUyRnBhZ2UlMkYzN0JEN0I1NS00MDQ4LTQ5REEtQkQxQy0zRkI5NEE2MkE2RTglM0ZyZWZfJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX2FzdF9ibG4mSD1JNU5QWERKQVZBR040SU1aNlRJUkhSOTVDVldBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX2FzdF9ibG4iIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IzMzNjY5OTsiPkFwVGVjaERlYWxzPC9hPiA8L3NwYW4-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICZuYnNwOw0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2VfbGlzdCI-DQogICAgICAgICAgICAgICAgICAgICA8dGQ-PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4gPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4gTS5SLlAuOiA8L3NwYW4-IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfbGlzdCI-IDxzdHJpa2U-4oK5NDk5LjAwPC9zdHJpa2U-IDwvc3Bhbj4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPiA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPiBQcmljZTogPC9zcGFuPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0icHJfcHJpY2VfaGlnaGxpZ2h0Ij4g4oK5MTg5LjAwIDwvc3Bhbj4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICA8dGQ-PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4gPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4gWW91IFNhdmU6IDwvc3Bhbj4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9zYXZpbmdzIj4g4oK5MzEwLjAwICg2MiUpIDwvc3Bhbj4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfbWVyY2hhbnQiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IHRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGNvbG9yOiM1NTU1NTU7IGZvbnQtc2l6ZToxMnB4OyI-IFNvbGQgYnkgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTNJWDJUSDFHRERJUlYmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZhYWclMkZtYWluJTNGaWUlM0RVVEY4JTI2YXNpbiUzREIwNzRKQjZTWDglMjZpc0FtYXpvbkZ1bGZpbGxlZCUzRDElMjZtYXJrZXRwbGFjZUlEJTNEQTIxVEpSVVVONEtHViUyNnByb3RvY29sJTNEY3VycmVudCUyNnNlbGxlciUzREFKNlNJWkM4WVFEWlglMjZzc2htUGF0aCUzRCUyNnJlZl8lM0RwZV80MTA3NTAxXzEyMTc1MjE4ODEmSD1PRTVRVlBPSkZKOExaQVhKU1YzVEJaMzRIS0VBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgZm9udC1zaXplOjEycHg7Y29sb3I6ICMzMzY2OTk7Ij5DbGlja3RlY2ggUmV0YWlsIFByaXZhdGUgTHRkPC9hPiBhbmQgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4OyI-RnVsZmlsbGVkIGJ5IEFtYXpvbjwvc3Bhbj4uIDwvc3Bhbj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InNwYWNlciI-DQogICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMCI-DQogICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMTBweCI-DQogICAgICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZTo4cHg7bGluZS1oZWlnaHQ6OHB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICZuYnNwOw0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfYnlsaW5lIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGhlaWdodD0iNTAiIGNsYXNzPSJidG4iIHdpZHRoPSI4MCUiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO3dpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudCI-DQogICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgaGVpZ2h0PSIzNCIgd2lkdGg9IjEwMCUiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgaGVpZ2h0PSIzNCIgY2xhc3M9ImJ0bi1sZWFybm1vcmUtYmlnIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMTk2LCA1Myk7IGJvcmRlci1yYWRpdXM6IDVweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiBib2xkIj48YSBjbGFzcz0ib21hX2JpZ19sbWJ1dHRvbiIgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTJOQ0YzQUhZTFUzVlMmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA3NEpCNlNYOCUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9lbV8xcF8xX2xtJkg9VEE0MTU0VFdSSkxRVFhNVE9NU1RTV0pWR0RLQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9lbV8xcF8xX2xtIiBzdHlsZT0iZGlzcGxheTpibG9jazt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMzAzOTQyO3doaXRlLXNwYWNlOm5vd3JhcDtwYWRkaW5nOjEwcHg7Ij5MZWFybiBtb3JlPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNnB4Ij4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJidG4tYWRkdG9saXN0LWJpZyIgd2lkdGg9IjMwJSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYigyMzEsIDIzMSwgMTk0KTsgYm9yZGVyLXJhZGl1czogNXB4OyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IGJvbGQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9mLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0xNkI3V01QTzY2TTZRJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGaXRlbS1kaXNwYXRjaCUyRjE4Ni01NzUzNTMzLTUyNjIyNDklM0YlMjZhY3Rpb24lM0RhZGQtdG8tcmVnaXN0cnkud2lzaGxpc3QlMjZhc2luLjElM0RCMDc0SkI2U1g4JTI2c3VibWl0LmFkZC10by1yZWdpc3RyeS53aXNobGlzdC54JTNEMSUyNnN1Ym1pdC5hZGQtdG8tcmVnaXN0cnkud2lzaGxpc3QueSUzRDElMjZyZWZfJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxJkg9VFRMTEQyQkc4TTRaVUxDNlFVR0E4OVFVTUZLQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGNvbG9yOiByZ2IoNDcsIDQ3LCAxMjEpOyBwYWRkaW5nOjdweDsiPkFkZCB0byBXaXNoIExpc3Q8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgIDwvdGFibGU-PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjQwIiBjbGFzcz0iZGV2aWNlV2lkdGgiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBhbGlnbj0iY2VudGVyIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI-PGltZyBzcmM9Imh0dHBzOi8vaW1hZ2VzLW5hLnNzbC1pbWFnZXMtYW1hem9uLmNvbS9pbWFnZXMvRy8wMS90ZW1wbGF0ZS9zZWN0aW9uLWRpdl82NDB4OC5qcGciIGFsdD0iPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ICIgYm9yZGVyPSIwIiBhbGlnbj0ibWlkZGxlIiBjbGFzcz0iZGV2aWNlV2lkdGgiIHN0eWxlPSJiaWN1YmljOyBtYXgtd2lkdGg6NjQwcHg7IG1heC1oZWlnaHQ6OHB4OyBjb2xvcjojQ0NDQ0NDOyBsaW5lLWhlaWdodDoxcHg7aGVpZ2h0OiBhdXRvOyBvdXRsaW5lOiBub25lOyBib3JkZXI6IDAgbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYyI-PC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICA8dGFibGUgd2lkdGg9IjY0MCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjpjZW50cmFsO21zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIGNsYXNzPSJkZXZpY2VXaWR0aCI-DQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICA8dGQgd2lkdGg9IjMyJSIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBzdHlsZT0icGFkZGluZzo2cHggMCIgY2xhc3M9Imxjb2wiPg0KICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwcHgiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImNlbnRlciIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IHBhZGRpbmc6NHB4IDhweCA0cHggOHB4O21heC13aWR0aDoyNDJweCAhaW1wb3J0YW50OyI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTFPMTAwSFM5TEhES1EmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjA3MVhQNTZMTSUzRnJlZiUzRGVtXzFwXzJfaW0lMjZyZWZfJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxJkg9U1ZITE9HQ1RTWlZDTUozQUFLU0kyVUJDQ0tZQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MSI-IDxpbWcgc3JjPSJodHRwczovL20ubWVkaWEtYW1hem9uLmNvbS9pbWFnZXMvSS81MW1YdWU2ek5BTC5fU1I1MDAsNTAwXy5fQUNfU0w1MDBfU1MxNzVfLmpwZyIgY2xhc3M9Im9tYV9wcl9pbWFnZSIgYWx0PSJTcXVhZFBpeGVsIEVzcC0zMiBXaWZpLCBCbHVldG9vdGgsIER1YWwgQ29yZSBDaGlwIERldmVsb3BtZW50IEJvYXJkIChFU1AtV1JPT00tMzIpIiBib3JkZXI9IjAiIHN0eWxlPSJoZWlnaHQ6IGF1dG87IG91dGxpbmU6IG5vbmU7IGJvcmRlcjogMCBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO2Rpc3BsYXk6IGJsb2NrO3dpZHRoOiAxNzVweCAhaW1wb3J0YW50OyBoZWlnaHQ6IDE3NXB4ICFpbXBvcnRhbnQiPiA8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjclIiB2YWxpZ249Im1pZGRsZSIgYWxpZ249InJpZ2h0IiBzdHlsZT0icGFkZGluZzo2cHggMCIgY2xhc3M9InJjb2wiPg0KICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0icGVfYXNpbiIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgY29sb3I6ICMzMzMzMzM7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IGZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBsaW5lLWhlaWdodDogMTRweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgcGFkZGluZzo0cHggMTVweCA0cHggMCI-DQogICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3RpdGxlIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtYWxpZ246bGVmdDtjb2xvcjojMzM2Njk5OyI-IDxhIGNsYXNzPSJvbWFfcHJfdGl0bGUiIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0yVUFGSFdLUVFDQ01BJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwNzFYUDU2TE0lM0ZyZWYlM0RlbV8xcF8yX3RpJTI2cmVmXyUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MSZIPURIRlBYWURDRFBUQ0U3Rk1GU0pFUFhVQVhQQUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODEiIHN0eWxlPSJmb250LXNpemU6IDE0cHg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjb2xvcjojMzM2Njk5OyI-IFNxdWFkUGl4ZWwgRXNwLTMyIFdpZmksIEJsdWV0b290aCwgRHVhbCBDb3JlIENoaXAgRGV2ZWxvcG1lbnQuLi48L2E-IDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im9tYS1wci1ibCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMzMzO3RleHQtYWxpZ246bGVmdDsiPiA8YnI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTMzT0NBUTJZWElCSk4mVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGc3RvcmVzJTJGc3Vucm9ib3RpY3MlMkZwYWdlJTJGMTA0MEYyRTktQTNCRS00NkUyLUExMjItRkE1RDZFREVEMzY2JTNGcmVmXyUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9hc3RfYmxuJkg9TkhHWlNBR1hXM0tKVVQyUUhETk1VUEE4QVhPQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9hc3RfYmxuIiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDEycHg7IGNvbG9yOiMzMzY2OTk7Ij5kaXltb3JlPC9hPiA8L3NwYW4-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICZuYnNwOw0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2VfbGlzdCI-DQogICAgICAgICAgICAgICAgICAgICA8dGQ-PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4gPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4gTS5SLlAuOiA8L3NwYW4-IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfbGlzdCI-IDxzdHJpa2U-4oK5OTk5LjAwPC9zdHJpa2U-IDwvc3Bhbj4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPiA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPiBQcmljZTogPC9zcGFuPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0icHJfcHJpY2VfaGlnaGxpZ2h0Ij4g4oK5NTU3LjAwIDwvc3Bhbj4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfc2F2aW5ncyI-DQogICAgICAgICAgICAgICAgICAgICA8dGQ-PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4gPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4gWW91IFNhdmU6IDwvc3Bhbj4gPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICNDQzAwMDA7IiBjbGFzcz0ib21hX3ByX3ByaWNlX3ZhbF9zYXZpbmdzIj4g4oK5NDQyLjAwICg0NCUpIDwvc3Bhbj4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfbWVyY2hhbnQiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7IHRleHQtZGVjb3JhdGlvbjpub25lOyBmb250LXdlaWdodDpub3JtYWw7IGNvbG9yOiM1NTU1NTU7IGZvbnQtc2l6ZToxMnB4OyI-IFNvbGQgYnkgPGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPThUUzhUOFU1VkZVUiZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmFhZyUyRm1haW4lM0ZpZSUzRFVURjglMjZhc2luJTNEQjA3MVhQNTZMTSUyNmlzQW1hem9uRnVsZmlsbGVkJTNEMSUyNm1hcmtldHBsYWNlSUQlM0RBMjFUSlJVVU40S0dWJTI2cHJvdG9jb2wlM0RjdXJyZW50JTI2c2VsbGVyJTNEQUo2U0laQzhZUURaWCUyNnNzaG1QYXRoJTNEJTI2cmVmXyUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MSZIPU1OU0RaU0ZOQUtCQ0FZV1BQUU8xTDdEWUZTMEEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODEiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC13ZWlnaHQ6bm9ybWFsOyBmb250LXNpemU6MTJweDtjb2xvcjogIzMzNjY5OTsiPkNsaWNrdGVjaCBSZXRhaWwgUHJpdmF0ZSBMdGQ8L2E-IGFuZCA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Ij5GdWxmaWxsZWQgYnkgQW1hem9uPC9zcGFuPi4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0ic3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InNwYWNlciI-DQogICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMHB4Ij4NCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjhweDtsaW5lLWhlaWdodDo4cHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9ieWxpbmUiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgaGVpZ2h0PSI1MCIgY2xhc3M9ImJ0biIgd2lkdGg9IjgwJSIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7d2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBoZWlnaHQ9IjM0IiB3aWR0aD0iMTAwJSIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiBoZWlnaHQ9IjM0IiBjbGFzcz0iYnRuLWxlYXJubW9yZS1iaWciIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAxOTYsIDUzKTsgYm9yZGVyLXJhZGl1czogNXB4OyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IGJvbGQiPjxhIGNsYXNzPSJvbWFfYmlnX2xtYnV0dG9uIiBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9V0JUUllSVTJGUFAwJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwNzFYUDU2TE0lMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfZW1fMXBfMl9sbSZIPVZSUksyNUtQNlZDRFNDUjdNWktTMEdFTzFPUUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfZW1fMXBfMl9sbSIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzMwMzk0Mjt3aGl0ZS1zcGFjZTpub3dyYXA7cGFkZGluZzoxMHB4OyI-TGVhcm4gbW9yZTwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjZweCI-Jm5ic3A7PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0iYnRuLWFkZHRvbGlzdC1iaWciIHdpZHRoPSIzMCUiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjMxLCAyMzEsIDE5NCk7IGJvcmRlci1yYWRpdXM6IDVweDsgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBib2xkIj48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9VElQS082MDJFTlQwJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGaXRlbS1kaXNwYXRjaCUyRjE4Ni01NzUzNTMzLTUyNjIyNDklM0YlMjZhY3Rpb24lM0RhZGQtdG8tcmVnaXN0cnkud2lzaGxpc3QlMjZhc2luLjElM0RCMDcxWFA1NkxNJTI2c3VibWl0LmFkZC10by1yZWdpc3RyeS53aXNobGlzdC54JTNEMSUyNnN1Ym1pdC5hZGQtdG8tcmVnaXN0cnkud2lzaGxpc3QueSUzRDElMjZyZWZfJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxJkg9VkpYQTJITzhWQ0dOVVRYU1hGQU1GMklSTEFJQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MSIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGNvbG9yOiByZ2IoNDcsIDQ3LCAxMjEpOyBwYWRkaW5nOjdweDsiPkFkZCB0byBXaXNoIExpc3Q8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICAgIDwvdGFibGU-PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgIDx0YWJsZSB3aWR0aD0iNjQwIiBjbGFzcz0iZGV2aWNlV2lkdGgiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBhbGlnbj0iY2VudGVyIiBiZ2NvbG9yPSIjRkZGRkZGIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI-PGltZyBzcmM9Imh0dHBzOi8vaW1hZ2VzLW5hLnNzbC1pbWFnZXMtYW1hem9uLmNvbS9pbWFnZXMvRy8wMS90ZW1wbGF0ZS9zZWN0aW9uLWRpdl82NDB4OC5qcGciIGFsdD0iPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ICIgYm9yZGVyPSIwIiBhbGlnbj0ibWlkZGxlIiBjbGFzcz0iZGV2aWNlV2lkdGgiIHN0eWxlPSJiaWN1YmljOyBtYXgtd2lkdGg6NjQwcHg7IG1heC1oZWlnaHQ6OHB4OyBjb2xvcjojQ0NDQ0NDOyBsaW5lLWhlaWdodDoxcHg7aGVpZ2h0OiBhdXRvOyBvdXRsaW5lOiBub25lOyBib3JkZXI6IDAgbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYyI-PC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgPC90YWJsZT4NCiAgICAgICAgICA8dGFibGUgd2lkdGg9IjY0MCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjpjZW50cmFsO21zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIGNsYXNzPSJkZXZpY2VXaWR0aCI-DQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICA8dGQgd2lkdGg9IjMyJSIgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBzdHlsZT0icGFkZGluZzo2cHggMCIgY2xhc3M9Imxjb2wiPg0KICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwcHgiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249ImJvdHRvbSIgYWxpZ249ImNlbnRlciIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IHBhZGRpbmc6NHB4IDhweCA0cHggOHB4O21heC13aWR0aDoyNDJweCAhaW1wb3J0YW50OyI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTNNRURLUlJNRTFPRVAmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZwcm9kdWN0JTJGQjBCQjdQRzU0VCUzRnJlZiUzRGVtXzFwXzNfaW0lMjZyZWZfJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxJkg9VE5BUkRQWkFWRkRXSEU2Q1U2N0FJSzJXN0xFQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MSI-IDxpbWcgc3JjPSJodHRwczovL20ubWVkaWEtYW1hem9uLmNvbS9pbWFnZXMvSS80MThVdWdjZk9sTC5fU1I1MDAsNTAwXy5fQUNfU0w1MDBfU1MxNzVfLmpwZyIgY2xhc3M9Im9tYV9wcl9pbWFnZSIgYWx0PSJ4Y2x1bWEgREFDIE1vZHVsZSAxMzM0IFVEQTEzMzRBIEkyUyBEQUMgU3RlcmVvIERlY29kZXIgTW9kdWxlIEZvciB1bm8gMy4zViAtIDVWIiBib3JkZXI9IjAiIHN0eWxlPSJoZWlnaHQ6IGF1dG87IG91dGxpbmU6IG5vbmU7IGJvcmRlcjogMCBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO2Rpc3BsYXk6IGJsb2NrO3dpZHRoOiAxNzVweCAhaW1wb3J0YW50OyBoZWlnaHQ6IDE3NXB4ICFpbXBvcnRhbnQiPiA8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNjclIiB2YWxpZ249Im1pZGRsZSIgYWxpZ249InJpZ2h0IiBzdHlsZT0icGFkZGluZzo2cHggMCIgY2xhc3M9InJjb2wiPg0KICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJsZWZ0IiBjbGFzcz0icGVfYXNpbiIgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgY29sb3I6ICMzMzMzMzM7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IHRleHQtYWxpZ246IGxlZnQ7IGZvbnQtZmFtaWx5OkFyaWFsLCBzYW5zLXNlcmlmOyBsaW5lLWhlaWdodDogMTRweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgcGFkZGluZzo0cHggMTVweCA0cHggMCI-DQogICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InByX3RpdGxlIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImxlZnQiPjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTpBcmlhbCxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtc3R5bGU6bm9ybWFsO3RleHQtYWxpZ246bGVmdDtjb2xvcjojMzM2Njk5OyI-IDxhIGNsYXNzPSJvbWFfcHJfdGl0bGUiIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0yMDdaS1o4WkFCMlhMJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcHJvZHVjdCUyRkIwQkI3UEc1NFQlM0ZyZWYlM0RlbV8xcF8zX3RpJTI2cmVmXyUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MSZIPVlaQVFHVUU3T0FHSjBDVUFHQUJFRU1BWFNFQ0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODEiIHN0eWxlPSJmb250LXNpemU6IDE0cHg7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjb2xvcjojMzM2Njk5OyI-IHhjbHVtYSBEQUMgTW9kdWxlIDEzMzQgVURBMTMzNEEgSTJTIERBQyBTdGVyZW8gRGVjb2RlciBNb2R1bGUuLi48L2E-IDwvc3Bhbj4gPHNwYW4gY2xhc3M9Im9tYS1wci1ibCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXN0eWxlOm5vcm1hbDt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojMzMzO3RleHQtYWxpZ246bGVmdDsiPiA8YnI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTFYNTVTSTBFUEtNRDEmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGc3RvcmVzJTJGeGNsdW1hJTJGcGFnZSUyRjE1NzFEMzBELTAyOTYtNDA0Qy04OTZFLUJBMzQzNjFGRkI1NyUzRnJlZl8lM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfYXN0X2JsbiZIPU5OMElPTlVBOUFWNlJBWEhUVUJDT05GTktGVUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfYXN0X2JsbiIgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4OyBjb2xvcjojMzM2Njk5OyI-eGNsdW1hPC9hPiA8L3NwYW4-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIGhlaWdodD0iMTAiPg0KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-DQogICAgICAgICAgICAgICAgICAgICAgICZuYnNwOw0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2VfbGlzdCI-DQogICAgICAgICAgICAgICAgICAgICA8dGQ-PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij4gPHNwYW4gY2xhc3M9InByX3ByaWNlX2xhYmVsIj4gTS5SLlAuOiA8L3NwYW4-IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjQ0MwMDAwOyIgY2xhc3M9Im9tYV9wcl9wcmljZV92YWxfbGlzdCI-IDxzdHJpa2U-4oK5NzA5LjAwPC9zdHJpa2U-IDwvc3Bhbj4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icHJfcHJpY2Vfb3VyIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPiA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPiBEZWFsIFByaWNlOiA8L3NwYW4-IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJwcl9wcmljZV9oaWdobGlnaHQiPiDigrk1MTYuMDAgPC9zcGFuPiA8L3NwYW4-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9wcmljZV9zYXZpbmdzIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTJweDsiPiA8c3BhbiBjbGFzcz0icHJfcHJpY2VfbGFiZWwiPiBZb3UgU2F2ZTogPC9zcGFuPiA8c3BhbiBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogI0NDMDAwMDsiIGNsYXNzPSJvbWFfcHJfcHJpY2VfdmFsX3NhdmluZ3MiPiDigrkxOTMuMDAgKDI3JSkgPC9zcGFuPiA8L3NwYW4-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9tZXJjaGFudCI-DQogICAgICAgICAgICAgICAgICAgICA8dGQ-PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgY29sb3I6IzU1NTU1NTsgZm9udC1zaXplOjEycHg7Ij4gRGlzcGF0Y2hlZCBmcm9tIGFuZCBzb2xkIGJ5IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0yQjhSUVJKSjVIU1BLJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGYWFnJTJGbWFpbiUzRmllJTNEVVRGOCUyNmFzaW4lM0RCMEJCN1BHNTRUJTI2aXNBbWF6b25GdWxmaWxsZWQlM0QwJTI2bWFya2V0cGxhY2VJRCUzREEyMVRKUlVVTjRLR1YlMjZwcm90b2NvbCUzRGN1cnJlbnQlMjZzZWxsZXIlM0RBMzFQVUlPUEhKNTZZMyUyNnNzaG1QYXRoJTNEJTI2cmVmXyUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MSZIPUFTUFNCQUwwMjJWTUFOWERMSVJBMkJZRE5MMEEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODEiIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246bm9uZTsgZm9udC13ZWlnaHQ6bm9ybWFsOyBmb250LXNpemU6MTJweDtjb2xvcjogIzMzNjY5OTsiPnhjbHVtYcKuPC9hPi4gPC9zcGFuPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0ic3BhY2VyIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZCBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPg0KICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InNwYWNlciI-DQogICAgICAgICAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxMHB4Ij4NCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHdpZHRoPSIxIiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjhweDtsaW5lLWhlaWdodDo4cHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJwcl9ieWxpbmUiPg0KICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGJvcmRlcj0iMCIgaGVpZ2h0PSI1MCIgY2xhc3M9ImJ0biIgd2lkdGg9IjgwJSIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7d2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgYm9yZGVyPSIwIiBoZWlnaHQ9IjM0IiB3aWR0aD0iMTAwJSIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0iY2VudGVyIiBoZWlnaHQ9IjM0IiBjbGFzcz0iYnRuLWxlYXJubW9yZS1iaWciIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAxOTYsIDUzKTsgYm9yZGVyLXJhZGl1czogNXB4OyBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IGJvbGQiPjxhIGNsYXNzPSJvbWFfYmlnX2xtYnV0dG9uIiBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MjdDSVIyTlJSQkU2WSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnByb2R1Y3QlMkZCMEJCN1BHNTRUJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX2VtXzFwXzNfbG0mSD0zVTRZQTAyTjEwREFOQVJZUlgyNElESEdBV1VBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX2VtXzFwXzNfbG0iIHN0eWxlPSJkaXNwbGF5OmJsb2NrO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMDM5NDI7d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmc6MTBweDsiPkxlYXJuIG1vcmU8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI2cHgiPiZuYnNwOzwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgYWxpZ249ImNlbnRlciIgY2xhc3M9ImJ0bi1hZGR0b2xpc3QtYmlnIiB3aWR0aD0iMzAlIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzMSwgMjMxLCAxOTQpOyBib3JkZXItcmFkaXVzOiA1cHg7IGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDogYm9sZCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL2YuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTJKODMyNk5RTjlLRVkmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGZ3AlMkZpdGVtLWRpc3BhdGNoJTJGMTg2LTU3NTM1MzMtNTI2MjI0OSUzRiUyNmFjdGlvbiUzRGFkZC10by1yZWdpc3RyeS53aXNobGlzdCUyNmFzaW4uMSUzREIwQkI3UEc1NFQlMjZzdWJtaXQuYWRkLXRvLXJlZ2lzdHJ5Lndpc2hsaXN0LnglM0QxJTI2c3VibWl0LmFkZC10by1yZWdpc3RyeS53aXNobGlzdC55JTNEMSUyNnJlZl8lM0RwZV80MTA3NTAxXzEyMTc1MjE4ODEmSD1KUVRYMUFETVhYQjBWV1BEOE9QQ0tQM0hQVVlBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxIiBzdHlsZT0iZGlzcGxheTogYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgY29sb3I6IHJnYig0NywgNDcsIDEyMSk7IHBhZGRpbmc6N3B4OyI-QWRkIHRvIFdpc2ggTGlzdDwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgPHRhYmxlIHdpZHRoPSI2NDAiIGNsYXNzPSJkZXZpY2VXaWR0aCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIGFsaWduPSJjZW50ZXIiIGJnY29sb3I9IiNGRkZGRkYiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWFnZXMtbmEuc3NsLWltYWdlcy1hbWF6b24uY29tL2ltYWdlcy9HLzAxL3RlbXBsYXRlL3NlY3Rpb24tZGl2XzY0MHg4LmpwZyIgYWx0PSI9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gPSA9ID0gIiBib3JkZXI9IjAiIGFsaWduPSJtaWRkbGUiIGNsYXNzPSJkZXZpY2VXaWR0aCIgc3R5bGU9ImJpY3ViaWM7IG1heC13aWR0aDo2NDBweDsgbWF4LWhlaWdodDo4cHg7IGNvbG9yOiNDQ0NDQ0M7IGxpbmUtaGVpZ2h0OjFweDtoZWlnaHQ6IGF1dG87IG91dGxpbmU6IG5vbmU7IGJvcmRlcjogMCBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljIj48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgIDx0YWJsZSBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjUiIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMTAwJSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZTo1cHg7bGluZS1oZWlnaHQ6NXB4OyI-DQogICAgICAgICAgICAgICAmbmJzcDsNCiAgICAgICAgICAgICAgPC9kaXY-PC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICA8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJsZWZ0IiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE1Ij4NCiAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjE1IiBjbGFzcz0ic3BhY2VyIiBzdHlsZT0iZm9udC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6MTBweDsiPg0KICAgICAgICAgICAgICAgICAgICZuYnNwOw0KICAgICAgICAgICAgICAgICAgPC9kaXY-PC90ZD4NCiAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCIgdmFsaWduPSJ0b3AiPjxpbWcgY2xhc3M9Im9tYV9vdXRyb190ZXh0X2hhbGZfYXJyb3ciIHNyYz0iaHR0cHM6Ly9pbWFnZXMtbmEuc3NsLWltYWdlcy1hbWF6b24uY29tL2ltYWdlcy9HLzAxL3RlYS9hNC5fQ0IzMzI5MzUzNzlfLmdpZiIgd2lkdGg9IjEwIiBhbHQ9Ij4iIGhlaWdodD0iMTRweCIgYm9yZGVyPSIwIiBzdHlsZT0iaGVpZ2h0OiBhdXRvOyBvdXRsaW5lOiBub25lOyBib3JkZXI6IDAgbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYyI-PC90ZD4NCiAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MUpNUjFDSjFPQUNDQyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnlvdXJzdG9yZSUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9lbV9mbCZIPTI1S01LWFpERlBCQkNHQVhHTlZKTldaU0haSUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfZW1fZmwiIGNsYXNzPSJvbWEtb3V0cm8tdGV4dCIgc3R5bGU9ImZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxTYW5zLVNlcmlmO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDsgZm9udC1zdHlsZTpub3JtYWw7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6IzAwNEI5MTt0ZXh0LWFsaWduOmxlZnQ7Ij4gU2VlIHNpbWlsYXIgcHJvZHVjdHMgPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTUiPg0KICAgICAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMTUiIGNsYXNzPSJzcGFjZXIiIHN0eWxlPSJmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMHB4OyI-DQogICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICA8L2Rpdj48L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPHRyIGhlaWdodD0iMTUiIGNsYXNzPSJzcGFjZXIiPg0KICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgPGRpdiB3aWR0aD0iMTAwJSIgY2xhc3M9InNwYWNlciIgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2xpbmUtaGVpZ2h0OjE1cHg7Ij4NCiAgICAgICAgICAgICAgICZuYnNwOw0KICAgICAgICAgICAgICA8L2Rpdj48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgIDx0YWJsZSBjbGFzcz0ic2VmX3NwYWNlciIgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBzdHlsZT0iYm9yZGVyLXNwYWNpbmc6MHB4O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttaW4td2lkdGg6MTAwJTttc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgPHRyIGhlaWdodD0iMiI-DQogICAgICAgICAgICAgPHRkIGJnY29sb3I9IiNjY2NjYzkiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjIiPg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvbWFfZGl2aWRlcl9mb290ZXIiIHdpZHRoPSIxMDAlIiBzdHlsZT0iZm9udC1zaXplOjJweDtsaW5lLWhlaWdodDoycHg7YmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vaW1hZ2VzLW5hLnNzbC1pbWFnZXMtYW1hem9uLmNvbS9pbWFnZXMvRy8wMS90ZW1wbGF0ZS9zZWN0aW9uLWRpdl82NDB4OC5qcGcpICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsgaGVpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQiPg0KICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgIDwvZGl2PjwvdGQ-DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgIDwvdGFibGU-PCEtLSBjaGVjayBpZiB3ZSBhcmUgZ2V0dGluZyB0aGUgZW1haWxBZHMgcHJvcGVybHkgb3RoZXJ3aXNlIGRvIG5vdCBkaXNwbGF5IEFkcy0tPg0KICAgICAgICAgIDx0YWJsZSBjbGFzcz0iY3Mtc2xvdCBkZXZpY2VXaWR0aCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI2NDAiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgPHRhYmxlIGFsaWduPSJjZW50ZXIiIHN0eWxlPSJtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6MTAwJTttc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIj4NCiAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyLWJhbm5lciIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPjwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyLWJhbm5lciIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPjwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZm9vdGVyLWJhbm5lciIgYWxpZ249ImNlbnRlciIgdmFsaWduPSJtaWRkbGUiPjwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgIDwvdGFibGU-PC90ZD4NCiAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjY0MCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJkZXZpY2VXaWR0aCBzZWZfZm9vdGVyX2xpbmtmYXJtIiB2YWxpZ249Im1pZGRsZSIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBjbGFzcz0ibGlua2Zhcm0iIHN0eWxlPSJmb250LWZhbWlseTpIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO2Rpc3BsYXk6aW5saW5lLWJsb2NrOyI-DQogICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9IjY0MCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJkZXZpY2VXaWR0aCBzZWZfZm9vdGVyX2xpbmtmYXJtIiBiZ2NvbG9yPSIjRkZGRkZGIiB2YWxpZ249Im1pZGRsZSIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjRkZGRkZGIiBjbGFzcz0ibGlua2Zhcm0iIHN0eWxlPSJmb250LWZhbWlseTpIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyI-DQogICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGFsaWduPSJjZW50ZXIiIGNlbGxwYWRkaW5nPSIxMCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiNGRkZGRkYiIGNsYXNzPSJmYXJtIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGFsaWduPSJsZWZ0IiBjbGFzcz0iZmFybWhlYWQiIHN0eWxlPSJmb250LWZhbWlseTphcmlhbDtmb250LXNpemU6MTRweDtjb2xvcjojZTQ3OTExO2xpbmUtaGVpZ2h0OjE2cHg7IGZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1mYW1pbHk6IGFyaWFsOyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiByZ2IoMjI4LCAxMjEsIDE3KTsgbGluZS1oZWlnaHQ6IDE2cHg7IGZvbnQtd2VpZ2h0OiBib2xkIj48Zm9udCBmYWNlPSJhcmlhbCwgdmVyZGFuYSxhIHNhbnMtc2VyaWYiIHNpemU9IjMiIGNvbG9yPSIjZTQ3OTExIiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWw7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2U0NzkxMTtsaW5lLWhlaWdodDoxNnB4Ij5GaW5kIEdyZWF0IERlYWxzIG9uIE1pbGxpb25zIG9mIFByb2R1Y3RzPC9mb250PjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7bXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgY2xhc3M9InNlZl9mb290ZXJfbGlua2Zhcm0iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxNTUiIHZhbGlnbj0idG9wIiBjbGFzcz0iZmFybTEiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHN0eWxlPSJmb250LWZhbWlseTphcmlhbCxoZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDttc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlIiB3aWR0aD0iOTUlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIyIiBjZWxscGFkZGluZz0iMCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj1KOVBVSjVXUExINlAmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9sZl9Cb29rcyUyRiUzRm5vZGUlM0Q5NzYzODkwMzEmSD1PU0dKOE9IM1FRWUM2NzlVVkFFRExRVUFQS1FBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2xmX0Jvb2tzIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-Qm9va3M8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0xUjc1SlA1STRSRkdLJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfbGZfZUJvb2tzJTJGJTNGbm9kZSUzRDE2MzQ3NTMwMzEmSD1ETjFWSlRTME1YME5aSVc1SkdQSk1KUlRDWDRBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2xmX2VCb29rcyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPktpbmRsZSBlQm9va3M8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj1MOENIMVpPTlJWSlYmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUzRm5vZGUlM0Q5ODQwMDk3MDMxJTI2cmVmJTNEcGVfbGZfS2VSZWFkZXIlMjZyZWZfJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxJkg9T0VNRk5CVTdESVBTR0xFN0hZS0dFSEtYQUgwQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MSIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPktpbmRsZSBlLXJlYWRlciA8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0yWDg3SU05OFNNR1Q1JlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmRwJTJGQjAwUUpET0VBTyUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9sZl9LUFcmSD1YS1pERThFNFJUNEVGWlZSVkdHUlA2WFVTSktBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2xmX0tQVyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPktpbmRsZSBQYXBlcndoaXRlIDwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTFLRFk4RjdTTlk1SzgmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9sZl9NdXNpYyUyRiUzRm5vZGUlM0Q5NzY0NDUwMzEmSD1RN0RVMUZQRElXMFBGV1ZES0NTQTBEMU01MU9BJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2xmX011c2ljIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-TXVzaWMsPC9hPiA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MlFESzZWSVVJTkJRRyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2xmX01vdmllcyUyRiUzRm5vZGUlM0Q5NzY0MTYwMzEmSD1VSkJQSTVETUU2UkVLVDZRSUE5VkNGTVJXS0FBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2xmX01vdmllcyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPk1vdmllczwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTFKN0tVN0ZSOVBISUsmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9sZl9WRyUyRiUzRm5vZGUlM0Q5NzY0NjAwMzEmSD1CR0tPR0NCRlhBSTczNDlRUVJUUEJHSENBSENBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2xmX1ZHIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-VmlkZW8gR2FtZXM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE4MCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJmYXJtMiI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O21zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIHdpZHRoPSI5NSUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTNRUThRUk9VWFpRUTEmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9sZl9Nb2JpbGVzJTJGJTNGbm9kZSUzRDEzODk0MDEwMzEmSD1TQUFLQ0pBTzE4RktQS1NBTEVMQ0pUU05VSUtBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2xmX01vYmlsZXMiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5Nb2JpbGVzICZhbXA7IDwvYT48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MjhUTjdVQUFLSUJBVSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX1RhYmxldHMlMkYlM0Zub2RlJTNEMTM3NTQ1ODAzMSZIPU1aNk9YTDVaU1Y5WEhERkZLRkRJWlU2QkFBQ0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfVGFibGV0cyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPlRhYmxldHM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0zT1VPTjU1Rk5NNjU4JlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfbGZfQ29tcHMlMkYlM0Zub2RlJTNEOTc2MzkyMDMxJkg9TlcyN1VCOU9ZRUZSQVZEQUdXQklZQktBV09XQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9sZl9Db21wcyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkNvbXB1dGVycyAmYW1wOyBBY2Nlc3NvcmllczwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTFGS0FSUlpZVVdIUUYmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9sZl9DYW1lcmElMkYlM0Zub2RlJTNEMTM4ODk3NzAzMSZIPUVaMEZFUlNKVEFaSFRYR1A1QlpBSExYNlVBWUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfbGZfQ2FtZXJhIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-Q2FtZXJhcyw8L2E-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPU9PQ0hRSUJTS1FaRyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX0FWVFYlMkYlM0Zub2RlJTNEMTU3NTQwNzAzMSZIPVEyTldRU0xGSzFKMkFXRUlBM1hYOUFGUkFYRUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfQVZUViIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPiBBdWRpbyAmYW1wOyBWaWRlbzwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTFLWlJMT1NPRUpPSkcmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9NdXNpY2FsSW5zdHIlMkYlM0Zub2RlJTNEMzY3NzY5NzAzMSZIPTRJRUEyMDdEREFZQVZFVUxYWDlZN1dBU0hTU0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfTXVzaWNhbEluc3RyIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-TXVzaWNhbCBJbnN0cnVtZW50czwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTNMUEozWEg4M0FNSEQmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9TcG9ydHMlMkYlM0Zub2RlJTNEMTk4NDQ0MzAzMSZIPU1BRlY4UFNVTFVWSktOWlBRNVBKTFJWQ1NPT0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfU3BvcnRzIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-U3BvcnRzICZhbXA7IEZpdG5lc3M8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0yTzFZT0JUWkxaOEdJJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfSEslMkYlM0Zub2RlJTNEOTc2NDQyMDMxJkg9VTI2RzdCUVMzQVRSWERaNVZRU09QR1ZZRzNTQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9ISyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkhvbWUgJmFtcDsgS2l0Y2hlbjwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTM1IiB2YWxpZ249InRvcCIgY2xhc3M9ImZhcm0zIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0iZm9udC1mYW1pbHk6YXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7bXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSIgd2lkdGg9Ijk1JSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMiIgY2VsbHBhZGRpbmc9IjAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MzhMV0xGQjFURzlRRCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX0Nsb3RoaW5nJTJGJTNGbm9kZSUzRDE1NzEyNzEwMzEmSD1RUU9POU9OSlVKSlhTN1E4R0FIWFZBTEJGQUFBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX0Nsb3RoaW5nIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-Q2xvdGhpbmcsIEFjY2Vzc29yaWVzPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MUxGMUkxQldVUlVSMSZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX1dhdGNoZXMlMkYlM0Zub2RlJTNEMTM1MDM4NzAzMSZIPUFaU0tRVEw0WURLREZRVkNMWVNKTEFUM040OEEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfV2F0Y2hlcyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPldhdGNoZXMsPC9hPiA8YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9Mk01SUhISTFGSDk3SCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX0pld2VsbGVyeSUyRiUzRm5vZGUlM0QxOTUxMDQ4MDMxJkg9V1hBT0ZUTERNNFZIRk9LTllXQ1FBWkJWRlBXQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9KZXdlbGxlcnkiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5KZXdlbGxlcnk8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj1WWEcxOVhZUlVKWFomVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9IYW5kYmFncyUyRiUzRm5vZGUlM0QxOTgzMzM4MDMxJkg9S1BMM1NZNUpOSjdLNUxWRUJUVkJPM09YVlpJQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9IYW5kYmFncyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkhhbmRiYWdzICZhbXA7IDwvYT48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9Mlo0QTBWQ1FDOERWUiZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX0x1Z2dhZ2UlMkYlM0Zub2RlJTNEMjQ1NDE2OTAzMSZIPUFLQ0VBWVRRMkVFR1NVTllSWDNCOFBEODNISUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfTHVnZ2FnZSIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkx1Z2dhZ2U8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0yQTM5QUpXTk02MDdZJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfU2hvZXMlMkYlM0Zub2RlJTNEMTk4MzM5NjAzMSZIPUNBUUMzTklJVVRFTVVSTFhWQUJRQUNNT0JaT0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfU2hvZXMiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5TaG9lczwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTNPMTZMUlVZOVRVUEQmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9CZWF1dHklMkYlM0Zub2RlJTNEMTM1NTAxNjAzMSZIPUM1RjhQUFlZWFlWTFhYWk1YSzFIQUxWOUxTS0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfQmVhdXR5IiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-QmVhdXR5ICZhbXA7IDwvYT48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9M0dYRk4yWTFOQ0tTTyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX0hlYWx0aCUyRiUzRm5vZGUlM0QxMzUwMzg0MDMxJkg9RFhLRUpaTFcxVlcwUFNPVU5EM0ZFWFlUTlg0QSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9IZWFsdGgiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5IZWFsdGg8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0xWVM1UlVKVlNDUFEmVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9Ub3lzJTJGJTNGbm9kZSUzRDEzNTAzODAwMzEmSD1ISERRN1EzRkVESjBSQTVZQVZMNFhBMEJQQU1BJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX1RveXMiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5Ub3lzICZhbXA7IDwvYT48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MTdEMTBHRTUzQzZCRCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX0JhYnklMkYlM0Zub2RlJTNEMTU3MTI3NDAzMSZIPUNEQUVMR1ZZT1NEOFJPNEQ3QVNSR1hQSDNHUUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfQmFieSIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkJhYnkgUHJvZHVjdHM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjE3MCIgdmFsaWduPSJ0b3AiIGNsYXNzPSJmYXJtNCI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O21zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiIHdpZHRoPSI5NSUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0ibGVmdCI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL3IuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTM1RklTQjRMTEczTE0mVD1DJlU9aHR0cHMlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGYiUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9HQyUyRiUzRm5vZGUlM0QzNzA0OTgyMDMxJkg9VjFITUkxTjNJS1NGWkRLTUVRRjlFTVhBU0JJQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9HQyIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkdpZnQgQ2FyZHM8L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9yLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0xWUZFU1dQUklBUkJUJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmIlMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfUGV0cyUyRiUzRm5vZGUlM0QyNDU0MTgxMDMxJkg9SDFWRkI5TkFVTkUxRkZYQ0tBSlE2QkhZR1QwQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9QZXRzIiBzdHlsZT0iY29sb3I6IzY2Njt0ZXh0LWRlY29yYXRpb246bm9uZSI-UGV0IFN1cHBsaWVzPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MkdKT0VBWkRVMFczTCZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZiJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX0dvdXJtZXQlMkYlM0Zub2RlJTNEMjQ1NDE3ODAzMSZIPTNMOEE1VlY2VlZSTlFEWFhQMEFPVENZMEU4T0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfR291cm1ldCIgc3R5bGU9ImNvbG9yOiM2NjY7dGV4dC1kZWNvcmF0aW9uOm5vbmUiPkdvdXJtZXQgPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9UVMwRFpESU9TQ0FPJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRm1zaG9wJTNGcmVmXyUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MSZIPTVPU0xSNExRSEwwQlVaSDhJVExFV1hQVUJNVUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODEiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5BbWF6b24gU2hvcHBpbmcgQXBwPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9OUk3M1c2WE9OUU5ZJlQ9QyZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGZGlnaXRhbCUyRmZpb25hJTJGa2NwLWxhbmRpbmctcGFnZSUzRnJlZl8lM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfS0NQJkg9SlpLQVZUVE9JS1UzQVROUkdQSzU1TERTVlRPQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9LQ1AiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5LaW5kbGUgUmVhZGluZyBBcHBzPC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3AvZi5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MjFOREZDSlFUOVVONyZUPUMmVT1odHRwcyUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRmZlYXR1cmUuaHRtbCUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9BcHBzdG9yZSUzRmllJTNEVVRGOCUyNmRvY0lkJTNEMTAwMDcyMTc3MyZIPTBHOE9EQUhRSVlOVVNJRllVSUYySlBaVTNaR0EmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfQXBwc3RvcmUiIHN0eWxlPSJjb2xvcjojNjY2O3RleHQtZGVjb3JhdGlvbjpub25lIj5BcHBzdG9yZSBmb3IgQW5kcm9pZDwvYT48L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJzZWZfc3BhY2VyIiB3aWR0aD0iNjQwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9ImJvcmRlci1zcGFjaW5nOjBweDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgICAgICA8dHIgaGVpZ2h0PSIyIj4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZCBiZ2NvbG9yPSIjY2NjY2M5IiB3aWR0aD0iNjQwIiBoZWlnaHQ9IjIiPg0KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjY0MCIgc3R5bGU9ImZvbnQtc2l6ZToycHg7bGluZS1oZWlnaHQ6MnB4O2JhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL2ltYWdlcy1uYS5zc2wtaW1hZ2VzLWFtYXpvbi5jb20vaW1hZ2VzL0cvMDEvdGVtcGxhdGUvc2VjdGlvbi1kaXZfNjQweDguanBnKSAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7IGhlaWdodDogMTBweCAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICA8L3RhYmxlPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI-DQogICAgLnNlZl9mb290ZXJfY29ubmVjdCAueXNob3J0Y3V0cyB7IGNvbG9yOiNGRkZGRkYgfQ0KPC9zdHlsZT4NCiAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJzZWZfZm9vdGVyX2Nvbm5lY3QiIGJnY29sb3I9IiNGRkZGRkYiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjEwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjY0MCIgYWxpZ249ImNlbnRlciIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWJvdHRvbTogM3B4IHNvbGlkIHJnYigxMzYsIDEzNiwgMTM2KTsgaGVpZ2h0OiAwcHggIWltcG9ydGFudDsgbWF4LWhlaWdodDogMHB4ICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMHB4OyBtYXJnaW46IDA7IHdpZHRoOiAxMDAlIj4NCiAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICA8dHI-DQogICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iNTAlIj4NCiAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGFsaWduPSJsZWZ0IiBjZWxscGFkZGluZz0iNiIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJzZXR0aW5ncyIgY2JvcmRlcj0iMCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJsZWZ0Ij48YSBocmVmPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9VkNFSERKREozR1pQJlQ9QyZVPWh0dHAlM0ElMkYlMkZ3d3cuYW1hem9uLmluJTJGcmVmJTNEcGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2Zvb3Rlcl9hbWF6b25sb2dvJTJGJkg9WUNYR0lDVk8wVlNVQkYyNVJETjRQRjZLNExHQSZyZWZfPXBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9mb290ZXJfYW1hem9ubG9nbyIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwOi8vZy1lYzIuaW1hZ2VzLWFtYXpvbi5jb20vaW1hZ2VzL0cvMzEvYWEvYW1hem9uL2xvZ28yLmdpZiIgYWx0PSJBbWF6b24uaW4iIGJvcmRlcj0iMCIgYWxpZ249ImxlZnQiIHN0eWxlPSJoZWlnaHQ6IGF1dG87IG91dGxpbmU6IG5vbmU7IGJvcmRlcjogMCBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljIj48L2E-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij4NCiAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iY29ubmVjdCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNiIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJyaWdodCIgc3R5bGU9Im1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2UiPg0KICAgICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI-PGZvbnQgc3R5bGU9ImZvbnQtZmFtaWx5OiB2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTBweDsgY29sb3I6ICM2NjY7IGxpbmUtaGVpZ2h0OjEwcHgiIGNvbG9yPSIjOTk5IiBmYWNlPSJ2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWYiIHNpemU9IjEiPkNvbm5lY3Qgd2l0aCBBbWF6b24gSW5kaWE8L2ZvbnQ-PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmFjZWJvb2siPjxmb250IHN0eWxlPSJmb250LWZhbWlseTogdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHg7IGNvbG9yOiAjOTk5OyIgY29sb3I9IiM5OTkiIGZhY2U9InZlcmRhbmEsYXJpYWwsc2Fucy1zZXJpZiIgc2l6ZT0iMSI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL2YuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPVpBQjUyTURHNDZIOCZUPUMmVT1odHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRmdwJTJGcmVkaXJlY3QuaHRtbCUyRnJlZiUzRHBlXzQxMDc1MDFfMTIxNzUyMTg4MV9wZV9mYl9mdHIlMkYlM0Zsb2NhdGlvbiUzRGh0dHAlM0ElMkYlMkZ3d3cuZmFjZWJvb2suY29tJTJGQW1hem9uSU4lMjZ0b2tlbiUzRDIwNzVENUVBQzdCQjIxNDA4OTcyOEUyMTgzRkQzOTE3MDZENDFFOTQmSD05SVRBM0VFUlVKWjhFOUJaQjJNWUpWQVRZQ1lBJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX3BlX2ZiX2Z0ciIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSJodHRwOi8vZy1lY3guaW1hZ2VzLWFtYXpvbi5jb20vaW1hZ2VzL0cvMDEvdXMtbWFpbC9GQmxvZ28uZ2lmIiBhbHQ9ImltYWdlIiBib3JkZXI9IjAiIGhlaWdodD0iMzAiIGhzcGFjZT0iMCIgdnNwYWNlPSIwIiB3aWR0aD0iMzAiIHN0eWxlPSJ3aWR0aDozMHB4OyBoZWlnaHQ6MzBweDtoZWlnaHQ6IGF1dG87IG91dGxpbmU6IG5vbmU7IGJvcmRlcjogMCBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljIj48L2E-PC9mb250PjwvdGQ-DQogICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InR3aXR0ZXIiPjxmb250IHN0eWxlPSJmb250LWZhbWlseTogdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEwcHg7IGNvbG9yOiAjOTk5OyIgY29sb3I9IiM5OTkiIGZhY2U9InZlcmRhbmEsYXJpYWwsc2Fucy1zZXJpZiIgc2l6ZT0iMSI-PGEgaHJlZj0iaHR0cHM6Ly93d3cuYW1hem9uLmluL2dwL2YuaHRtbD9DPTFEWVdGQ1lEQllGMEsmSz0ySDVEUEtYVlNaQTJTJk09dXJuOnJ0bjptc2c6MjAyNDExMjUwMDEzNDEzNjQxODI3YWE0OGQ0NWEwYTc1MjNlNDU4NjMwcDBldSZSPTFRRTNJRFRWVEhMN1QmVD1DJlU9aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uaW4lMkZncCUyRnJlZGlyZWN0Lmh0bWwlMkZyZWYlM0RwZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfdHdfZnRyJTJGJTNGbG9jYXRpb24lM0RodHRwJTNBJTJGJTJGdHdpdHRlci5jb20lMkZBbWF6b25JTiUyNnRva2VuJTNEQTMwOURGQkZDQjFFMzdBODA4RkY1MzE5MzQ4NTVEQzgxN0YxMzBCNiZIPUEwQTI3WElSUzlNRkFDSTJZMEVTUTQ2WkFTSUEmcmVmXz1wZV80MTA3NTAxXzEyMTc1MjE4ODFfcGVfdHdfZnRyIiB0YXJnZXQ9Il9ibGFuayI-PGltZyBzcmM9Imh0dHA6Ly9nLWVjeC5pbWFnZXMtYW1hem9uLmNvbS9pbWFnZXMvRy8wMS91cy1tYWlsL1R3aXR0ZXJMb2dvLmdpZiIgYWx0PSJpbWFnZSIgYm9yZGVyPSIwIiBoZWlnaHQ9IjMwIiBoc3BhY2U9IjAiIHZzcGFjZT0iMCIgd2lkdGg9IjMwIiBzdHlsZT0id2lkdGg6MzBweDsgaGVpZ2h0OjMwcHg7aGVpZ2h0OiBhdXRvOyBvdXRsaW5lOiBub25lOyBib3JkZXI6IDAgbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYyI-PC9hPjwvZm9udD48L3RkPg0KICAgICAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgICAgIDwvdGJvZHk-DQogICAgICAgICAgICAgIDwvdGFibGU-DQogICAgICAgICAgICAgIDx0YWJsZSBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNjQwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIyIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InNlZl9sZWdhbF9mb290ZXIiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNlM2UzZTM7bXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjI3LCAyMjcsIDIyNykiIGJnY29sb3I9IiNlM2UzZTMiPg0KICAgICAgICAgICAgICAgPHRib2R5Pg0KICAgICAgICAgICAgICAgIDx0ciBoZWlnaHQ9IjEwIj4NCiAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIj4NCiAgICAgICAgICAgICAgICAgIDxkaXYgd2lkdGg9IjEwMCUiIHN0eWxlPSJmb250LXNpemU6MTBweDsgbGluZS1oZWlnaHQ6MTBweCI-DQogICAgICAgICAgICAgICAgICAgJm5ic3A7DQogICAgICAgICAgICAgICAgICA8L2Rpdj48L3RkPg0KICAgICAgICAgICAgICAgIDwvdHI-DQogICAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImxlZnQiIGNsYXNzPSJsZWdhbC10ZXh0IiBzdHlsZT0iZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIFNhbnMtU2VyaWY7IGZvbnQtc2l6ZTogMTBweDsgY29sb3I6IHJnYigxMDIsIDEwMiwgMTAyKSI-V2UgaG9wZSB5b3UgZm91bmQgdGhpcyBtZXNzYWdlIHRvIGJlIHVzZWZ1bC4gSG93ZXZlciwgaWYgeW91J2QgcmF0aGVyIG5vdCByZWNlaXZlIGZ1dHVyZSBlLW1haWxzIG9mIHRoaXMgc29ydCBmcm9tIEFtYXpvbi5pbiwgcGxlYXNlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmFtYXpvbi5pbi9ncC9mLmh0bWw_Qz0xRFlXRkNZREJZRjBLJks9Mkg1RFBLWFZTWkEyUyZNPXVybjpydG46bXNnOjIwMjQxMTI1MDAxMzQxMzY0MTgyN2FhNDhkNDVhMGE3NTIzZTQ1ODYzMHAwZXUmUj0zQ1JFUFhBQTdaVk9CJlQ9WCZVPWh0dHBzJTNBJTJGJTJGd3d3LmFtYXpvbi5pbiUyRiUyRmdwJTJGZ3NzJTJGbyUyRjEtUGl2alZxeEk1NmhQUzRiRVBJYWlmcnpLMHFxVWh5NFJWZUpJUEZhRlNtZE5qWnpqZTVXNHZUaG9wMGNtUTNBJkg9TUlESVpONllSUE9BVTJLTklUVTFDTExGSFQ4QSIgc3R5bGU9ImZvbnQtZmFtaWx5OiBBcmlhbCxIZWx2ZXRpY2EsU2Fucy1TZXJpZjsgZm9udC1zaXplOiAxMHB4OyI-b3B0LW91dCBoZXJlPC9hPiA8YnI-PGJyPg0KICAgICAgICAgICAgICAgICAgIFBsZWFzZSBub3RlIHRoYXQgcHJvZHVjdCBwcmljZXMgYW5kIGF2YWlsYWJpbGl0eSBhcmUgc3ViamVjdCB0byBjaGFuZ2UuIFByaWNlcyBhbmQgYXZhaWxhYmlsaXR5IHdlcmUgYWNjdXJhdGUgYXQgdGhlIHRpbWUgdGhpcyBuZXdzbGV0dGVyIHdhcyBzZW50OyBob3dldmVyLCB0aGV5IG1heSBkaWZmZXIgZnJvbSB0aG9zZSB5b3Ugc2VlIHdoZW4geW91IHZpc2l0IEFtYXpvbi5pbi4gPGJyPjxicj4NCiAgICAgICAgICAgICAgICAgIEFtYXpvbi5pbiBNYXJrZXRwbGFjZSBwbGF0Zm9ybTogUHJvZHVjdHMgc29sZCBieSBhIE1hcmtldHBsYWNlIHNlbGxlciBhcmUgc3ViamVjdCB0byB0aGF0IHNlbGxlcidzIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHNhbGUuIFNlZSB3d3cuQW1hem9uLmluIGZvciBkZXRhaWxzLiA8YnI-PGJyPg0KICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZTogMTIxNzUyMTg4MTxicj48YnI-DQogICAgICAgICAgICAgICAgICAgVGhpcyBtZXNzYWdlIHdhcyBzZW50IHRvIHRoZSBmb2xsb3dpbmcgZS1tYWlsIGFkZHJlc3M6IDxzcGFuIHN0eWxlPSJmb250LWZhbWlseTogQXJpYWwsSGVsdmV0aWNhLFNhbnMtU2VyaWY7IGZvbnQtc2l6ZTogMTBweDsiPnBza2h1c2hhbEBnbWFpbC5jb208L3NwYW4-PC90ZD4NCiAgICAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgPC90YWJsZT48L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJvcmRlcj0iMCIgY2xhc3M9Im1vYmlsZS1oaWRlLWdtYWlsIiBzdHlsZT0ibXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZSI-DQogICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICA8dGQgaGVpZ2h0PSIxIiBjbGFzcz0iaGlkZSIgc3R5bGU9Im1pbi13aWR0aDo2MjBweDsgZm9udC1zaXplOjBweDtsaW5lLWhlaWdodDowcHg7Ij48aW1nIGhlaWdodD0iMSIgc3R5bGU9Im1pbi13aWR0aDogNjIwcHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljO2hlaWdodDogYXV0bzsgb3V0bGluZTogbm9uZTsgYm9yZGVyOiAwIG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWMiPjwvdGQ-DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICA8L3Rib2R5Pg0KICAgICAgICAgIDwvdGFibGU-PC90ZD4NCiAgICAgICAgPC90cj4NCiAgICAgICA8L3Rib2R5Pg0KICAgICAgPC90YWJsZT48L3RkPg0KICAgIDwvdHI-DQogICA8L3Rib2R5Pg0KICA8L3RhYmxlPg0KIDxpbWcgd2lkdGg9IjEiIGhlaWdodD0iMSIgc3JjPSJodHRwczovL3d3dy5hbWF6b24uaW4vZ3Avci5odG1sP0M9MURZV0ZDWURCWUYwSyZLPTJINURQS1hWU1pBMlMmTT11cm46cnRuOm1zZzoyMDI0MTEyNTAwMTM0MTM2NDE4MjdhYTQ4ZDQ1YTBhNzUyM2U0NTg2MzBwMGV1JlI9MUNSVkoyQU5JWEtEJlQ9RSZVPWh0dHBzJTNBJTJGJTJGaW1hZ2VzLWV1LnNzbC1pbWFnZXMtYW1hem9uLmNvbSUyRmltYWdlcyUyRkclMkYwMSUyRm5hdiUyRnRyYW5zcC5naWYmSD0wNkRRQUcxQ1I0VDlVUDEyM05KWk41S1NPUU9BJnJlZl89cGVfNDEwNzUwMV8xMjE3NTIxODgxX29wZW4iIC8-PC9ib2R5Pg0KPC9odG1sPg0KDQoNCg0K" + } + } + ] + }, + "sizeEstimate": 95303, + "historyId": "527027", + "internalDate": "1732493621000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_09_193604ad97c9fe62_20241126.json b/goog/controllers/gmail/json/messages/raw_message_09_193604ad97c9fe62_20241126.json new file mode 100644 index 0000000..6c7dde9 --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_09_193604ad97c9fe62_20241126.json @@ -0,0 +1,183 @@ +{ + "id": "193604ad97c9fe62", + "threadId": "193604ad97c9fe62", + "labelIds": [ + "CATEGORY_PROMOTIONS", + "UNREAD", + "INBOX" + ], + "snippet": "Recycle your PDF gold and reduce your workload with Acrobat Pro. Don't retype \u2014 convert. Don't start from scratch. Easily export PDFs to Microsoft Word, Excel, or PowerPoint with Adobe Acrobat", + "payload": { + "partId": "", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp636404wrq; Sun, 24 Nov 2024 14:28:58 -0800 (PST)" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IG02Zz30iAXQJFRHwhVqBjRs62bpBBF9EmsARKy8d0TbGNC/QbESPGoHcwafLZ+/DTw8fAP" + }, + { + "name": "X-Received", + "value": "by 2002:a05:6a00:2ea5:b0:724:f1c9:236c with SMTP id d2e1a72fcca58-724f1c924a3mr11174135b3a.23.1732487338215; Sun, 24 Nov 2024 14:28:58 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732487338; cv=none; d=google.com; s=arc-20240605; b=BkRQX1CoSbdgeVpMHZuyACpWp9taQwJGxtvDTif3IxAICjpTdjeWq+5JdDV4Uwnu02 NdzQIxmVL/NR2u6kGifSp2aNI5G5kNlAcKbW3FFAuYPYGyEwKGF4cgayfyT5ttOxXSb8 OL/vIfHGMB+EhWM9CdxN/bDiqrwSKhKr7HeyE5qa5+KvcnWayhPk+drRLcxfaVdx8c09 G9a+LuNwnaRkINQuT9uCNYn1nYbt6VXC6aycx0tXwKbkT1jEMmbEbfATfxz0JV7N0LZL S20NrLq6gyBqaOeMtYj7yoGK66S1WO93I2IvkQ/cL1RHjVTWi11uJQwCX6r+a0DIJSr+ SqVw==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe-post:list-unsubscribe:precedence:list-id :message-id:mime-version:reply-to:to:date:subject:from :dkim-signature; bh=1lptYPv/3h7ptWQkDQ2BQd+y6H+sw4rkTtaN67WzQ0g=; fh=wSHF2rrasHXl3o4LupFQZ06Qw8S5yTQ44eGiiuBsHt4=; b=O2SbZHiPbOR3NTCBFGyrvX4FO8Jt4Xk1bZYoKlaJJ4iIJa4s7H972SL3ulx8p387KG KPDMaDD3rK5AFHj912NyuvG1E0hnbbPM7avJ9b/etApzS7vAqPWsbsRNlzlVA1fkVwBE I09G12ixs68RrKRG4ektvSgvwtadrSQbIjGshTRdUEh37rn3qg4onOYrm51/8vw5hx4k bErFBhmk/NSiM0Bhd36CbJjIYhpF2es4focowTXAUku8/Z5FTGjn42PmCclg1MXNDAb/ pAaYYlblh3eqDhsMxxWS4Cg5e4AMC3BXZK90q++mstuxthl4CxL7gxcPVaUD7s/NYN5w QoNg==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@mail.adobe.com header.s=neolane header.b=PGed0onR; spf=pass (google.com: domain of adobe1apacmid@mail.adobe.com designates 192.243.228.145 as permitted sender) smtp.mailfrom=adobe1apacmid@mail.adobe.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=mail.adobe.com" + }, + { + "name": "Return-Path", + "value": "" + }, + { + "name": "Received", + "value": "from r145.mail.adobe.com (r145.mail.adobe.com. [192.243.228.145]) by mx.google.com with ESMTPS id d2e1a72fcca58-724de6d55b0si7337017b3a.335.2024.11.24.14.28.57 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 24 Nov 2024 14:28:58 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of adobe1apacmid@mail.adobe.com designates 192.243.228.145 as permitted sender) client-ip=192.243.228.145;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@mail.adobe.com header.s=neolane header.b=PGed0onR; spf=pass (google.com: domain of adobe1apacmid@mail.adobe.com designates 192.243.228.145 as permitted sender) smtp.mailfrom=adobe1apacmid@mail.adobe.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=mail.adobe.com" + }, + { + "name": "Return-Path", + "value": "" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.adobe.com; s=neolane; t=1732487085; bh=1lptYPv/3h7ptWQkDQ2BQd+y6H+sw4rkTtaN67WzQ0g=; h=From:Subject:Date:To:MIME-Version:Message-ID:List-Unsubscribe:\t List-Unsubscribe-Post:Content-Type; b=PGed0onRzbU40A0rSs93G37hCp/BC21G75ixcyQIY7N0j4E/T2iszXK69V8W6VR6b\t FhQiwITgY75GLCbWQFfXS/f53b1d0KcnR1flrGqCUOwVnhnC4BMxb2jSNuRY7xJQzU\t oj2qPmkO2EDyiqWgMRdKgO7iYcfGa3HHQVjOtbeY=" + }, + { + "name": "X-MSFBL", + "value": "FNvCf8tUPE+TVHz+Db2yzES18D7yLKbBjFGiRb5d/P0=|eyJnIjoicHJvZC5kZWZ hdWx0XzQ3YjUzMWVjLWY5MzEtNDYwMS1hMGU4LTIzZTE4MWRlYTBkMCIsInJjcHR fbWV0YSI6eyAibSI6ICItNzI4MDY3MTk2IiwgImQiOiAiMTQ3OTQwNDkxIiwgIml uIjogImFkb2JlaW5fbWlkX3Byb2Q4IiwgInIiOiAicHNraHVzaGFsQGdtYWlsLmN vbSIgfSwiciI6InBza2h1c2hhbEBnbWFpbC5jb20iLCJiIjoiYXdzX2Fkb2JlaW5 0X3Byb2Q4X3Byb2QuZGVmYXVsdF9tb21lbnR1bTAzX210YTAwMV8xOTIuMjQzLjI yOC4xNDUifQ==" + }, + { + "name": "Received", + "value": "from [10.139.37.132] ([10.139.37.132:39084] helo=r143.mail.adobe.com) by momentum03.or1.cpt.adobe.net (envelope-from ) (ecelerity 4.2.38.999 r(:)) with ESMTP id F7/55-50100-DA7A3476; Sun, 24 Nov 2024 14:24:45 -0800" + }, + { + "name": "From", + "value": "Adobe Acrobat " + }, + { + "name": "Subject", + "value": "Save time and reuse your best content" + }, + { + "name": "Date", + "value": "Sun, 24 Nov 2024 14:24:43 -0800" + }, + { + "name": "To", + "value": "" + }, + { + "name": "Reply-To", + "value": "Adobe Acrobat " + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "X-mailer", + "value": "nlserver, Build 6.7.0" + }, + { + "name": "Message-ID", + "value": "" + }, + { + "name": "X-250ok-CID", + "value": "adobeA681974_APAC-17120766_241124" + }, + { + "name": "X-CSA-Complaints", + "value": "whitelist-complaints@eco.de" + }, + { + "name": "List-Id", + "value": "<-509008722.neolane.client.com>" + }, + { + "name": "Precedence", + "value": "bulk" + }, + { + "name": "List-Unsubscribe", + "value": "" + }, + { + "name": "List-Unsubscribe-Post", + "value": "List-Unsubscribe=One-Click" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; charset=\"windows-1252\"; boundary=\"----=_NextPart_823_A9D79D3B.A9D79D3B\"" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain; charset=\"utf-8\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "8bit" + } + ], + "body": { + "size": 1357, + "data": "VmlldyB3ZWIgdmVyc2lvbjoNCmh0dHBzOi8vdC1pbmZvLm1haWwuYWRvYmUuY29tL3IvP2lkPXRlOWVmZTIxOCxmZTNlOGJlZSxjMDA1ODE0ZiZlPWNERTlKVFF3YmxkelEyUndSRkk0VVRsTGRsTnVZVzVESlRKR2JuUnJVVU5hY0ZsellqTlpSa3RSZGtGUmRXNWpNelZqSlRORSZzPXozblFVcjV0TDZrMERWOFd5eDhYb2U0QXJKWWk0dTdheGI3N0dZaU51dlENCg0KVW5mb3J0dW5hdGVseSwgeW91ciBlbWFpbCBjbGllbnQgY2Fubm90IGRpc3BsYXkgSFRNTCBvciB5b3VyIHNldHRpbmdzIGFyZSB0dXJuZWQgb2ZmLiBUbyB2aWV3IHRoaXMgZW1haWwsIHBsZWFzZSBjbGljayBvciBjb3B5IGFuZCBwYXN0ZSB0aGUgbGluayBhYm92ZSBpbnRvIHlvdXIgYnJvd3Nlci4NCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KVGhpcyBpcyBhIG1hcmtldGluZyBlbWFpbCBmcm9tIEFkb2JlIFN5c3RlbXMgU29mdHdhcmUgSXJlbGFuZCBMaW1pdGVkLCA0LTYgUml2ZXJ3YWxrLCBDaXR5d2VzdCBCdXNpbmVzcyBQYXJrLCBEdWJsaW4gMjQsIElyZWxhbmQuDQoNCkNsaWNrIG9uIHRoZSBmb2xsb3dpbmcgbGluayB0byB1bnN1YnNjcmliZSwgb3Igc2VuZCB1cyBhbiB1bnN1YnNjcmliZSByZXF1ZXN0IHRvIHRoZSBwb3N0YWwgYWRkcmVzcyBhYm92ZS4NCkNsaWNrJm5ic3A7aGVyZTogIGh0dHBzOi8vdC1pbmZvLm1haWwuYWRvYmUuY29tL3IvP2lkPXRlOWVmZTIxOCxmZTNlOGJlZSxjMDA1ODE1MCZlPWNERTlKVFF3VDFjMGNuSTRVMGRqTmpKT1RVVlZiWGRoU1RKU2RITmtVV2xsY0V4NU1VZG1Ua1FsTWtadVNsWm5WMWhKSlRORUpuQXlQU1pzYjJNOWFXNG1jRE05TVRrJnM9TnJxVGxzVmhUcTBLWnY1dnB2UXRPd0hWZi03bDB0UWhRU3RfbDRRX3NOcyAgDQoNClBsZWFzZSByZXZpZXcgdGhlIEFkb2JlIFByaXZhY3kgUG9saWN5Lg0KaHR0cHM6Ly90LWluZm8ubWFpbC5hZG9iZS5jb20vci8_aWQ9dGU5ZWZlMjE4LGZlM2U4YmVlLGMwMDU4MTUxDQoNClRvIGVuc3VyZSBmdXR1cmUgZGVsaXZlcnkgb2YgZW1haWwsIHBsZWFzZSBhZGQgbWFpbEBtYWlsLmFkb2JlLmNvbSB0byB5b3VyIGFkZHJlc3MgYm9vaywgY29udGFjdHMsIG9yIHNhZmUgc2VuZGVycyBsaXN0Lg0KaHR0cHM6Ly90LWluZm8ubWFpbC5hZG9iZS5jb20vci8_aWQ9dGU5ZWZlMjE4LGZlM2U4YmVlLGMwMDU4MTUyDQoNClBsZWFzZSBkbyBub3QgcmVwbHkgdG8gdGhpcyBtZXNzYWdlLiBUbyBjb250YWN0IEFkb2JlLGZpbmQgb3B0aW9ucyBvbmxpbmUuDQpodHRwczovL3QtaW5mby5tYWlsLmFkb2JlLmNvbS9yLz9pZD10ZTllZmUyMTgsZmUzZThiZWUsYzAwNTgxNTMNCg==" + } + }, + { + "partId": "1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html; charset=\"utf-8\"" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + } + ], + "body": { + "size": 15684, + "data": "DQoNCg0KPCFET0NUWVBFIGh0bWw-DQo8aHRtbCB4bWxucz0iaHR0cHM6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbG5zOnY9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206dm1sIiB4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiPg0KPGhlYWQ-DQo8bGluayByZWw9Imljb24iIGhyZWY9Imh0dHBzOi8vd3d3LmFkb2JlLmNvbS9mYXZpY29uLmljbyIgdHlwZT0iaW1hZ2UveC1pY29uIj4NCjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iaHR0cHM6Ly93d3cuYWRvYmUuY29tL2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iPg0KPG1ldGEgbmFtZT0ieC1hcHBsZS1kaXNhYmxlLW1lc3NhZ2UtcmVmb3JtYXR0aW5nIj4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLjAiPg0KPG1ldGEgbmFtZT0iZm9ybWF0LWRldGVjdGlvbiIgY29udGVudD0idGVsZXBob25lPW5vIj4NCjxtZXRhIG5hbWU9ImZvcm1hdC1kZXRlY3Rpb24iIGNvbnRlbnQ9ImRhdGU9bm8iPg0KPG1ldGEgbmFtZT0iZm9ybWF0LWRldGVjdGlvbiIgY29udGVudD0iYWRkcmVzcz1ubyI-DQo8bWV0YSBuYW1lPSJmb3JtYXQtZGV0ZWN0aW9uIiBjb250ZW50PSJlbWFpbD1ubyI-DQo8dGl0bGU-U2F2ZSB0aW1lIGFuZCByZXVzZSB5b3VyIGJlc3QgY29udGVudDwvdGl0bGU-DQoNCjwhLS1baWYgbXNvXT4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI-DQpib2R5LCB0YWJsZSwgdGQgew0KZm9udC1mYW1pbHk6YWRvYmUtY2xlYW4sIEhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmICFpbXBvcnRhbnQ7DQp9DQp0ZC5oaWRle2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O30NCi53ZWI1MHt3aWR0aDogMjBweCAhaW1wb3J0YW50O30NCi53ZWIyMHt3aWR0aDogNTBweCAhaW1wb3J0YW50O30NCjwvc3R5bGU-DQo8eG1sPg0KPG86T2ZmaWNlRG9jdW1lbnRTZXR0aW5ncz4NCjxvOkFsbG93UE5HLz4NCjxvOlBpeGVsc1BlckluY2g-OTY8L286UGl4ZWxzUGVySW5jaD4NCjwvbzpPZmZpY2VEb2N1bWVudFNldHRpbmdzPg0KPC94bWw-DQo8IVtlbmRpZl0tLT4gDQo8IS0tW2lmIGd0IG1zbyAxNV0-DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJhbGwiPg0KLyogT3V0bG9vayAyMDE2IEhlaWdodCBGaXggKi8NCnRhYmxlLCB0ciwgdGQge2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7fQ0KdHIgeyBmb250LXNpemU6MHB4OyBsaW5lLWhlaWdodDowcHg7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IH0NCjwvc3R5bGU-DQo8IVtlbmRpZl0tLT4NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCkBpbXBvcnQgdXJsKCJodHRwczovL3VzZS50eXBla2l0Lm5ldC9vbnI4dGJyLmNzcyIpOw0KDQpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7DQp9DQouUmVhZE1zZ0JvZHkgew0Kd2lkdGg6IDEwMCU7DQp9DQouRXh0ZXJuYWxDbGFzcyB7DQp3aWR0aDogMTAwJTsNCn0NCnRhYmxlIHsNCmJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7DQp9DQphLCBhOnZpc2l0ZWQgew0KY29sb3I6ICMzMjFGRUQ7DQp0ZXh0LWRlY29yYXRpb246IG5vbmU7DQp9DQoubGVnYWwgYSB7DQp0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCn0NCi8qIGlPUyBCTFVFIExJTktTICovDQphW3gtYXBwbGUtZGF0YS1kZXRlY3RvcnNdIHsNCmNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7DQp0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsNCmZvbnQtc2l6ZTogaW5oZXJpdCAhaW1wb3J0YW50Ow0KZm9udC1mYW1pbHk6IGluaGVyaXQgIWltcG9ydGFudDsNCmZvbnQtd2VpZ2h0OiBpbmhlcml0ICFpbXBvcnRhbnQ7DQpsaW5lLWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50Ow0KfQ0KLm1vYmlsZSB7DQpib3JkZXItc3BhY2luZzogMDsNCmRpc3BsYXk6IG5vbmUhaW1wb3J0YW50Ow0KaGVpZ2h0OiAwOw0KbWF4LWhlaWdodDogMDsNCm1zby1oaWRlOiBhbGw7DQpvdmVyZmxvdzogaGlkZGVuOw0KdmlzaWJpbGl0eTogaGlkZGVuOw0Kd2lkdGg6IDA7DQp9DQoNCkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDo0ODBweCkgew0KdSB-IGRpdiB7DQptaW4td2lkdGg6IDEwMHZ3Ow0KfQ0KZGl2ID4gdSB-IGRpdiB7DQptaW4td2lkdGg6IDEwMCU7DQp9DQoud2ViLCAud2ViMjAsIC53ZWI1MCB7DQpkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQp9DQoubW9iaWxlIHsNCmRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7DQp3aWR0aDogYXV0byAhaW1wb3J0YW50Ow0Kb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsNCmhlaWdodDogYXV0byAhaW1wb3J0YW50Ow0KbWF4LWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50Ow0KZm9udC1zaXplOiAxNXB4ICFpbXBvcnRhbnQ7DQpsaW5lLWhlaWdodDogMjFweCAhaW1wb3J0YW50Ow0KdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50Ow0KfQ0KLmJsb2NrIHsNCmRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7DQp3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0Kb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsNCmhlaWdodDogYXV0byAhaW1wb3J0YW50Ow0KbWF4LWhlaWdodDogaW5oZXJpdCAhaW1wb3J0YW50Ow0KdmlzaWJpbGl0eTogdmlzaWJsZSAhaW1wb3J0YW50Ow0KcGFkZGluZy1sZWZ0OiAwICFpbXBvcnRhbnQ7DQp9DQoucGFkYi01MCB7DQpwYWRkaW5nLWJvdHRvbTogNTBweCAhaW1wb3J0YW50Ow0KfQ0KLm1rdG9UZXh0IHsNCndpZHRoOiAyMDBweCFpbXBvcnRhbnQ7DQp9DQouZW1haWwtd2lkdGggew0Kd2lkdGg6IDg0JSAhaW1wb3J0YW50Ow0KfQ0KLmZ1bGwtd2lkdGggew0Kd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCi5tb2JpbGUtaW1hZ2Ugew0KaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7DQp3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KfQ0KLnNvY2lhbCB7DQpmbG9hdDogbGVmdCAhaW1wb3J0YW50Ow0KcGFkZGluZy10b3A6IDY2cHggIWltcG9ydGFudDsNCnRleHQtYWxpZ246IGxlZnQgIWltcG9ydGFudDsNCn0NCi5oZWFkZXIgew0KZm9udC1zaXplOiA0MHB4ICFpbXBvcnRhbnQ7DQpsaW5lLWhlaWdodDogNDZweCAhaW1wb3J0YW50Ow0KfQ0KLnBhZGRpbmctcjAgew0KcGFkZGluZy1yaWdodDogMHB4ICFpbXBvcnRhbnQ7DQp9DQoucmFpbmJvdzEgew0KYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCUgIWltcG9ydGFudDsNCn0NCi5wYWRiLTAgew0KcGFkZGluZy1ib3R0b206IDBweCAhaW1wb3J0YW50Ow0KfQ0KLnBhZGItNDAgew0KcGFkZGluZy1ib3R0b206IDQwcHggIWltcG9ydGFudDsNCn0NCi5idG1fcGFkYm90dG9tIHsNCnBhZGRpbmctYm90dG9tOiAxMDBweCFpbXBvcnRhbnQ7DQp9DQp9DQo8L3N0eWxlPg0KPC9tZXRhPjwvbWV0YT48L21ldGE-PC9tZXRhPjwvbWV0YT48L21ldGE-PC9tZXRhPjwvbGluaz48L2xpbms-PC9oZWFkPg0KDQo8Ym9keSBiZ2NvbG9yPSIjRTRFNEU0IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojRTRFNEU0OyBtYXJnaW46MDsgcGFkZGluZzowOy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7d2lkdGg6MTAwJSAhaW1wb3J0YW50Ow0KLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0Om5vbmU7IiB0b3BtYXJnaW49IjAiPg0KPGRpdiBzdHlsZT0iZm9udC1zaXplOjFweDsgY29sb3I6I0U0RTRFNDsgZGlzcGxheTpub25lOyBvdmVyZmxvdzpoaWRkZW47IHZpc2liaWxpdHk6aGlkZGVuOyI-UmVjeWNsZSB5b3VyIFBERiBnb2xkIGFuZCByZWR1Y2UgeW91ciB3b3JrbG9hZCB3aXRoIEFjcm9iYXQgUHJvLjwvZGl2Pg0KPHRhYmxlIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjRTRFNEU0IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojRTRFNEU0OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHJvbGU9InByZXNlbnRhdGlvbiI-DQo8dGJvZHk-DQo8dHI-DQo8dGQ-PHRhYmxlIGNsYXNzPSJmdWxsLXdpZHRoIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNjAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgcm9sZT0icHJlc2VudGF0aW9uIiBzdHlsZT0id2lkdGg6NjAwcHg7Ij4NCjx0Ym9keT4NCjx0cj4NCjx0ZCBiZ2NvbG9yPSIjZmZmZmZmIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjsiPjwhLS0gUE9EIDEgLS0-DQoNCjx0YWJsZSBjbGFzcz0iZW1haWwtd2lkdGgiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1MDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiByb2xlPSJwcmVzZW50YXRpb24iIHN0eWxlPSJ3aWR0aDo1MDBweDsiPg0KPHRib2R5Pg0KICA8dHI-DQogICAgPHRkIHN0eWxlPSJjb2xvcjojMkMyQzJDO2ZvbnQtZmFtaWx5OmFkb2JlLWNsZWFuLCBIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZjtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyNnB4O3BhZGRpbmctdG9wOiA0N3B4O3BhZGRpbmctYm90dG9tOiA0N3B4OyI-PHRhYmxlIGFsaWduPSJsZWZ0IiB3aWR0aD0iYXV0byIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHJvbGU9InByZXNlbnRhdGlvbiI-DQogICAgICAgIDx0Ym9keT4NCiAgICAgICAgICA8dHI-DQogICAgICAgICAgICA8dGQgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJjb2xvcjogIzAwMDAwMDsgZm9udC1mYW1pbHk6YWRvYmUtY2xlYW4sIEhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOyANCmZvbnQtc2l6ZToxNHB4OyBsaW5lLWhlaWdodDoyMHB4OyI-PGltZyBhbHQ9IkFkb2JlIEFjcm9iYXQgUHJvIiBzcmM9Imh0dHBzOi8vbGFuZGluZy5hZG9iZS5jb20vZGFtL2dsb2JhbC9pbWFnZXMvbG9ja3Vwcy9hY3JvYmF0LXByby5sb2dvLjc0Nzc3YS40NDR4NDAucG5nIiB3aWR0aD0iMjIyIiBoZWlnaHQ9ImF1dG8iIGJvcmRlcj0iMCIgaHNwYWNlPSIwIiB2c3BhY2U9IjAiIHN0eWxlPSJkaXNwbGF5OmJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcCIgLz48L3RkPg0KICAgICAgICAgIDwvdHI-DQogICAgICAgIDwvdGJvZHk-DQogICAgICA8L3RhYmxlPjwvdGQ-DQogIDwvdHI-DQogIDx0cj4NCiAgICA8dGQ-PHRhYmxlIGNsYXNzPSJmdWxsLXdpZHRoIiBhbGlnbj0ibGVmdCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHJvbGU9InByZXNlbnRhdGlvbiIgc3R5bGU9IndpZHRoOjUwMHB4OyI-DQogICAgICAgIDx0Ym9keT4NCiAgICAgICAgICA8dHIgc3R5bGU9ImZvbnQtc2l6ZTogMCAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDogMCAhaW1wb3J0YW50OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlICFpbXBvcnRhbnQ7Ij4NCiAgICAgICAgICAgIDx0ZCBzdHlsZT0iDQpjb2xvcjogIzAwMDAwMDsNCmZvbnQtZmFtaWx5Og0KYWRvYmUtY2xlYW4sIEhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6NjBweDsgbGluZS1oZWlnaHQ6NjRweDsNCnBhZGRpbmctdG9wOiAyMHB4Ow0KcGFkZGluZy1yaWdodDogMHB4Ow0KZm9udC13ZWlnaHQ6OTAwOyIgY2xhc3M9ImhlYWRlciI-RG9u4oCZdCByZXR5cGUg4oCUIGNvbnZlcnQuIDwvdGQ-DQogICAgICAgICAgPC90cj4NCiAgICAgICAgPC90Ym9keT4NCiAgICAgIDwvdGFibGU-PC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZCBzdHlsZT0iDQpjb2xvcjogIzAwMDAwMDsNCmZvbnQtZmFtaWx5Og0KYWRvYmUtY2xlYW4sIEhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOw0KZm9udC1zaXplOjE4cHg7DQpsaW5lLWhlaWdodDoyNnB4Ow0KcGFkZGluZy10b3A6MjBweDsNCmZvbnQtd2VpZ2h0OiA0MDA7DQoiIGNsYXNzPSJwYWRkaW5nLXIwIj5Eb27igJl0IHN0YXJ0IGZyb20gc2NyYXRjaC4gRWFzaWx5IGV4cG9ydCBQREZzIHRvIE1pY3Jvc29mdCBXb3JkLCBFeGNlbCwgb3IgUG93ZXJQb2ludCB3aXRoIEFkb2JlIEFjcm9iYXQgUHJvLiAgPC90ZD4NCiAgPC90cj4NCiAgPHRyPg0KICAgIDx0ZCBjbGFzcz0iZGFyay1zcGFjZSIgc3R5bGU9Ig0KY29sb3I6IzE0NzNFNjsNCmZvbnQtZmFtaWx5Og0KYWRvYmUtY2xlYW4sIEhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOw0KZm9udC1zaXplOjE1cHg7DQpsaW5lLWhlaWdodDo0MHB4Ow0KcGFkZGluZy10b3A6IDQwcHg7DQpwYWRkaW5nLWJvdHRvbTogNDBweDsNCiI-PCEtLVtpZiBndGUgbXNvIDldPjx2OnJvdW5kcmVjdA0KeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiDQp4bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiBzdHlsZT0iaGVpZ2h0OjQwcHg7IHYtdGV4dC1hbmNob3I6bWlkZGxlOyANCndpZHRoOjIwMHB4OyIgYXJjc2l6ZT0iNTAlIiBzdHJva2U9ImYiIGZpbGxjb2xvcj0iIzE0NzNFNiIgc3R5bGU9ImNvbG9yOiNmZmZmZmY7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NjAwIj4NCjx2OnRleHRib3ggc3R5bGU9Im1zby1maXQtc2hhcGUtdG8tdGV4dDp0Ij4NCjxjZW50ZXIgc3R5bGU9ImNvbG9yOiNmZmZmZmY7IGZvbnQtZmFtaWx5OmFkb2JlLWNsZWFuLCBIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBWZXJkYW5hLCBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1zaXplOjE2cHg7Ij48IVtlbmRpZl0tLT4gDQogICAgICA8YSBocmVmPSJodHRwczovL3QtaW5mby5tYWlsLmFkb2JlLmNvbS9yLz9pZD1oZTllZmUyMTgsZmUzZThiZWUsYzAwNTgwZGUmZT1jREU5U0VoS05GZzNNbG8mcz1TSTdGV2M1dkU5QTFkd25PZDRENk9DMFlJY2szY2lsbWlUOHlVY2NNdUI4IiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiNmZmY7bGluZS1oZWlnaHQ6NDBweDt0ZXh0LWFsaWduOmxlZnQiPjxkaXYgY2xhc3M9Im1rdG9UZXh0IiBhbGlnbj0ibGVmdCIgaWQ9IkFETzEwODcxLWUiIHN0eWxlPSJmb250LWZhbWlseTphZG9iZS1jbGVhbixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTZweDtmb250LXdlaWdodDo3MDA7YmFja2dyb3VuZC1jb2xvcjojMTQ3M2U2O2JvcmRlci1yYWRpdXM6NTBweDt3aWR0aDoyMDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZmZmO2xpbmUtaGVpZ2h0OjQwcHgiPjxzdHJvbmc-R2V0IHN0YXJ0ZWQ8L3N0cm9uZz48L2Rpdj4NCiAgICAgIDwvYT4gDQogICAgICA8IS0tW2lmIGd0ZSBtc28gOV0-PC9jZW50ZXI-DQo8cCBzdHlsZT0ibWFyZ2luOjA7IGZvbnQtc2l6ZTowOyBsaW5lLWhlaWdodDowOyI-DQo8bzpwDQp4bWxuczpvPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiPiANCjwvbzpwPg0KPC9wPg0KPC92OnRleHRib3g-DQo8L3Y6cm91bmRyZWN0PjwhW2VuZGlmXS0tPjwvdGQ-DQogIDwvdHI-DQo8L3Rib2R5Pg0KPC90YWJsZT48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBiZ2NvbG9yPSIjRkFEQTNBIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0ZBREEzQTsiPjwhLS0gUE9EIDEgLS0-IA0KDQo8IS0tIHBvZDEgbWFycXVlZSAtLT4NCg0KPHRhYmxlIGNsYXNzPSJmdWxsLXdpZHRoIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNjAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgcm9sZT0icHJlc2VudGF0aW9uIiBzdHlsZT0id2lkdGg6NjAwcHg7Ij4NCjx0Ym9keT4NCiAgPHRyPg0KICAgIDx0ZCBiZ2NvbG9yPSIjZmZmZmZmIiBzdHlsZT0iY29sb3I6IzAwMDAwMDtmb250LWZhbWlseTphZG9iZS1jbGVhbiwgSGVsdmV0aWNhIE5ldWUsIEhlbHZldGljYSwgVmVyZGFuYSwgQXJpYWwsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjIycHg7bGluZS1oZWlnaHQ6MjhweDtiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyI-PGEgaHJlZj0iaHR0cHM6Ly90LWluZm8ubWFpbC5hZG9iZS5jb20vci8_aWQ9aGU5ZWZlMjE4LGZlM2U4YmVlLGMwMDU4MGRmJmU9Y0RFOVNFaEtORmczTWxvJnM9a1FRWXAzaE1qNkNKLUtmazM1bzVGNndQZ2kxZ2dueFAwMHd2WGdrb1NYYyIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgY2xhc3M9Im1vYmlsZS1pbWFnZSIgYWx0PSJEb27igJl0IHJldHlwZSDigJQgY29udmVydC4iIHNyYz0iaHR0cHM6Ly9sYW5kaW5nLmFkb2JlLmNvbS9jb250ZW50L2RhbS9sYW5kaW5nL3VwbG9hZHMvMjAyNC9lbWVhL2Fzc2V0cy9pbWFnZXMvbWFycXVlZS82NzMyNGE2NjAwMTBiNDcxYjBjMjZmYTM2ZjM4MzhjMF9hcGFjX2VuX2Fjcm9iYXRfY29udmVyc2lvbl9kZXNrdG9wXzJ4LmpwZyIgc3Jjc2V0PSJodHRwczovL2xhbmRpbmcuYWRvYmUuY29tL2NvbnRlbnQvZGFtL2xhbmRpbmcvdXBsb2Fkcy8yMDI0L2VtZWEvYXNzZXRzL2ltYWdlcy9tYXJxdWVlLzY3MzI0YTY2MDAxMGI0NzFiMGMyNmZhMzZmMzgzOGMwX2FwYWNfZW5fYWNyb2JhdF9jb252ZXJzaW9uX21vYmlsZV8yeC5qcGcgNjIxdywNCmh0dHBzOi8vbGFuZGluZy5hZG9iZS5jb20vY29udGVudC9kYW0vbGFuZGluZy91cGxvYWRzLzIwMjQvZW1lYS9hc3NldHMvaW1hZ2VzL21hcnF1ZWUvNjczMjRhNjYwMDEwYjQ3MWIwYzI2ZmEzNmYzODM4YzBfYXBhY19lbl9hY3JvYmF0X2NvbnZlcnNpb25fZGVza3RvcF8yeC5qcGcgMTIwMHciIHNpemVzPSIobWF4LXdpZHRoOiA0ODBweCkgNTB2dyIgd2lkdGg9IjYwMCIgaGVpZ2h0PSJhdXRvIiBib3JkZXI9IjAiIGhzcGFjZT0iMCIgdnNwYWNlPSIwIiBzdHlsZT0iY29sb3I6IzAwMDAwMDsgZm9udC1mYW1pbHk6YWRvYmUtY2xlYW4sIEhlbHZldGljYSBOZXVlLCBIZWx2ZXRpY2EsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOyBmb250LXNpemU6MjJweDsgbGluZS1oZWlnaHQ6MjhweDsgZGlzcGxheTpibG9jazsgdmVydGljYWwtYWxpZ246dG9wOyIgLz48L2E-PC90ZD4NCiAgPC90cj4NCjwvdGJvZHk-DQo8L3RhYmxlPg0KDQo8IS0tIEVORCBwb2QxIG1hcnF1ZWUgLS0-IA0KPCEtLSBFTkQgcG9kMSAtLT48L3RkPg0KPC90cj4NCjwhLS0gUE9EIDIgLS0-IA0KDQo8IS0tIFBPRCAyIEVORFMgLS0-DQoNCjx0cj4NCjx0ZCBiZ2NvbG9yPSIjRjVGNUY1IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojRjVGNUY1Ij48dGFibGUgY2xhc3M9ImVtYWlsLXdpZHRoIiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNTAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgcm9sZT0icHJlc2VudGF0aW9uIiBzdHlsZT0id2lkdGg6NTAwcHgiPg0KPHRib2R5Pg0KICA8dHI-DQogICAgPHRkIHZhbGlnbj0idG9wIiBzdHlsZT0icGFkZGluZy10b3A6NTBweCI-PHRhYmxlIGNsYXNzPSJmdWxsLXdpZHRoIiBhbGlnbj0ibGVmdCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHJvbGU9InByZXNlbnRhdGlvbiIgd2lkdGg9IjUwMCIgc3R5bGU9IndpZHRoOjUwMHB4Ij4NCiAgICAgICAgPHRib2R5Pg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgc3R5bGU9ImNvbG9yOiNFQjEwMDA7Zm9udC1mYW1pbHk6YWRvYmUtY2xlYW4sSGVsdmV0aWNhIE5ldWUsSGVsdmV0aWNhLFZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4O3BhZGRpbmctYm90dG9tOjAiIGNsYXNzPSJibG9jayBwYWRiLTUwIj48aW1nIGFsdD0iQWRvYmUiIHNyYz0iaHR0cHM6Ly9sYW5kaW5nLmFkb2JlLmNvbS9jb250ZW50L2RhbS9sYW5kaW5nL3VwbG9hZHMvMjAyMy9lbWVhL2Fzc2V0cy9pbWFnZXMvbWFycXVlZS82NTI4ZTA2OTAwMGM0MGUyYzQ0MzQ2ZDJkNzI2NTg2Ml9hZG9iZV9sb2dvXzJ4LnBuZyIgd2lkdGg9IjgwIiBoZWlnaHQ9ImF1dG8iIGJvcmRlcj0iMCIgaHNwYWNlPSIwIiB2c3BhY2U9IjAiIHN0eWxlPSJjb2xvcjojRUIxMDAwO2ZvbnQtZmFtaWx5OmFkb2JlLWNsZWFuLEhlbHZldGljYSBOZXVlLEhlbHZldGljYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweDtkaXNwbGF5OmJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcCIgLz48L3RkPg0KICAgICAgICAgICAgPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0icmlnaHQiIHN0eWxlPSJjb2xvcjojRUIxMDAwO2ZvbnQtZmFtaWx5OmFkb2JlLWNsZWFuLEhlbHZldGljYSBOZXVlLEhlbHZldGljYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MThweDtwYWRkaW5nLWJvdHRvbTowO3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZy1sZWZ0OjE4MHB4IiBjbGFzcz0iYmxvY2siPg0KICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9InNvY2lhbCIgYWxpZ249InJpZ2h0IiB3aWR0aD0iYXV0byIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHJvbGU9InByZXNlbnRhdGlvbiIgc3R5bGU9ImZsb2F0OnJpZ2h0Ij4NCiAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgPHRyPg0KICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0iY29sb3I6Izk1OTU5NTtmb250LWZhbWlseTphZG9iZS1jbGVhbixIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIxcHg7cGFkZGluZy1ib3R0b206NDBweCI-PGEgaHJlZj0iaHR0cHM6Ly90LWluZm8ubWFpbC5hZG9iZS5jb20vci8_aWQ9aGU5ZWZlMjE4LGZlM2U4YmVlLGMwMDU4MGUwIiBhbGlhcz0iRmFjZWJvb2siIHRhcmdldD0iX2JsYW5rIj48aW1nIGFsdD0iRmFjZWJvb2siIHNyYz0iaHR0cHM6Ly9sYW5kaW5nLmFkb2JlLmNvbS9kYW0vZ2xvYmFsL2ltYWdlcy9zb2NpYWwvZmFjZWJvb2suOTU5NTk1LnBuZyIgd2lkdGg9IjkiIGhlaWdodD0iYXV0byIgYm9yZGVyPSIwIiBoc3BhY2U9IjAiIHZzcGFjZT0iMCIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246dG9wIj4gPC9pbWc-PC9hPjwvdGQ-DQogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIzNiIgc3R5bGU9IndpZHRoOjM2cHgiPjwvdGQ-DQogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJjb2xvcjojOTU5NTk1O2ZvbnQtZmFtaWx5OmFkb2JlLWNsZWFuLEhlbHZldGljYSBOZXVlLEhlbHZldGljYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjFweDtwYWRkaW5nLWJvdHRvbTo0MHB4Ij48YSBocmVmPSJodHRwczovL3QtaW5mby5tYWlsLmFkb2JlLmNvbS9yLz9pZD1oZTllZmUyMTgsZmUzZThiZWUsYzAwNTgwZTEiIGFsaWFzPSJMaW5rZWRJbiIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgYWx0PSJMaW5rZWRJbiIgc3JjPSJodHRwczovL2xhbmRpbmcuYWRvYmUuY29tL2RhbS9nbG9iYWwvaW1hZ2VzL3NvY2lhbC9saW5rZWRpbi45NTk1OTUucG5nIiB3aWR0aD0iMTgiIGhlaWdodD0iYXV0byIgYm9yZGVyPSIwIiBoc3BhY2U9IjAiIHZzcGFjZT0iMCIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7dmVydGljYWwtYWxpZ246dG9wIj4gPC9pbWc-PC9hPjwvdGQ-DQogICAgPHRkIHdpZHRoPSIzNiIgc3R5bGU9IndpZHRoOjM2cHgiPjwvdGQ-DQogICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJjb2xvcjojOTU5NTk1O2ZvbnQtZmFtaWx5OmFkb2JlLWNsZWFuLEhlbHZldGljYSBOZXVlLEhlbHZldGljYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjFweDtwYWRkaW5nLWJvdHRvbTo0MHB4O3BhZGRpbmctcmlnaHQ6MTBweCI-PGEgaHJlZj0iaHR0cHM6Ly90LWluZm8ubWFpbC5hZG9iZS5jb20vci8_aWQ9aGU5ZWZlMjE4LGZlM2U4YmVlLGMwMDU4MGUyIiBhbGlhcz0iVHdpdHRlciIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgYWx0PSJUd2l0dGVyIiBzcmM9Imh0dHBzOi8vbGFuZGluZy5hZG9iZS5jb20vZGFtL2dsb2JhbC9pbWFnZXMvc29jaWFsL3R3aXR0ZXIuOTU5NTk1LnBuZyIgd2lkdGg9IjE3IiBoZWlnaHQ9ImF1dG8iIGJvcmRlcj0iMCIgaHNwYWNlPSIwIiB2c3BhY2U9IjAiIHN0eWxlPSJkaXNwbGF5OmJsb2NrO3ZlcnRpY2FsLWFsaWduOnRvcCI-IDwvaW1nPjwvYT48L3RkPiAgICAgICAgICAgIA0KIDx0ZCB3aWR0aD0iMTAiIHN0eWxlPSJ3aWR0aDoxMHB4Ij48L3RkPiAgICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICA8L3RhYmxlPjwvdGQ-DQogICAgICAgICAgPC90cj4NCiAgICAgICAgPC90Ym9keT4NCiAgICAgIDwvdGFibGU-PC90ZD4NCiAgPC90cj4NCjwvdGJvZHk-DQo8L3RhYmxlPg0KPHRhYmxlIGNsYXNzPSJlbWFpbC13aWR0aCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHJvbGU9InByZXNlbnRhdGlvbiIgc3R5bGU9IndpZHRoOjUwMHB4Ij4NCjx0Ym9keT4NCiAgPHRyPg0KICAgIDx0ZCBjbGFzcz0ibGVnYWwiIHN0eWxlPSJjb2xvcjojOTU5NTk1O2ZvbnQtZmFtaWx5OmFkb2JlLWNsZWFuLEhlbHZldGljYSBOZXVlLEhlbHZldGljYSxWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjExcHg7bGluZS1oZWlnaHQ6MThweDtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjEwMHB4Ij5BZG9iZSBzZXJ2aWNlcywgbGlrZSBBZG9iZSBEb2N1bWVudCBDbG91ZCwgYXJlIGF2YWlsYWJsZSBvbmx5IHRvIHVzZXJzIDEzIGFuZCBvbGRlci4gVXNlIG9mIEFkb2JlIHNlcnZpY2VzIGFuZCBhcHBsaWNhdGlvbnMgcmVxdWlyZXMgYWdyZWVtZW50IHdpdGggdGhlIGFwcGxpY2FibGUgPGEgaHJlZj0iaHR0cHM6Ly90LWluZm8ubWFpbC5hZG9iZS5jb20vci8_aWQ9aGU5ZWZlMjE4LGZlM2U4YmVlLGMwMDU4MGUzIiBhbGlhcz0iRk9PVEVSIC0gVGVybXMiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6Izk1OTU5NTsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUiPlRlcm1zIG9mIFVzZTwvYT4gYW5kIHRoZSA8YSBocmVmPSJodHRwczovL3QtaW5mby5tYWlsLmFkb2JlLmNvbS9yLz9pZD1oZTllZmUyMTgsZmUzZThiZWUsYzAwNTgwZTYiIGFsaWFzPSJGT09URVIgLSBQcml2YWN5IFBvbGljeSIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjojOTU5NTk1O3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIj5BZG9iZSBQcml2YWN5IFBvbGljeTwvYT4uDQogICAgICA8cCBpZD0icmVnX2Zvb3QiPkFkb2JlLCB0aGUgQWRvYmUgbG9nbywgQ3JlYXRpdmUgQ2xvdWQsIHRoZSBDcmVhdGl2ZSBDbG91ZCBsb2dvLCBhbmQgRG9jdW1lbnQgQ2xvdWQgYXJlIGVpdGhlciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb3IgdHJhZGVtYXJrcyBvZiBBZG9iZSBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQvb3Igb3RoZXIgY291bnRyaWVzLjxiciAvPjxiciAvPg0KICBUaGlzIGlzIG5vdCBhIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBhbGwgQWRvYmUgdHJhZGVtYXJrcy4gRm9yIGEgZnVsbCBsaXN0LCByZWZlciB0byB0aGUgPGEgaHJlZj0iaHR0cHM6Ly90LWluZm8ubWFpbC5hZG9iZS5jb20vci8_aWQ9aGU5ZWZlMjE4LGZlM2U4YmVlLGMwMDU4MGU0IiBhbGlhcz0iRk9PVEVSIC0gVHJhZGVtYXJrIEd1aWRlbGluZXMiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6Izk1OTU5NTsiPkFkb2JlIFRyYWRlbWFyayBHdWlkZWxpbmVzPC9hPi4gQWxsIG90aGVyIHRyYWRlbWFya3MgYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy48YnIgLz48YnIgLz4NCiAgVGhpcyBpcyBhIG1hcmtldGluZyBlbWFpbCBmcm9tIEFkb2JlIFN5c3RlbXMgU29mdHdhcmUgSXJlbGFuZCBMaW1pdGVkLCA04oCRNiZuYnNwO1JpdmVyd2FsaywgQ2l0eXdlc3QgQnVzaW5lc3MgUGFyaywgRHVibGluJm5ic3A7MjQsIElyZWxhbmQuDQogICA8YSBzdHlsZT0iVEVYVC1ERUNPUkFUSU9OOiB1bmRlcmxpbmU7IENPTE9SOiAjYTFhMWExIiBocmVmPSJodHRwczovL3QtaW5mby5tYWlsLmFkb2JlLmNvbS9yLz9pZD1oZTllZmUyMTgsZmUzZThiZWUsYzAwNTgwZTUmZT1jREU5SlRRd1QxYzBjbkk0VTBkak5qSk9UVVZWYlhkaFNUSlNkSE5rVVdsbGNFeDVNVWRtVGtRbE1rWnVTbFpuVjFoSkpUTkVKbkF5UFNac2IyTTlhVzRtY0RNOU1UayZzPVYzMThHRXRzWDg1blR3N0l6eVlPNEtQS2FwaGVUVGQ5eDlpMzJPUTN3SmMiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0ib3B0X291dCIgYWxpYXM9IlVuc3Vic2NyaWJlIiBfdHlwZT0ib3B0b3V0IiBfbGFiZWw9Ik9wdC1vdXQgbGluayI-Q2xpY2smbmJzcDtoZXJlPC9BPiAgdG8gdW5zdWJzY3JpYmUuIFBsZWFzZSByZXZpZXcgdGhlIDxhIGhyZWY9Imh0dHBzOi8vdC1pbmZvLm1haWwuYWRvYmUuY29tL3IvP2lkPWhlOWVmZTIxOCxmZTNlOGJlZSxjMDA1ODBlNyIgYWxpYXM9IkZPT1RFUiAtIFByaXZhY3kiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6Izk1OTU5NTsiPkFkb2JlIFByaXZhY3kgUG9saWN5PC9hPi48YnIgLz48YnIgLz4NCiAgVG8gZW5zdXJlIGVtYWlsIGRlbGl2ZXJ5LCBhZGQgPGEgaHJlZj0iaHR0cHM6Ly90LWluZm8ubWFpbC5hZG9iZS5jb20vci8_aWQ9aGU5ZWZlMjE4LGZlM2U4YmVlLGMwMDU4MGU4IiBhbGlhcz0iQWRkIHRvIGFkZHJlc3MgYm9vayAtIG1haWxAbWFpbC5hZG9iZS5jb20iIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6Izk1OTU5NTsiPm1haWxAbWFpbC5hZG9iZS5jb208L2E-IHRvIHlvdXIgYWRkcmVzcyBib29rLCBjb250YWN0cywgb3Igc2FmZSBzZW5kZXImbmJzcDtsaXN0LjxiciAvPjxiciAvPjwvcD4gPHNwYW4-DQogICAgICANCiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdC1pbmZvLm1haWwuYWRvYmUuY29tL3IvP2lkPWhlOWVmZTIxOCxmZTNlOGJlZSxjMDA1ODBlOSZlPWNERTlKVFF3YmxkelEyUndSRkk0VVRsTGRsTnVZVzVESlRKR2JuUnJVVU5hY0ZsellqTlpSa3RSZGtGUmRXNWpNelZqSlRORSZzPWlQdmMzX0pvbGdyY2RmUTJiZFRpOEcwQTVSaXp1N3YydEo1MkdVTl8xd00iIF9sYWJlbD0iTWlycm9yIFBhZ2UiIF90eXBlPSJtaXJyb3JQYWdlIiBhbGlhcz0iUmVhZCBvbmxpbmUiIHRhcmdldD0iX2JsYW5rIiBzdHlsZT0iY29sb3I6Izk1OTU5NTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIj5SZWFkIG9ubGluZTwvYT4NCiAgICAgIA0KICAgICAgPC9zcGFuPjwvdGQ-DQogIDwvdHI-DQo8L3Rib2R5Pg0KPC90YWJsZT48L3RkPg0KPC90cj4NCjwvdGJvZHk-DQo8L3RhYmxlPjwvdGQ-DQo8L3RyPg0KPC90Ym9keT4NCjwvdGFibGU-DQo8L2JvZHk-DQo8L2h0bWw-DQo8aW1nIGhlaWdodD0nMCcgd2lkdGg9JzAnIGFsdD0nJyBzcmM9J2h0dHBzOi8vdC1pbmZvLm1haWwuYWRvYmUuY29tL3IvP2lkPWhlOWVmZTIxOCxmZTNlOGJlZSwxJy8-PGltZyBoZWlnaHQ9JzAnIHdpZHRoPScwJyBhbHQ9Jycgc3JjPSdodHRwczovL2Fkb2JlLmRlbWRleC5uZXQvZXZlbnQ_Y19zeW5jcGxhY2VtZW50PWVtYWlsJmRfY2lkPTgxMyUwMTFGQ0Y2OUVCNjE1NUExRjAwQTQ5NUNCNCcvPg0K" + } + } + ] + }, + "sizeEstimate": 23490, + "historyId": "526904", + "internalDate": "1732487083000" +} \ No newline at end of file diff --git a/goog/controllers/gmail/json/messages/raw_message_10_1935e92672e67f22_20241126.json b/goog/controllers/gmail/json/messages/raw_message_10_1935e92672e67f22_20241126.json new file mode 100644 index 0000000..4adaa68 --- /dev/null +++ b/goog/controllers/gmail/json/messages/raw_message_10_1935e92672e67f22_20241126.json @@ -0,0 +1,183 @@ +{ + "id": "1935e92672e67f22", + "threadId": "1935e92672e67f22", + "labelIds": [ + "UNREAD", + "CATEGORY_SOCIAL", + "INBOX" + ], + "snippet": "Here's what's happened since you were last on LinkedIn \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f \u034f", + "payload": { + "partId": "", + "mimeType": "multipart/alternative", + "filename": "", + "headers": [ + { + "name": "Delivered-To", + "value": "pskhushal@gmail.com" + }, + { + "name": "Received", + "value": "by 2002:a5d:4205:0:b0:382:44a8:2102 with SMTP id n5csp489491wrq; Sun, 24 Nov 2024 06:27:53 -0800 (PST)" + }, + { + "name": "X-Google-Smtp-Source", + "value": "AGHT+IEcS3t6I5EYTeXutTWCaj0fEAX/BFkSa6Xaw/nMo6+pyLJJtvz7S/MBZv44qMdTc6JVxq+f" + }, + { + "name": "X-Received", + "value": "by 2002:a05:6602:13c8:b0:83e:6232:11a with SMTP id ca18e2360f4ac-83ecdcaa81emr914357339f.7.1732458473211; Sun, 24 Nov 2024 06:27:53 -0800 (PST)" + }, + { + "name": "ARC-Seal", + "value": "i=1; a=rsa-sha256; t=1732458473; cv=none; d=google.com; s=arc-20240605; b=hrGVGOdrsnWXBSb3+YUlgbJwXMCirSm5AHNJ8GbUwyw7Bz6C2fOxPZw1GlXVDn0okR OXBflsE0WgRxGsJTDGO56d9MDdZRW1VTE+O3bquEXcbN1D19PrxCGxNa4rFZIlVhpGqz WqCvyOK3NlpyyILFmKYAQWjBRY/OOlDC9AlDshnhzDB5Vg1AoDlywRK/peISQ/OPbnwt klOd3kzKIRKsQNDB6CqVG0Ag7EhAZHGYTvc2HmiuPg9FPOePJTWXJ1h2zJKGTAR+Ouzi SA8IWMA7MknUNK/8RMRYowg967Y3kub0ABo89lyuUZMeZRCsWchxvKDcBmR8Z4o1W29V irKQ==" + }, + { + "name": "ARC-Message-Signature", + "value": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=require-recipient-valid-since:feedback-id:list-unsubscribe-post :list-unsubscribe:date:to:mime-version:subject:message-id:from :dkim-signature:dkim-signature; bh=nySe/MiYyd+StYNNKhFQvs+nBTs6HguWRtf5H+LonXg=; fh=kl8GOc3xH49wmCQ5W74DCe5pDhPNnAeFoI4mGP4/wX4=; b=MOuaP5zl+0G9/BbA/whMa6POlvCfiPyZFMqwLKvGoiOB8nBXoMnqdomtKf/QzkWDBg sTFkP+4nEfEbokkWOWwgee+e+5lDg/BDJPkS/Pwfm5jkzCxxOVSAJbsd5Ad7zS9hcowa BnZE/5W5Z7FfdQh+zZbRMRNA8Mmv/U7tBT1a0fNtm1LmKAb2QMIJtRXfwbLu+XNjCXHY p2lPn6YM+mnGmcFvW4QpTZERJ2GHEVZdPXZpf7SW5qkUFEQGOKlrSaoZHS+xAuC5hoV3 kn9lAQ8YaRKk3tgtCjDGr0d5lR9k5YQA6stK2iJS0xqVfn7xlIe2OYdiL3KtpxExoIni yDaQ==; dara=google.com" + }, + { + "name": "ARC-Authentication-Results", + "value": "i=1; mx.google.com; dkim=pass header.i=@mailc.linkedin.com header.s=d2048-202308-0c header.b=Adk2r7bx; dkim=pass header.i=@linkedin.com header.s=d2048-202308-00 header.b=M94Hf2OM; spf=pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo17qlc4r172gpk4@bounce.linkedin.com designates 108.174.3.172 as permitted sender) smtp.mailfrom=m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo17qlc4r172gpk4@bounce.linkedin.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=linkedin.com" + }, + { + "name": "Return-Path", + "value": "" + }, + { + "name": "Received", + "value": "from mailc-bd.linkedin.com (mailc-bd.linkedin.com. [108.174.3.172]) by mx.google.com with ESMTPS id ca18e2360f4ac-83ecd39e071si357074239f.47.2024.11.24.06.27.52 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 24 Nov 2024 06:27:53 -0800 (PST)" + }, + { + "name": "Received-SPF", + "value": "pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo17qlc4r172gpk4@bounce.linkedin.com designates 108.174.3.172 as permitted sender) client-ip=108.174.3.172;" + }, + { + "name": "Authentication-Results", + "value": "mx.google.com; dkim=pass header.i=@mailc.linkedin.com header.s=d2048-202308-0c header.b=Adk2r7bx; dkim=pass header.i=@linkedin.com header.s=d2048-202308-00 header.b=M94Hf2OM; spf=pass (google.com: domain of m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo17qlc4r172gpk4@bounce.linkedin.com designates 108.174.3.172 as permitted sender) smtp.mailfrom=m-7rn15dcklyh67ma8mwwua3ozups21yzaxmcrqxdlmxexo17qlc4r172gpk4@bounce.linkedin.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=linkedin.com" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailc.linkedin.com; s=d2048-202308-0c; t=1732458470; bh=nySe/MiYyd+StYNNKhFQvs+nBTs6HguWRtf5H+LonXg=; h=From:Subject:MIME-Version:Content-Type:To:Date:X-LinkedIn-Class:\t X-LinkedIn-Template:X-LinkedIn-fbl; b=Adk2r7bx1vZ9JpUoh2QYgUmH2WTHWP8wXudTdb0M060/7XwbzuiqBRKyhy6zEyWkq\t AlFD7cTp2ya5xg8Ouev9TmtYownVpWgqyGvYkRBqkHczCA49ozHxHUo5qrfgU8DKI0\t V2fZkhgIM/AEiZERzuSvhUnBRo7nBWBjQg1vTl7kk5NMphCn1sxCq1qIyLUDLDp60D\t DPVmFR75bri3sECOzbu1K/EZnspoLLV/spGKLgb9S/FVzJMRmi2oRi0l8uz0jH8fBo\t 17VWd6k3rTpFeGVNPrSK3lWdOSDf2i2QQA5oK37vxvczzz/SDWZnx1LTHVInRjLlJm\t nEf8cH5ewVn+A==" + }, + { + "name": "DKIM-Signature", + "value": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linkedin.com; s=d2048-202308-00; t=1732458470; bh=nySe/MiYyd+StYNNKhFQvs+nBTs6HguWRtf5H+LonXg=; h=From:Subject:MIME-Version:Content-Type:To:Date:X-LinkedIn-Class:\t X-LinkedIn-Template:X-LinkedIn-fbl; b=M94Hf2OMaPkAxHXA/zOhOXLZzzHQVibZfX4W1pWVaf+eoUen1hl1rvFQWA0YEjIzz\t 9Xv+x9YT0Z5+yRma/Sq9Ys/Mh8AZi/a4UI4439oLy8RP1IXiMqr8idcWVJzhMJboi1\t VsaVxftwyt79bfN6E9DGKYGObpulcq/LYFzY64usl1/VXJg6bySmaHaFtoFDVLXqe0\t o8rQXswkdDJHZtoMur05q1Fal4PXbnGe6G7f/Roq7WALaPXldYeiyvPyGmkABQItTA\t w3MEAf7iDcTptv3SOY2vmAjX4Tq7lbG66eO/stqeTaR3fSgx5gqYC1sk9rjd4Ua5bQ\t FRtdrqLGbTcJw==" + }, + { + "name": "From", + "value": "LinkedIn " + }, + { + "name": "Message-ID", + "value": "<936622671.17289057.1732458470082@lor1-app81838.prod.linkedin.com>" + }, + { + "name": "Subject", + "value": "Using AI at work? Take note of these\u2026" + }, + { + "name": "MIME-Version", + "value": "1.0" + }, + { + "name": "Content-Type", + "value": "multipart/alternative; boundary=\"----=_Part_17289055_909100289.1732458470080\"" + }, + { + "name": "To", + "value": "Khushal PS " + }, + { + "name": "Date", + "value": "Sun, 24 Nov 2024 14:27:50 +0000 (UTC)" + }, + { + "name": "X-LinkedIn-Class", + "value": "NETWORKDIGEST" + }, + { + "name": "X-LinkedIn-Template", + "value": "email_notification_digest_01" + }, + { + "name": "X-LinkedIn-fbl", + "value": "m2-aszz463uxzxisdhpefpvpzxet5cq38t8k08yi4636s5ds5vlxlpz3fpxz5rw4m9h9czfj84szwhzrzycmbllc5jq2ky0sgxcabi7n6" + }, + { + "name": "X-LinkedIn-Id", + "value": "j7zu7i-m3voz2l3-sd" + }, + { + "name": "List-Unsubscribe", + "value": "" + }, + { + "name": "List-Unsubscribe-Post", + "value": "List-Unsubscribe=One-Click" + }, + { + "name": "Feedback-ID", + "value": "email_notification_digest_01:linkedin" + }, + { + "name": "Require-Recipient-Valid-Since", + "value": "pskhushal@gmail.com; Mon, 24 Jul 2023 06:55:23 +0000" + } + ], + "body": { + "size": 0 + }, + "parts": [ + { + "partId": "0", + "mimeType": "text/plain", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/plain;charset=UTF-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + }, + { + "name": "Content-ID", + "value": "text-body" + } + ], + "body": { + "size": 2660, + "data": "VXNpbmcgQUkgYXQgd29yaz8gVGFrZSBub3RlIG9mIHRoZXNlIGlzc3Vlcy4NClNlZSBuZXdzbGV0dGVyOmh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvbmV3cy82MjE3MjIwP2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyRk1MJTJCTXJrQVJkeVBzJTJGZlZOSG1NNnclM0QlM0QmbWlkVG9rZW49QVFGUGEyM056bzE4RlEmbWlkU2lnPTFPUXN1S3hSQjNCSHcxJnRyaz1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1ub3RpZmljYXRpb25fZGlnZXN0LTAtRURJVE9SSUFMX0JMQVpFX0lOQVBQJnRya0VtYWlsPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLW5vdGlmaWNhdGlvbl9kaWdlc3QtMC1FRElUT1JJQUxfQkxBWkVfSU5BUFAtbnVsbC1qN3p1N2l-bTN2b3oybDN-c2QtbnVsbC1udWxsJmVpZD1qN3p1N2ktbTN2b3oybDMtc2Qmb3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqQTRZV00yWkRRME56a3dZV1E0T1RaaE4ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TVRabU1XUmhaREkzT0dZeVpqZGlNVGRqTXpVNFptTmpZVE0yTmpKaE1HUXlOekF5TkRJeFkySXdOakUyWW1Ka0xERXNNUSUzRCUzRA0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KVGhpcyBlbWFpbCB3YXMgaW50ZW5kZWQgZm9yIEtodXNoYWwgUFMgKC0tKQ0KTGVhcm4gd2h5IHdlIGluY2x1ZGVkIHRoaXM6IGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9oZWxwL2xpbmtlZGluL2Fuc3dlci80Nzg4P2xhbmc9ZW4mbGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxJTNCJTJGTUwlMkJNcmtBUmR5UHMlMkZmVk5IbU02dyUzRCUzRCZtaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZtaWRTaWc9MU9Rc3VLeFJCM0JIdzEmdHJrPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLVNlY3VyaXR5SGVscC0wLXRleHRmb290ZXJnbGltbWVyJnRya0VtYWlsPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLVNlY3VyaXR5SGVscC0wLXRleHRmb290ZXJnbGltbWVyLW51bGwtajd6dTdpfm0zdm96MmwzfnNkLW51bGwtbnVsbCZlaWQ9ajd6dTdpLW0zdm96MmwzLXNkJm90cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakE0WVdNMlpEUTBOemt3WVdRNE9UWmhOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU1UWm1NV1JoWkRJM09HWXlaamRpTVRkak16VTRabU5qWVRNMk5qSmhNR1F5TnpBeU5ESXhZMkl3TmpFMlltSmtMREVzTVElM0QlM0QNCllvdSBhcmUgcmVjZWl2aW5nIExpbmtlZEluIG5vdGlmaWNhdGlvbiBlbWFpbHMuDQoNClVuc3Vic2NyaWJlOiBodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9wc2V0dGluZ3MvZW1haWwtdW5zdWJzY3JpYmU_bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxJTNCJTJGTUwlMkJNcmtBUmR5UHMlMkZmVk5IbU02dyUzRCUzRCZtaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZtaWRTaWc9MU9Rc3VLeFJCM0JIdzEmdHJrPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLXVuc3Vic2NyaWJlLTAtdGV4dGZvb3RlcmdsaW1tZXImdHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtdW5zdWJzY3JpYmUtMC10ZXh0Zm9vdGVyZ2xpbW1lci1udWxsLWo3enU3aX5tM3ZvejJsM35zZC1udWxsLW51bGwmZWlkPWo3enU3aS1tM3ZvejJsMy1zZCZsb2lkPUFRRzdEcE1jQm1KQmVnQUFBWk5la2xmZHk1UmlsbVhRUzBMWkx5UUZjZGhNU1E4emR3V1I3b0NaUUU4YzZkNjRMbmRxZFFUZXZMb3RERFByallETUVLeTZMMkZwSjNxcTB1U2ctblkNCkhlbHA6IGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9oZWxwL2xpbmtlZGluL2Fuc3dlci82Nz9sYW5nPWVuJmxpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyRk1MJTJCTXJrQVJkeVBzJTJGZlZOSG1NNnclM0QlM0QmbWlkVG9rZW49QVFGUGEyM056bzE4RlEmbWlkU2lnPTFPUXN1S3hSQjNCSHcxJnRyaz1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1oZWxwLTAtdGV4dGZvb3RlcmdsaW1tZXImdHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVscC0wLXRleHRmb290ZXJnbGltbWVyLW51bGwtajd6dTdpfm0zdm96MmwzfnNkLW51bGwtbnVsbCZlaWQ9ajd6dTdpLW0zdm96MmwzLXNkJm90cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakE0WVdNMlpEUTBOemt3WVdRNE9UWmhOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU1UWm1NV1JoWkRJM09HWXlaamRpTVRkak16VTRabU5qWVRNMk5qSmhNR1F5TnpBeU5ESXhZMkl3TmpFMlltSmtMREVzTVElM0QlM0QNCg0KwqkgMjAyNCBMaW5rZWRJbiBDb3Jwb3JhdGlvbiwgMXp3bmowMDAgV2VzdCBNYXVkZSBBdmVudWUsIFN1bm55dmFsZSwgQ0EgOTQwODUuDQpMaW5rZWRJbiBhbmQgdGhlIExpbmtlZEluIGxvZ28gYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBMaW5rZWRJbi4=" + } + }, + { + "partId": "1", + "mimeType": "text/html", + "filename": "", + "headers": [ + { + "name": "Content-Type", + "value": "text/html;charset=UTF-8" + }, + { + "name": "Content-Transfer-Encoding", + "value": "quoted-printable" + }, + { + "name": "Content-ID", + "value": "html-body" + } + ], + "body": { + "size": 22763, + "data": "PGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGxhbmc9ImVuIiB4bWw6bGFuZz0iZW4iPiA8aGVhZD4gPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCI-IDxtZXRhIG5hbWU9IkhhbmRoZWxkRnJpZW5kbHkiIGNvbnRlbnQ9InRydWUiPiA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoOyBpbml0aWFsLXNjYWxlPTAuNjY2NjY3OyB1c2VyLXNjYWxhYmxlPTAiPiA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoIj4gPHRpdGxlPjwvdGl0bGU-IDxzdHlsZT4NCiAgICAgICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MTJweCkgeyAubWVyY2Fkby1jb250YWluZXIgeyB3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB9IH0NCiAgICAgICAgICA8L3N0eWxlPiA8c3R5bGU-DQogICAgICAgICAgICBAbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHsgLmlubGluZS1idXR0b24sIC5pbmxpbmUtYnV0dG9uIHRhYmxlIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9DQogICAgICAgICAgICAuZnVsbC13aWR0aC1idXR0b24sIC5mdWxsLXdpZHRoLWJ1dHRvbiB0YWJsZSB7IGRpc3BsYXk6IHRhYmxlICFpbXBvcnRhbnQ7IH0gfQ0KICAgICAgICAgIDwvc3R5bGU-IDxzdHlsZT5ib2R5IHtmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgc3lzdGVtLXVpLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgJ0hlbHZldGljYSBOZXVlJywNCiAgICAgICAgICAgICdGaXJhIFNhbnMnLCBVYnVudHUsIE94eWdlbiwgJ094eWdlbiBTYW5zJywgQ2FudGFyZWxsLCAnRHJvaWQgU2FucycsICdBcHBsZSBDb2xvciBFbW9qaScsICdTZWdvZSBVSSBFbW9qaScsDQogICAgICAgICAgICAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJywgJ0x1Y2lkYSBHcmFuZGUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO308L3N0eWxlPiA8IS0tW2lmIG1zb10-PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gPC9zdHlsZT48IVtlbmRpZl0tLT4gPCEtLVtpZiBJRV0-PHN0eWxlIHR5cGU9InRleHQvY3NzIj4gPC9zdHlsZT48IVtlbmRpZl0tLT4gPC9oZWFkPiA8Ym9keSBkaXI9Imx0ciIgY2xhc3M9ImZvbnQtc2FucyBiZy1jb2xvci1iYWNrZ3JvdW5kLWNhbnZhcyB3LWZ1bGwgbS0wIHAtMCBwdC0xIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbWFyZ2luOiAwcHg7IHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmMmYwOyBwYWRkaW5nOiAwcHg7IHBhZGRpbmctdG9wOiA4cHg7IGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgUm9ib3RvLCAnSGVsdmV0aWNhIE5ldWUnLCAnRmlyYSBTYW5zJywgVWJ1bnR1LCBPeHlnZW4sICdPeHlnZW4gU2FucycsIENhbnRhcmVsbCwgJ0Ryb2lkIFNhbnMnLCAnQXBwbGUgQ29sb3IgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgRW1vamknLCAnU2Vnb2UgVUkgU3ltYm9sJywgJ0x1Y2lkYSBHcmFuZGUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyI-IDxkaXYgY2xhc3M9ImgtMCBvcGFjaXR5LTAgdGV4dC10cmFuc3BhcmVudCBpbnZpc2libGUgb3ZlcmZsb3ctaGlkZGVuIHctMCBtYXgtaC1bMF0iIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW47IGhlaWdodDogMHB4OyBtYXgtaGVpZ2h0OiAwOyB3aWR0aDogMHB4OyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAwOyBtc28taGlkZTogYWxsOyIgZGF0YS1lbWFpbC1wcmVoZWFkZXI9InRydWUiPkhlcmXigJlzIHdoYXTigJlzIGhhcHBlbmVkIHNpbmNlIHlvdSB3ZXJlIGxhc3Qgb24gTGlua2VkSW48L2Rpdj4gPGRpdiBjbGFzcz0iaC0wIG9wYWNpdHktMCB0ZXh0LXRyYW5zcGFyZW50IGludmlzaWJsZSBvdmVyZmxvdy1oaWRkZW4gdy0wIG1heC1oLVswXSIgc3R5bGU9InZpc2liaWxpdHk6IGhpZGRlbjsgaGVpZ2h0OiAwcHg7IG1heC1oZWlnaHQ6IDA7IHdpZHRoOiAwcHg7IG92ZXJmbG93OiBoaWRkZW47IG9wYWNpdHk6IDA7IG1zby1oaWRlOiBhbGw7Ij4gzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgIM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqAgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoM2PwqDNj8KgzY_CoCA8L2Rpdj4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iNTEyIiBhbGlnbj0iY2VudGVyIiBjbGFzcz0ibWVyY2Fkby1jb250YWluZXIgdy1bNTEycHhdIG1heC13LVs1MTJweF0gbXgtYXV0byBteS0wIHAtMCBiZy1jb2xvci1iYWNrZ3JvdW5kLWNvbnRhaW5lciIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW4tbGVmdDogYXV0bzsgbWFyZ2luLXJpZ2h0OiBhdXRvOyBtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDsgd2lkdGg6IDUxMnB4OyBtYXgtd2lkdGg6IDUxMnB4OyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyBwYWRkaW5nOiAwcHg7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0idGV4dC1jZW50ZXIgcC0zIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmc6IDI0cHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0ibWluLXctZnVsbCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtaW4td2lkdGg6IDEwMCU7Ij4gPHRib2R5PiA8dHI-IDx0ZCBhbGlnbj0ibGVmdCIgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkLz9saXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDElM0IlMkZNTCUyQk1ya0FSZHlQcyUyRmZWTkhtTTZ3JTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTFPUXN1S3hSQjNCSHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVhZGVyLTAtaG9tZV9nbGltbWVyX2R5bmFtaWNfYmFkZ2luZ19oaWdoX2RwaSZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVhZGVyLTAtaG9tZV9nbGltbWVyX2R5bmFtaWNfYmFkZ2luZ19oaWdoX2RwaS1udWxsLWo3enU3aX5tM3ZvejJsM35zZC1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN2b3oybDMtc2QmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakE0WVdNMlpEUTBOemt3WVdRNE9UWmhOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU1UWm1NV1JoWkRJM09HWXlaamRpTVRkak16VTRabU5qWVRNMk5qSmhNR1F5TnpBeU5ESXhZMkl3TmpFMlltSmtMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idy1bODRweF0iIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgd2lkdGg6IDg0cHg7Ij4gPGltZyBjbGFzcz0iaC1bMzdweF0gdy1bMTAxcHhdIiBhbHQ9IkxpbmtlZEluIiBzcmM9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2Rtcy9sb2dvL3YyP2JhZGdlVGhlbWU9bWVyY2FkbyZhbXA7bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxJTNCJTJGTUwlMkJNcmtBUmR5UHMlMkZmVk5IbU02dyUzRCUzRCZhbXA7bWlkU2lnPTFPUXN1S3hSQjNCSHcxJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtbnVsbC0wLWNvbW1zJTdFYmFkZ2luZyU3RWR5bmFtaWMlN0VnbGltbWVyJTdFdjItbnVsbC1qN3p1N2klN0VtM3ZvejJsMyU3RXNkLW51bGwtbnVsbCZhbXA7dHJrPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLW51bGwtMC1jb21tcyU3RWJhZGdpbmclN0VkeW5hbWljJTdFZ2xpbW1lciU3RXYyJmFtcDtfc2lnPTBxWDVWZ3BaNTNCSHcxIiBkYXRhLXRlc3QtaGVhZGVyLWR5bmFtaWMtYmFkZ2luZy1pbWctaGlnaC1kcGkgc3R5bGU9Im91dGxpbmU6IG5vbmU7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgaGVpZ2h0OiAzN3B4OyB3aWR0aDogMTAxcHg7IiB3aWR0aD0iMTAxIiBoZWlnaHQ9IjM3Ij4gPC9hPiA8L3RkPiA8dGQgdmFsaWduPSJtaWRkbGUiIGFsaWduPSJyaWdodCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGRhdGEtdGVzdC1oZWFkZXItcHJvZmlsZSBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPHRib2R5PiA8dHI-IDx0ZCBhbGlnbj0icmlnaHQiIHZhbGlnbj0ibWlkZGxlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly9pbi5saW5rZWRpbi5jb20vY29tbS9pbi9raHVzaGFsLXBzLTdhNjJiNzI4NT9saXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDElM0IlMkZNTCUyQk1ya0FSZHlQcyUyRmZWTkhtTTZ3JTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTFPUXN1S3hSQjNCSHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVhZGVyLTAtcHJvZmlsZV9nbGltbWVyJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1oZWFkZXItMC1wcm9maWxlX2dsaW1tZXItbnVsbC1qN3p1N2l-bTN2b3oybDN-c2QtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zdm96MmwzLXNkJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpBNFlXTTJaRFEwTnprd1lXUTRPVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVNVFptTVdSaFpESTNPR1l5WmpkaU1UZGpNelU0Wm1OallUTTJOakpoTUdReU56QXlOREl4WTJJd05qRTJZbUprTERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxzcGFuIGNsYXNzPSJuby11bmRlcmxpbmUgdGV4dC1zeXN0ZW0tZ3JheS05MCIgc3R5bGU9ImNvbG9yOiAjMjgyODI4OyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPktodXNoYWwgUFM8L3NwYW4-IDwvYT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPC90Ym9keT4gPC90YWJsZT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InB4LTMgcGItMyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWxlZnQ6IDI0cHg7IHBhZGRpbmctcmlnaHQ6IDI0cHg7IHBhZGRpbmctYm90dG9tOiAyNHB4OyI-IDxkaXY-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJweC0xICIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWxlZnQ6IDhweDsgcGFkZGluZy1yaWdodDogOHB4OyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGNsYXNzIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIGNsYXNzPSJwYi0yIHRleHQtY2VudGVyIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctYm90dG9tOiAxNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iYXV0byIgYWxpZ249ImNlbnRlciIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9ImlubGluZS1ibG9jayB3LTggaC04IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiA2NHB4OyB3aWR0aDogNjRweDsiIHdpZHRoPSI2NCIgaGVpZ2h0PSI2NCI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvbmV3cy82MjE3MjIwP2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyRk1MJTJCTXJrQVJkeVBzJTJGZlZOSG1NNnclM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MU9Rc3VLeFJCM0JIdzEmYW1wO3Ryaz1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1lbnRpdHlfcGlsZS0wLUVESVRPUklBTF9CTEFaRV9JTkFQUF8wJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1lbnRpdHlfcGlsZS0wLUVESVRPUklBTF9CTEFaRV9JTkFQUF8wLW51bGwtajd6dTdpfm0zdm96MmwzfnNkLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3ZvejJsMy1zZCZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqQTRZV00yWkRRME56a3dZV1E0T1RaaE4ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TVRabU1XUmhaREkzT0dZeVpqZGlNVGRqTXpVNFptTmpZVE0yTmpKaE1HUXlOekF5TkRJeFkySXdOakUyWW1Ka0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJjb2xvcjogIzBhNjZjMjsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsiPiA8aW1nIGNsYXNzPSJpbmxpbmUtYmxvY2sgcmVsYXRpdmUgYmctY29sb3ItZW50aXR5LWdob3N0LWJhY2tncm91bmQgdy04IGgtOCAhYmxvY2siIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL2Flcm8tdjEvc2MvaC84N3V1N3g1bXdtYXRzbjd2NmYyOHMyNm81IiBhbHQ9IkdldCBIaXJlZCBMb2dvIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBwb3NpdGlvbjogcmVsYXRpdmU7IGhlaWdodDogNjRweDsgd2lkdGg6IDY0cHg7IGJhY2tncm91bmQtY29sb3I6ICNlYWU2ZGY7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IiB3aWR0aD0iNjQiIGhlaWdodD0iNjQiPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwYi0yIHRleHQtY2VudGVyIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctYm90dG9tOiAxNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gVXNpbmcgQUkgYXQgd29yaz8gVGFrZSBub3RlIG9mIHRoZXNlIGlzc3Vlcy4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InRleHQtY2VudGVyIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHRleHQtYWxpZ246IGNlbnRlcjsiPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0iZW1haWwtYnV0dG9uICIgZGF0YS10ZXN0LWlkPSJlbWFpbC1idXR0b24iIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiA8dGJvZHk-IDx0cj4gPHRkIHZhbGlnbj0ibWlkZGxlIiBhbGlnbj0ibWlkZGxlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7Ij4gPGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbW0vZmVlZC9uZXdzLzYyMTcyMjA_bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxJTNCJTJGTUwlMkJNcmtBUmR5UHMlMkZmVk5IbU02dyUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0xT1FzdUt4UkIzQkh3MSZhbXA7dHJrPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLWhlcm9fbm90aWZpY2F0aW9uX2N0YS0wLUVESVRPUklBTF9CTEFaRV9JTkFQUCZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVyb19ub3RpZmljYXRpb25fY3RhLTAtRURJVE9SSUFMX0JMQVpFX0lOQVBQLW51bGwtajd6dTdpfm0zdm96MmwzfnNkLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3ZvejJsMy1zZCZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqQTRZV00yWkRRME56a3dZV1E0T1RaaE4ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TVRabU1XUmhaREkzT0dZeVpqZGlNVGRqTXpVNFptTmpZVE0yTmpKaE1HUXlOekF5TkRJeFkySXdOakUyWW1Ka0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGFyaWEtbGFiZWw9IlJlYWQgbW9yZSIgY2xhc3M9ImFsaWduLXRvcCBuby11bmRlcmxpbmUgIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IHZlcnRpY2FsLWFsaWduOiB0b3A7IHRleHQtZGVjb3JhdGlvbi1saW5lOiBub25lOyI-IDx0YWJsZSByb2xlPSJwcmVzZW50YXRpb24iIHZhbGlnbj0idG9wIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9ImF1dG8iIGNsYXNzPSJib3JkZXItc2VwYXJhdGUgIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0iYnRuLW1kIGJ0bi1wcmltYXJ5IGJvcmRlci1jb2xvci1icmFuZCBidXR0b24tbGluayBsZWFkaW5nLXJlZ3VsYXIgIW1pbi1oLVthdXRvXSAhc2hhZG93LW5vbmUgYm9yZGVyLTEgYm9yZGVyLXNvbGlkIHctWzM5MHB4XSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBoZWlnaHQ6IG1pbi1jb250ZW50OyBib3JkZXItcmFkaXVzOiAyNHB4OyBwYWRkaW5nLXRvcDogMTJweDsgcGFkZGluZy1ib3R0b206IDEycHg7IHBhZGRpbmctbGVmdDogMjRweDsgcGFkZGluZy1yaWdodDogMjRweDsgdGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDE2cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGN1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6ICMwYTY2YzI7IGNvbG9yOiAjZmZmZmZmOyB3aWR0aDogMzkwcHg7IGJvcmRlci13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyBib3JkZXItY29sb3I6ICMwYTY2YzI7IGxpbmUtaGVpZ2h0OiAxLjI1OyBtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7IGJveC1zaGFkb3c6IDAgMCAjMDAwMCwgMCAwICMwMDAwLCAwIDAgIzAwMDAgIWltcG9ydGFudDsiIHdpZHRoPSIzOTAiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9mZWVkL25ld3MvNjIxNzIyMD9saXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDElM0IlMkZNTCUyQk1ya0FSZHlQcyUyRmZWTkhtTTZ3JTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTFPUXN1S3hSQjNCSHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVyb19ub3RpZmljYXRpb25fY3RhLTAtRURJVE9SSUFMX0JMQVpFX0lOQVBQJmFtcDt0cmtFbWFpbD1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1oZXJvX25vdGlmaWNhdGlvbl9jdGEtMC1FRElUT1JJQUxfQkxBWkVfSU5BUFAtbnVsbC1qN3p1N2l-bTN2b3oybDN-c2QtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zdm96MmwzLXNkJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpBNFlXTTJaRFEwTnprd1lXUTRPVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVNVFptTVdSaFpESTNPR1l5WmpkaU1UZGpNelU0Wm1OallUTTJOakpoTUdReU56QXlOREl4WTJJd05qRTJZbUprTERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgdGFiaW5kZXg9Ii0xIiBhcmlhLWhpZGRlbj0idHJ1ZSIgY2xhc3M9Im5vLXVuZGVybGluZSIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyB0ZXh0LWRlY29yYXRpb24tbGluZTogbm9uZTsiPiA8c3BhbiBjbGFzcz0ibm8tdW5kZXJsaW5lIHRleHQtd2hpdGUiIHN0eWxlPSJjb2xvcjogI2ZmZmZmZjsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IG5vbmU7Ij4gUmVhZCBtb3JlIDwvc3Bhbj4gPC9hPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L2E-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvdGQ-IDwvdHI-IDwvdGJvZHk-IDwvdGFibGU-IDwvZGl2PiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0iYmctY29sb3ItYmFja2dyb3VuZC1jYW52YXMgcC0zIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IGJhY2tncm91bmQtY29sb3I6ICNmM2YyZjA7IHBhZGRpbmc6IDI0cHg7Ij4gPHRhYmxlIHJvbGU9InByZXNlbnRhdGlvbiIgdmFsaWduPSJ0b3AiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyI-IDx0Ym9keT4gPHRyPiA8dGQgY2xhc3M9InRleHQtY2VudGVyIHBiLTIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy1ib3R0b206IDE2cHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPiA8aDIgY2xhc3M9InRleHQtbGcgdGV4dC10ZWFsLTgwIiBzdHlsZT0ibWFyZ2luOiAwOyBmb250LXdlaWdodDogNTAwOyBmb250LXNpemU6IDIwcHg7IGNvbG9yOiAjMTE0OTUxOyI-IEdldCB0aGUgbmV3IExpbmtlZEluIGRlc2t0b3AgYXBwIDwvaDI-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBwYi0yIiBkYXRhLXRlc3QtaWQ9ImZvb3Rlci1hcHAtc3RvcmUtaWNvbiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWJvdHRvbTogMTZweDsgdGV4dC1hbGlnbjogY2VudGVyOyI-IDxhIGhyZWY9Imh0dHBzOi8vYXBwcy5taWNyb3NvZnQuY29tL3N0b3JlL2RldGFpbC85V1pETkNSRko0UTc_bGF1bmNoPXRydWUmYW1wO2NpZD1saW5rZWRpbl9lbWFpbF91cHNlbGwmYW1wO21vZGU9ZnVsbCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxpbWcgYWx0PSJHZXQgaXQgZnJvbSBNaWNyb3NvZnQiIHNyYz0iaHR0cHM6Ly9zdGF0aWMubGljZG4uY29tL2Flcm8tdjEvc2MvaC9lanBra3B3dnFrczMxYTNjanFva2I3ZmJtIiBjbGFzcz0iaC1bNDBweF0gdy1bMTEycHhdIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBoZWlnaHQ6IDQwcHg7IHdpZHRoOiAxMTJweDsiIHdpZHRoPSIxMTIiIGhlaWdodD0iNDAiPiA8L2E-IDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJ0ZXh0LWNlbnRlciBwYi0yIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgbXNvLXRhYmxlLWxzcGFjZTogMHB0OyBtc28tdGFibGUtcnNwYWNlOiAwcHQ7IHBhZGRpbmctYm90dG9tOiAxNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gPGgyIGNsYXNzPSJ0ZXh0LW1kIHRleHQtdGVhbC04MCIgc3R5bGU9Im1hcmdpbjogMDsgZm9udC13ZWlnaHQ6IDUwMDsgZm9udC1zaXplOiAxNnB4OyBjb2xvcjogIzExNDk1MTsiPiBBbHNvIGF2YWlsYWJsZSBvbiBtb2JpbGUgPC9oMj4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InRleHQtY2VudGVyIiBkYXRhLXRlc3QtaWQ9ImZvb3Rlci1hcHAtc3RvcmUtaWNvbiIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4gPGEgaHJlZj0iaHR0cHM6Ly9pdHVuZXMuYXBwbGUuY29tL3VzL2FwcC9saW5rZWRpbi9pZDI4ODQyOTA0MD9wdD0xMDc0NiZhbXA7Y3Q9c3RfYXBwc2l0ZV9mbGFnc2hpcCZhbXA7bXQ9OCIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxpbWcgYWx0PSJEb3dubG9hZCBvbiB0aGUgQXBwIFN0b3JlIiBzcmM9Imh0dHBzOi8vc3RhdGljLmxpY2RuLmNvbS9hZXJvLXYxL3NjL2gvNzZ5emtkMGg1a2l2MjdscmQ0eWFlbnlsayIgY2xhc3M9ImgtWzQwcHhdIHctWzEyMHB4XSBwci0xIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyBoZWlnaHQ6IDQwcHg7IHdpZHRoOiAxMjBweDsgcGFkZGluZy1yaWdodDogOHB4OyIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI0MCI-IDwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWNvbS5saW5rZWRpbi5hbmRyb2lkJmFtcDtyZWZlcnJlcj1zdF9hcHBzaXRlX2ZsYWdzaGlwIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIiBzdHlsZT0iY29sb3I6ICMwYTY2YzI7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7Ij4gPGltZyBhbHQ9IkdldCBpdCBvbiBHb29nbGUgUGxheSIgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vYWVyby12MS9zYy9oLzE0MnF1ZHdibHA1OHp3bWM5dmtxZnBsdWciIGNsYXNzPSJoLVs0MHB4XSB3LVsxMzRweF0iIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6IGJpY3ViaWM7IGhlaWdodDogNDBweDsgd2lkdGg6IDEzNHB4OyIgd2lkdGg9IjEzNCIgaGVpZ2h0PSI0MCI-IDwvYT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgY2xhc3M9InB5LTIiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgcGFkZGluZy10b3A6IDE2cHg7IHBhZGRpbmctYm90dG9tOiAxNnB4OyI-PGhyIGNsYXNzPSJib3JkZXItbm9uZSBiZy1bI2UwZGZkZF0gaC1bMXB4XSIgc3R5bGU9ImhlaWdodDogMXB4OyBib3JkZXItc3R5bGU6IG5vbmU7IGJhY2tncm91bmQtY29sb3I6ICNlMGRmZGQ7Ij48L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8dGFibGUgcm9sZT0icHJlc2VudGF0aW9uIiB2YWxpZ249InRvcCIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHdpZHRoPSIxMDAlIiBjbGFzcz0idGV4dC14cyIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBmb250LXNpemU6IDEycHg7Ij4gPHRib2R5PiA8dHI-IDx0ZCBjbGFzcz0icGItMSBtLTAiIGRhdGEtdGVzdC1pZD0iZW1haWwtZm9vdGVyX19pbnRlbmRlZCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW46IDBweDsgcGFkZGluZy1ib3R0b206IDhweDsiPiBUaGlzIGVtYWlsIHdhcyBpbnRlbmRlZCBmb3IgS2h1c2hhbCBQUyAoLS0pIDwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwYi0xIG0tMCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW46IDBweDsgcGFkZGluZy1ib3R0b206IDhweDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vaGVscC9saW5rZWRpbi9hbnN3ZXIvNDc4OD9sYW5nPWVuJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDElM0IlMkZNTCUyQk1ya0FSZHlQcyUyRmZWTkhtTTZ3JTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTFPUXN1S3hSQjNCSHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtU2VjdXJpdHlIZWxwLTAtZm9vdGVyZ2xpbW1lciZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtU2VjdXJpdHlIZWxwLTAtZm9vdGVyZ2xpbW1lci1udWxsLWo3enU3aX5tM3ZvejJsM35zZC1udWxsLW51bGwmYW1wO2VpZD1qN3p1N2ktbTN2b3oybDMtc2QmYW1wO290cFRva2VuPU1UTXdOREU0WlRJeE1ESTJZMlpqTTJJeU1qZ3dabVZpTkRFeFpHVTFZakE0WVdNMlpEUTBOemt3WVdRNE9UWmhOMkpqWmpBMk5qWTBZelZpTldSbU5HWm1aREZrTTJVNU1UWm1NV1JoWkRJM09HWXlaamRpTVRkak16VTRabU5qWVRNMk5qSmhNR1F5TnpBeU5ESXhZMkl3TmpFMlltSmtMREVzTVElM0QlM0QiIHRhcmdldD0iX2JsYW5rIiBjbGFzcz0idGV4dC1pbmhlcml0IHVuZGVybGluZSIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IGNvbG9yOiBpbmhlcml0OyB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyI-TGVhcm4gd2h5IHdlIGluY2x1ZGVkIHRoaXMuPC9hPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icGItMSBtLTAiIHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsgbWFyZ2luOiAwcHg7IHBhZGRpbmctYm90dG9tOiA4cHg7Ij5Zb3UgYXJlIHJlY2VpdmluZyBMaW5rZWRJbiBub3RpZmljYXRpb24gZW1haWxzLjwvdGQ-IDwvdHI-IDx0cj4gPHRkIGNsYXNzPSJwYi0xIG0tMCIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBtYXJnaW46IDBweDsgcGFkZGluZy1ib3R0b206IDhweDsiPiA8YSBocmVmPSJodHRwczovL3d3dy5saW5rZWRpbi5jb20vY29tbS9wc2V0dGluZ3MvZW1haWwtdW5zdWJzY3JpYmU_bGlwaT11cm4lM0FsaSUzQXBhZ2UlM0FlbWFpbF9lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxJTNCJTJGTUwlMkJNcmtBUmR5UHMlMkZmVk5IbU02dyUzRCUzRCZhbXA7bWlkVG9rZW49QVFGUGEyM056bzE4RlEmYW1wO21pZFNpZz0xT1FzdUt4UkIzQkh3MSZhbXA7dHJrPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLXVuc3Vic2NyaWJlLTAtZm9vdGVyR2xpbW1lciZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtdW5zdWJzY3JpYmUtMC1mb290ZXJHbGltbWVyLW51bGwtajd6dTdpfm0zdm96MmwzfnNkLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3ZvejJsMy1zZCZhbXA7bG9pZD1BUUc3RHBNY0JtSkJlZ0FBQVpOZWtsZmR5NVJpbG1YUVMwTFpMeVFGY2RoTVNROHpkd1dSN29DWlFFOGM2ZDY0TG5kcWRRVGV2TG90RERQcmpZRE1FS3k2TDJGcEozcXEwdVNnLW5ZIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InRleHQtaW5oZXJpdCB1bmRlcmxpbmUiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uLWxpbmU6IHVuZGVybGluZTsiPlVuc3Vic2NyaWJlPC9hPiDCoMKgwrfCoMKgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9oZWxwL2xpbmtlZGluL2Fuc3dlci82Nz9sYW5nPWVuJmFtcDtsaXBpPXVybiUzQWxpJTNBcGFnZSUzQWVtYWlsX2VtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDElM0IlMkZNTCUyQk1ya0FSZHlQcyUyRmZWTkhtTTZ3JTNEJTNEJmFtcDttaWRUb2tlbj1BUUZQYTIzTnpvMThGUSZhbXA7bWlkU2lnPTFPUXN1S3hSQjNCSHcxJmFtcDt0cms9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtaGVscC0wLWZvb3RlcmdsaW1tZXImYW1wO3Rya0VtYWlsPWVtbC1lbWFpbF9ub3RpZmljYXRpb25fZGlnZXN0XzAxLWhlbHAtMC1mb290ZXJnbGltbWVyLW51bGwtajd6dTdpfm0zdm96MmwzfnNkLW51bGwtbnVsbCZhbXA7ZWlkPWo3enU3aS1tM3ZvejJsMy1zZCZhbXA7b3RwVG9rZW49TVRNd05ERTRaVEl4TURJMlkyWmpNMkl5TWpnd1ptVmlOREV4WkdVMVlqQTRZV00yWkRRME56a3dZV1E0T1RaaE4ySmpaakEyTmpZMFl6VmlOV1JtTkdabVpERmtNMlU1TVRabU1XUmhaREkzT0dZeVpqZGlNVGRqTXpVNFptTmpZVE0yTmpKaE1HUXlOekF5TkRJeFkySXdOakUyWW1Ka0xERXNNUSUzRCUzRCIgdGFyZ2V0PSJfYmxhbmsiIGNsYXNzPSJ0ZXh0LWluaGVyaXQgdW5kZXJsaW5lIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgY29sb3I6IGluaGVyaXQ7IHRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmU7Ij5IZWxwPC9hPiA8L3RkPiA8L3RyPiA8dHI-IDx0ZCBjbGFzcz0icGItMSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTsgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IG1zby10YWJsZS1sc3BhY2U6IDBwdDsgbXNvLXRhYmxlLXJzcGFjZTogMHB0OyBwYWRkaW5nLWJvdHRvbTogOHB4OyI-IDxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21tL2ZlZWQvP2xpcGk9dXJuJTNBbGklM0FwYWdlJTNBZW1haWxfZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMSUzQiUyRk1MJTJCTXJrQVJkeVBzJTJGZlZOSG1NNnclM0QlM0QmYW1wO21pZFRva2VuPUFRRlBhMjNOem8xOEZRJmFtcDttaWRTaWc9MU9Rc3VLeFJCM0JIdzEmYW1wO3Ryaz1lbWwtZW1haWxfbm90aWZpY2F0aW9uX2RpZ2VzdF8wMS1mb290ZXItMC1sb2dvR2xpbW1lciZhbXA7dHJrRW1haWw9ZW1sLWVtYWlsX25vdGlmaWNhdGlvbl9kaWdlc3RfMDEtZm9vdGVyLTAtbG9nb0dsaW1tZXItbnVsbC1qN3p1N2l-bTN2b3oybDN-c2QtbnVsbC1udWxsJmFtcDtlaWQ9ajd6dTdpLW0zdm96MmwzLXNkJmFtcDtvdHBUb2tlbj1NVE13TkRFNFpUSXhNREkyWTJaak0ySXlNamd3Wm1WaU5ERXhaR1UxWWpBNFlXTTJaRFEwTnprd1lXUTRPVFpoTjJKalpqQTJOalkwWXpWaU5XUm1OR1ptWkRGa00yVTVNVFptTVdSaFpESTNPR1l5WmpkaU1UZGpNelU0Wm1OallUTTJOakpoTUdReU56QXlOREl4WTJJd05qRTJZbUprTERFc01RJTNEJTNEIiB0YXJnZXQ9Il9ibGFuayIgc3R5bGU9ImNvbG9yOiAjMGE2NmMyOyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyI-IDxpbWcgc3JjPSJodHRwczovL3N0YXRpYy5saWNkbi5jb20vYWVyby12MS9zYy9oLzllaGU2bjM5ZmEwN2RjNWVkenYwcmxhNGUiIGFsdD0iTGlua2VkSW4iIGNsYXNzPSJibG9jayBoLVsxNHB4XSB3LVs1NnB4XSBpbWFnZS1yZW5kZXJpbmctY3Jpc3AiIHN0eWxlPSJvdXRsaW5lOiBub25lOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGltYWdlLXJlbmRlcmluZzogLW1vei1jcmlzcC1lZGdlczsgaW1hZ2UtcmVuZGVyaW5nOiAtby1jcmlzcC1lZGdlczsgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OyBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBuZWFyZXN0LW5laWdoYm9yOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxNHB4OyB3aWR0aDogNTZweDsiIHdpZHRoPSI1NiIgaGVpZ2h0PSIxNCI-IDwvYT4gPC90ZD4gPC90cj4gPHRyPiA8dGQgZGF0YS10ZXN0LWNvcHlyaWdodC10ZXh0IHN0eWxlPSItd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6IDEwMCU7IC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlOyBtc28tdGFibGUtbHNwYWNlOiAwcHQ7IG1zby10YWJsZS1yc3BhY2U6IDBwdDsiPiDCqSAyMDI0IExpbmtlZEluIENvcnBvcmF0aW9uLCAxJnp3bmo7MDAwIFdlc3QgTWF1ZGUgQXZlbnVlLCBTdW5ueXZhbGUsIENBIDk0MDg1LiA8c3BhbiBkYXRhLXRlc3QtdHJhZGVtYXJrcy10ZXh0PiBMaW5rZWRJbiBhbmQgdGhlIExpbmtlZEluIGxvZ28gYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBMaW5rZWRJbi4gPC9zcGFuPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8L3RkPiA8L3RyPiA8L3Rib2R5PiA8L3RhYmxlPiA8aW1nIGFsdCByb2xlPSJwcmVzZW50YXRpb24iIHNyYz0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2VtaW1wL2lwX1lXcGtObVJVWkhCTVZ6QjZaRzA1TmsxdGQzcE1XRTVyT2xwWE1XaGhWM2htWW0wNU1HRlhXbkJaTWtZd1lWYzVkVmd5VW5CYU1sWjZaRVk0ZDAxUlBUMDYuZ2lmIiBzdHlsZT0ib3V0bGluZTogbm9uZTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFweDsiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiPiA8L2JvZHk-IDwvaHRtbD4=" + } + } + ] + }, + "sizeEstimate": 35040, + "historyId": "526827", + "internalDate": "1732458470000" +} \ No newline at end of file diff --git a/goog/models/__init__.py b/goog/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/goog/models/api_call.py b/goog/models/api_call.py new file mode 100644 index 0000000..4064079 --- /dev/null +++ b/goog/models/api_call.py @@ -0,0 +1,132 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Wednesday, 30th Oct., 2024. + + OBJECTIVE: + + To provide a data model for describing the API response from Google's APIs. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, model_validator +from typing import Optional, Literal, Union, Dict, List, Any + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class GoogleApiResponse(BaseModel): + + serviceName: str = Field(frozen = True, default = None) + action: str = Field(frozen = True, default = None) + + url: str = Field(frozen = True) + method: str = Field(frozen = True) + response: Any = None + httpCode: int = None + + success: bool = False + message: str = None + data: Any = None + + exception: Any = None + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "forbid" + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_markdown(self): + if self.exception: message = "❌ *GOOGLE API EXCEPTION:* ❌\n\n" + else: message = "*GOOGLE API RESPONSE:*\n\n" + message += f"*SERVICE:*\n`{self.serviceName}`\n\n" + message += f"*ACTION:*\n`{self.action}`\n\n" + message += f"*URL:*\n`{self.url}`\n\n" + message += f"*METHOD:*\n`{self.method}`\n\n" + message += f"*RESPONSE:*\n`{self.response}`\n\n" + message += f"*MESSAGE:*\n`{self.message}`\n\n" + message += f"*EXCEPTION:*\n`{self.exception.__class__.__name__}: {str(self.exception)}`\n\n" + return message + + async def get_json(self): + try: return self.response.json() + except: return {} + + async def get_content(self): + try: return self.response.content + except: return b"" + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/goog/models/auth_tokens.py b/goog/models/auth_tokens.py new file mode 100644 index 0000000..6dc568b --- /dev/null +++ b/goog/models/auth_tokens.py @@ -0,0 +1,243 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Wednesday, 30th Oct., 2024. + + OBJECTIVE: + + To provide a data model for describing the tokens to be used for Google's APIs. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, model_validator, AwareDatetime +from typing import Optional, Literal, Union, Dict, List, Any + +# Related to Google: +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with date and time: +import datetime +import dateparser + +# To make API calls: +import httpx + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class GoogleAuthTokens(BaseModel): + + accessToken: str = Field(description = "the main 'bearer' token") + refreshToken: str = Field(description = "token to be used to refresh the access token") + expiresAt: AwareDatetime = Field(description = "the time (utc) at which the token will expire") + scopes: List[str] = Field(description = "the list of permissions", default = []) + email: str | None = Field(description = "the email id of the user", default = None) + displayName: str | None = Field(description = "the display name of the user", default = None) + displayPictureUrl: str | None = Field(description = "the url to the display picture of the user", default = None) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "allow" + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗ + + @field_validator("expiresAt", mode = "before") + def parse_dates(cls, value): + if not isinstance(value, datetime.datetime): + parsed = date_time.parse_date_time(value, date_formats = ["%Y%m%d", "%Y-%m-%d"]) + value = parsed if isinstance(parsed, datetime.datetime) else dateparser.parse(value) + if isinstance(value, datetime.datetime): value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ • + # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ + # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ + # ┛ + + @property + def client_user_id(self): + return {"email": self.email} + + @property + def expired(self): + return True if date_time.get_current_utc_date_time() >= self.expiresAt else False + + @property + def ttl(self): + return (self.expiresAt - date_time.get_current_utc_date_time()).total_seconds() + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def refresh( + self, + client_id: str, + client_secret: str, + force_refresh: bool = False + ) -> bool: + + """ + Synchronously (blocking) refreshes the existing access tokens in place. + :param client_id: The id of the client app (OAuth JSON) for which these tokens were granted. + :param client_secret: The secret of the client app (OAuth JSON) for which these tokens were granted. + :param force_refresh: Whether you want to refresh the token even if it hasn't expired. + :return: True if refreshed, else False. + """ + + # Start by assuming failure: + success = False + + try: + + # Go ahead only if either the token has expired, + # or the user has asked to forcefully refresh the tokens: + if self.expired or force_refresh: + + # Create the credentials: + credentials = Credentials.from_authorized_user_info( + info = { + "client_id": client_id, + "client_secret": client_secret, + "refresh_token": self.refreshToken, + "expires_at": self.expiresAt + } + ) + + # Request a refresh: + credentials.refresh(Request()) + + # Note down the new credentials: + if credentials.token != self.accessToken: + success = True + self.accessToken = credentials.token + self.refreshToken = credentials.refresh_token + self.expiresAt = date_time.as_if_timezone(credentials.expiry, timezone = date_time.TIMEZONE_UTC) + + # In case something goes wrong: + except Exception as exception: + success = False + + # Done here: + return success + + async def arefresh( + self, + http_client: httpx.AsyncClient, + client_id: str, + client_secret: str, + force_refresh: bool = False + ) -> bool: + + """ + Asynchronously refreshes the existing access tokens in place. + :param http_client: The HTTP client to use to make the refresh request. + :param client_id: The id of the client (OAuth JSON) for which these tokens were granted. + :param client_secret: The secret of the client (OAuth JSON) for which these tokens were granted. + :param force_refresh: Whether you want to refresh the token even if it hasn't expired. + :return: True if refreshed, else False. + """ + + # Currently we don't really know how to refresh tokens through low-level API calls, + # so we will pass on the intent to the regular, synchronous function. + return self.refresh( + client_id = client_id, + client_secret = client_secret, + force_refresh = force_refresh + ) + + def has_scopes(self, scopes: List[str]) -> bool: + + """ + Checks if all the specified scopes were granted. + :param scopes: The list of scopes to check. These are the permissions you need. + :return: True if all specified scoped are present, else False. + """ + + # Start by assuming success: + has_scopes = True + + # Now loop through the needed scopes and check: + for scope in scopes: + if scope not in self.scopes: + has_scopes = False + break + + # Done here: + return has_scopes + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/image/__init__.py b/image/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/image/scanner/__init__.py b/image/scanner/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/image/scanner/scanner.py b/image/scanner/scanner.py new file mode 100644 index 0000000..28fe69b --- /dev/null +++ b/image/scanner/scanner.py @@ -0,0 +1,410 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 19th Sept., 2024 + + OBJECTIVE: + + To provide a way to easily scan documents like printouts and visiting cards. + + REFERENCES: + + 01. https://medium.com/@victorolufemi/build-a-document-scanner-with-opencv-ff9f645a4085 + 02. https://github.com/JaidedAI/EasyOCR + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys + +from diffusers.utils.import_utils import candidates + +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# To work with image processing: +import cv2 +import imutils +import numpy as np + +# To run OCR: +import easyocr + +# To download images from the web: +import requests + +# My utils: +from utils_v2.string import json +from utils_v2.ai.object_detection.yolo import YoloDetect + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class DocumentScanner: + + def __init__( + self, + layout_detection_yolo = None, + whitelisted_yolo_classes = None, + ocr_languages = None + ): + + self.__yolo = YoloDetect( + model_file = layout_detection_yolo, + debug = False + ) + self.__whitelisted_yolo_classes = whitelisted_yolo_classes or [] + self.__ocr_engine = easyocr.Reader(ocr_languages or ["en"]) + pass + + @staticmethod + def open_image(image): + + """ + Opens an image from various sources. + :param image: The image either as a path to a file on the local disk, or a URL, or an io.BytesIO buffer. + :return: The image as a CV2 object. + """ + + # When the image is provided as a string, + # it could be either as a URL or a path to a local file: + if isinstance(image, str): + if image.startswith("https://") or image.startswith("http://"): + image = io.BytesIO(requests.get(image).content) + else: image = cv2.imread(image) + + # If the image is provided as a io.BytesIO buffer: + if isinstance(image, io.BytesIO): + image.seek(0) + image = np.asarray(bytearray(image.read()), dtype = np.uint8) + image = cv2.imdecode(image, cv2.IMREAD_COLOR) + + # Done here: + return image + + @staticmethod + def polygon_area(points): + + """ + Computes the area occupied by a shape described by the array of points. + Example input: [[x1, y1], [x2, y2], [x3, y3], [x4, y4]] + :return: The area of the shape. + """ + + n = len(points) + area = 0.0 + for i in range(n): + j = (i + 1) % n # next vertex + area += points[i][0] * points[j][1] + area -= points[j][0] * points[i][1] + return abs(area) / 2.0 + + @staticmethod + def show(image, title = "Preview", wait = True): + + """ + Just a quick wrapper to show the image in a window. + :param image: The image that you want to show. + :param title: The title of the window. + :param wait: Set this to True when you want to show the window(s). This is useful when you want to show many + windows at once. Suppose you want to show a lot of windows, you set this to False for all calls except the + very last one. + :return: None. + """ + + cv2.imshow(title, image) + if wait: + cv2.waitKey() + cv2.destroyAllWindows() + + @staticmethod + def enhance(image): + + """ + Applies a form of contrast boost to make the edges more easily visible. + :param image: The OpenCV image that needs to be enhanced. + :return: The enhanced CV2 image. + """ + + return cv2.detailEnhance( + src = image, + sigma_s = 20, + sigma_r = 0.15 + ) + + @staticmethod + def get_edges(image): + + """ + Gets the edges in an image. + :param image: A CV2 image. + :return: The image with the edges detected. + """ + + # Denoise the image: + processed_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) + processed_image = cv2.GaussianBlur( + processed_image, + ksize = (5, 5), + sigmaX = 0 + ) + + # Detect edges in the image: + processed_image = cv2.Canny( + processed_image, + threshold1 = 50, + threshold2 = 200 + ) + + # Close small gaps in the edges: + kernel = np.ones((5, 5), np.uint8) + processed_image = cv2.dilate(processed_image, kernel, iterations = 1) + # processed_image = cv2.morphologyEx(processed_image, cv2.MORPH_CLOSE, kernel) + # processed_image = cv2.erode(processed_image, kernel, iterations = 1) + + # Done here: + return processed_image + + def scan(self, image, min_area = 0.125): + + """ + Looks for a rectangle in an image and flattens it out. No colour filters are applied here. + :param image: The image either as a path to a file on the local disk, or a URL, or an io.BytesIO buffer. + :param min_area: The minimum area occupied by the document in the image. + :return: The flattened image if any, else None. + """ + + # Open the image and read the data: + image = self.open_image(image) + if image is None: return None + height, width = image.shape[:2] + image_area = height * width + + # Enhance the image to have better visibility of edges: + # processed_image = self.enhance(image.copy()) + + # Detect edges in the image: + processed_image = self.get_edges(image.copy()) + + # Find the contours in the edges, + # and sort them in ascending order: + contours = cv2.findContours(processed_image, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) + contours = imutils.grab_contours(contours) + contours = sorted(contours, key = cv2.contourArea, reverse = True) + + # We try to get clean and passable contours. + # For our purposes, 'clean' is when it can be approximated to exactly 4 sides, + # and 'passable' is when the approximation comes close to it: + clean_rects = [] + passable_rects = [] + for contour in contours: + perimeter = cv2.arcLength(contour, closed = True) + approximation = cv2.approxPolyDP(contour, 0.025 * perimeter, closed = True) + if len(approximation) == 4: clean_rects.append(approximation) + elif len(approximation) <= 32: + candidate_contour = cv2.minAreaRect(approximation) + candidate_contour = cv2.boxPoints(candidate_contour) + candidate_contour = np.intp(candidate_contour) + passable_rects.append(candidate_contour) + clean_rects = sorted(clean_rects, key = cv2.contourArea, reverse = True) + passable_rects = sorted(passable_rects, key = cv2.contourArea, reverse = True) + + # Now we decide between the best candidate: + document_outline = None + if len(clean_rects) > 0: + candidate_rect = np.array([p[0] for p in clean_rects[0]]) + rectangle_area = cv2.contourArea(candidate_rect) + if rectangle_area / image_area >= min_area: document_outline = candidate_rect + if document_outline is None and len(passable_rects) > 0: + candidate_rect = cv2.minAreaRect(passable_rects[0]) + candidate_rect = cv2.boxPoints(candidate_rect) + candidate_rect = np.intp(candidate_rect) + rectangle_area = cv2.contourArea(candidate_rect) + if rectangle_area / image_area >= min_area: document_outline = candidate_rect + + # If there is no rectangular contour, + # we exit with failure: + if document_outline is None: return None + + # Since we did get the best candidate for the document, + # we figure out which point n the contour is which corner of the document: + document_rectangle = np.zeros((4, 2), dtype = "float32") + sum_points = document_outline.sum(axis = 1) + document_rectangle[0] = document_outline[np.argmin(sum_points)] + document_rectangle[2] = document_outline[np.argmax(sum_points)] + diff_points = np.diff(document_outline, axis = 1) + document_rectangle[1] = document_outline[np.argmin(diff_points)] + document_rectangle[3] = document_outline[np.argmax(diff_points)] + (top_left, top_right, bottom_right, bottom_left) = document_rectangle + + # let's compute the dimensions of the document in the image: + left_height = np.sqrt(((top_left[0] - bottom_left[0]) ** 2) + ((top_left[1] - bottom_left[1]) ** 2)) + right_height = np.sqrt(((top_right[0] - bottom_right[0]) ** 2) + ((top_right[1] - bottom_right[1]) ** 2)) + top_width = np.sqrt(((top_right[0] - top_left[0]) ** 2) + ((top_right[1] - top_left[1]) ** 2)) + bottom_width = np.sqrt(((bottom_right[0] - bottom_left[0]) ** 2) + ((bottom_right[1] - bottom_left[1]) ** 2)) + max_height = max(int(left_height), int(right_height)) + max_width = max(int(top_width), int(bottom_width)) + + # We compute the destination of the transform: + destination = np.array( + object = [ + [0, 0], + [max_width - 1, 0], + [max_width - 1, max_height - 1], + [0, max_height - 1] + ], + dtype = "float32" + ) + + # We apply the transform that flattens out the document: + matrix = cv2.getPerspectiveTransform(document_rectangle, destination) + flattened_image = cv2.warpPerspective(image, matrix, dsize = (max_width, max_height)) + + # Done here: + return flattened_image + + def extract_text( + self, + image, + min_confidence = 0.5, + margin = 0.05 + ): + + """ + To run OCR on the input image. + :param image: The image either as a path to a file on the local disk, or a URL, or an io.BytesIO buffer. + :param min_confidence: The minimum amount of confidence for detected text to be considered. + :param margin: The extra pixels to include when cropping into a section for OCR. + :return: The extracted text. + """ + + # Make a variable that will hold the final result: + extracted_text = {} + + # Open the image and read the data: + image = self.open_image(image) + height, width = image.shape[:2] + + # Run OCR on the entire canvas: + ocr_result = [r[1] for r in self.__ocr_engine.readtext(image) if r[-1] >= min_confidence] + extracted_text["fullDoc"] = " ".join(ocr_result) + + # Get the doc layout in the image: + document_sections = self.__yolo.predict(image) + document_sections = document_sections["boxes"] + + # For each section, we run the OCR process individually: + section_results = [] + for section in document_sections: + if section["class"] in self.__whitelisted_yolo_classes: + section_width = section["x2"] - section["x1"] + section_height = section["y2"] - section["y1"] + x1 = max(int(section["x1"] - (margin * section_width)), 0) + y1 = max(int(section["y1"] - (margin * section_height)), 0) + x2 = min(int(section["x2"] + (margin * section_width)), width) + y2 = min(int(section["y2"] + (margin * section_height)), height) + sub_image = image[y1:y2, x1:x2] + ocr_result = [r[1] for r in self.__ocr_engine.readtext(sub_image) if r[-1] >= min_confidence] + section_results.append({ + "text": " ".join(ocr_result), + "class": section["class"], + "className": section["className"], + "x1": x1, + "y1": y1, + "x2": x2, + "y2": y2 + }) + extracted_text["bySection"] = section_results + + # Done here: + return extracted_text + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import time + + my_scanner = DocumentScanner( + layout_detection_yolo = r"/home/developer/PycharmProjects/utils/data/ai/behaviour_models/hugging_face/object_detection/YOLOv10-Document-Layout-Analysis/yolov10x_best.pt", + whitelisted_yolo_classes = [0, 1, 3, 4, 5, 7, 9, 10], + # whitelisted_yolo_classes = [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], + ocr_languages = ["en"] + ) + + image = my_scanner.open_image(r"/home/developer/Downloads/talkaholics_card.jpg") + document_image = my_scanner.scan(image) + if document_image is not None: + cv2.imwrite(r"/home/developer/Downloads/flattened_image.jpg", document_image) + start_time = time.time() + document_text = my_scanner.extract_text( + document_image, + min_confidence = 0.5 + ) + print("OCR RESULT:") + print(document_text) + + print(f"FINISHED IN {time.time() - start_time} SECONDS!") + + else: print("No image") diff --git a/image/scanner/scanner_v2.py b/image/scanner/scanner_v2.py new file mode 100644 index 0000000..fc63627 --- /dev/null +++ b/image/scanner/scanner_v2.py @@ -0,0 +1,379 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 24th Sept., 2024 + + OBJECTIVE: + + To provide a way to easily scan documents like printouts and visiting cards. + + REFERENCES: + + 01. https://medium.com/@victorolufemi/build-a-document-scanner-with-opencv-ff9f645a4085 + 02. https://github.com/JaidedAI/ + 03. https://github.com/criistian14/flutter_document_scanner/blob/master/flutter_document_scanner_android/android/src/main/kotlin/com/christian/flutterDocumentScanner/OpenCVPlugin.kt + 04. https://www.geeksforgeeks.org/python-bilateral-filtering/ + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# To work with image processing: +import cv2 +import imutils +import numpy as np + +# To run OCR: +import easyocr + +# To download images from the web: +import requests + +# My utils: +from utils_v2.string import json +from utils_v2.ai.object_detection.yolo import YoloDetect + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class DocumentScanner: + + def __init__( + self, + layout_detection_yolo = None, + whitelisted_yolo_classes = None, + ocr_languages = None + ): + + self.__yolo = YoloDetect( + model_file = layout_detection_yolo, + debug = False + ) + self.__whitelisted_yolo_classes = whitelisted_yolo_classes or [] + self.__ocr_engine = easyocr.Reader(ocr_languages or ["en"]) + pass + + @staticmethod + def open_image(image): + + """ + Opens an image from various sources. + :param image: The image either as a path to a file on the local disk, or a URL, or an io.BytesIO buffer. + :return: The image as a CV2 object. + """ + + # When the image is provided as a string, + # it could be either as a URL or a path to a local file: + if isinstance(image, str): + if image.startswith("https://") or image.startswith("http://"): + image = io.BytesIO(requests.get(image).content) + else: image = cv2.imread(image) + + # If the image is provided as a io.BytesIO buffer: + if isinstance(image, io.BytesIO): + image.seek(0) + image = np.asarray(bytearray(image.read()), dtype = np.uint8) + image = cv2.imdecode(image, cv2.IMREAD_COLOR) + + # Done here: + return image + + @staticmethod + def show(image, title = "Preview", wait = True): + + """ + Just a quick wrapper to show the image in a window. + :param image: The image that you want to show. + :param title: The title of the window. + :param wait: Set this to True when you want to show the window(s). This is useful when you want to show many + windows at once. Suppose you want to show a lot of windows, you set this to False for all calls except the + very last one. + :return: None. + """ + + cv2.imshow(title, image) + if wait: + cv2.waitKey() + cv2.destroyAllWindows() + + @staticmethod + def get_edges(image): + + """ + Apply all the preprocessing filters on the image before sending it off for contour-finding. + :param image: The image to pre-process. + :return: The pre-processed image. + """ + + # Denoise the image: + processed_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) + processed_image = cv2.bilateralFilter( + processed_image, + d = 9, + sigmaColor = 75, + sigmaSpace = 75 + ) + + # Detect edges in the image: + processed_image = cv2.Canny( + processed_image, + threshold1 = 75, + threshold2 = 200 + ) + + # Close small gaps in the edges: + kernel = np.ones((5, 5), np.uint8) + processed_image = cv2.dilate(processed_image, kernel, iterations = 1) + # processed_image = cv2.morphologyEx(processed_image, cv2.MORPH_CLOSE, kernel) + # processed_image = cv2.erode(processed_image, kernel, iterations = 1) + + # Done here: + return processed_image + + def scan(self, image, min_area = 0.125): + + """ + Looks for a rectangle in an image and flattens it out. No colour filters are applied here. + :param image: The image either as a path to a file on the local disk, or a URL, or an io.BytesIO buffer. + :param min_area: The minimum area occupied by the document in the image. + :return: The flattened image if any, else None. + """ + + # Open the image and read the data: + image = self.open_image(image) + if image is None: return None + height, width = image.shape[:2] + image_area = height * width + + # image = self.enhance(image) + processed_image = self.get_edges(image) + # self.show(processed_image) + + # Find the contours in the edges, + # and sort them in ascending order: + contours = cv2.findContours(processed_image, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) + contours = imutils.grab_contours(contours) + contours = sorted(contours, key = cv2.contourArea, reverse = True) + + # We try to get clean and passable contours. + # For our purposes, 'clean' is when it can be approximated to exactly 4 sides, + # and 'passable' is when the approximation comes close to it: + clean_rects = [] + passable_rects = [] + for contour in contours: + perimeter = cv2.arcLength(contour, closed = True) + approximation = cv2.approxPolyDP(contour, 0.025 * perimeter, closed = True) + if len(approximation) == 4: clean_rects.append(approximation) + elif len(approximation) <= 32: + candidate_contour = cv2.minAreaRect(approximation) + candidate_contour = cv2.boxPoints(candidate_contour) + candidate_contour = np.intp(candidate_contour) + passable_rects.append(candidate_contour) + clean_rects = sorted(clean_rects, key = cv2.contourArea, reverse = True) + passable_rects = sorted(passable_rects, key = cv2.contourArea, reverse = True) + + # Now we decide between the best candidate: + document_outline = None + if len(clean_rects) > 0: + candidate_rect = np.array([p[0] for p in clean_rects[0]]) + rectangle_area = cv2.contourArea(candidate_rect) + if rectangle_area / image_area >= min_area: document_outline = candidate_rect + if document_outline is None and len(passable_rects) > 0: + candidate_rect = cv2.minAreaRect(passable_rects[0]) + candidate_rect = cv2.boxPoints(candidate_rect) + candidate_rect = np.intp(candidate_rect) + rectangle_area = cv2.contourArea(candidate_rect) + if rectangle_area / image_area >= min_area: document_outline = candidate_rect + + # If there is no rectangular contour, + # we exit with failure: + if document_outline is None: return None + + # Since we did get the best candidate for the document, + # we figure out which point n the contour is which corner of the document: + document_rectangle = np.zeros((4, 2), dtype = "float32") + sum_points = document_outline.sum(axis = 1) + document_rectangle[0] = document_outline[np.argmin(sum_points)] + document_rectangle[2] = document_outline[np.argmax(sum_points)] + diff_points = np.diff(document_outline, axis = 1) + document_rectangle[1] = document_outline[np.argmin(diff_points)] + document_rectangle[3] = document_outline[np.argmax(diff_points)] + (top_left, top_right, bottom_right, bottom_left) = document_rectangle + + # let's compute the dimensions of the document in the image: + left_height = np.sqrt(((top_left[0] - bottom_left[0]) ** 2) + ((top_left[1] - bottom_left[1]) ** 2)) + right_height = np.sqrt(((top_right[0] - bottom_right[0]) ** 2) + ((top_right[1] - bottom_right[1]) ** 2)) + top_width = np.sqrt(((top_right[0] - top_left[0]) ** 2) + ((top_right[1] - top_left[1]) ** 2)) + bottom_width = np.sqrt(((bottom_right[0] - bottom_left[0]) ** 2) + ((bottom_right[1] - bottom_left[1]) ** 2)) + max_height = max(int(left_height), int(right_height)) + max_width = max(int(top_width), int(bottom_width)) + + # We compute the destination of the transform: + destination = np.array( + object = [ + [0, 0], + [max_width - 1, 0], + [max_width - 1, max_height - 1], + [0, max_height - 1] + ], + dtype = "float32" + ) + + # We apply the transform that flattens out the document: + matrix = cv2.getPerspectiveTransform(document_rectangle, destination) + flattened_image = cv2.warpPerspective(image, matrix, dsize = (max_width, max_height)) + + # Done here: + return flattened_image + + def extract_text( + self, + image, + min_confidence = 0.5, + margin = 0.05 + ): + + """ + To run OCR on the input image. + :param image: The image either as a path to a file on the local disk, or a URL, or an io.BytesIO buffer. + :param min_confidence: The minimum amount of confidence for detected text to be considered. + :param margin: The extra pixels to include when cropping into a section for OCR. + :return: The extracted text. + """ + + # Make a variable that will hold the final result: + extracted_text = {} + + # Open the image and read the data: + image = self.open_image(image) + height, width = image.shape[:2] + + # Run OCR on the entire canvas: + ocr_result = [r[1] for r in self.__ocr_engine.readtext(image) if r[-1] >= min_confidence] + extracted_text["fullDoc"] = " ".join(ocr_result) + + # Get the doc layout in the image: + document_sections = self.__yolo.predict(image) + document_sections = document_sections["boxes"] + + # For each section, we run the OCR process individually: + section_results = [] + for section in document_sections: + if section["class"] in self.__whitelisted_yolo_classes: + section_width = section["x2"] - section["x1"] + section_height = section["y2"] - section["y1"] + x1 = max(int(section["x1"] - (margin * section_width)), 0) + y1 = max(int(section["y1"] - (margin * section_height)), 0) + x2 = min(int(section["x2"] + (margin * section_width)), width) + y2 = min(int(section["y2"] + (margin * section_height)), height) + sub_image = image[y1:y2, x1:x2] + ocr_result = [r[1] for r in self.__ocr_engine.readtext(sub_image) if r[-1] >= min_confidence] + section_results.append({ + "text": " ".join(ocr_result), + "class": section["class"], + "className": section["className"], + "x1": x1, + "y1": y1, + "x2": x2, + "y2": y2 + }) + extracted_text["bySection"] = section_results + + # Done here: + return extracted_text + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import time + + my_scanner = DocumentScanner( + layout_detection_yolo = r"/home/developer/PycharmProjects/utils/data/ai/behaviour_models/hugging_face/object_detection/YOLOv10-Document-Layout-Analysis/yolov10x_best.pt", + whitelisted_yolo_classes = [0, 1, 3, 4, 5, 7, 9, 10], + # whitelisted_yolo_classes = [0, 1, 3, 4, 5, 6, 7, 8, 9, 10], + ocr_languages = ["en"] + ) + + image = my_scanner.open_image(r"/home/developer/Downloads/sushmita_card.jpg") + # image = my_scanner.open_image(r"/home/developer/Downloads/niranjan_card.jpg") + # image = my_scanner.open_image(r"/home/developer/Downloads/niranjan_card_2.jpg") + # image = my_scanner.open_image(r"/home/developer/Downloads/card_square.jpg") + document_image = my_scanner.scan(image) + if document_image is not None: + cv2.imwrite(r"/home/developer/Downloads/flattened_image.jpg", document_image) + start_time = time.time() + document_text = my_scanner.extract_text( + document_image, + min_confidence = 0.5 + ) + print("OCR RESULT:") + print(document_text) + + print(f"FINISHED IN {time.time() - start_time} SECONDS!") + + else: print("No image") diff --git a/logging/__init__.py b/logging/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/logging/__pycache__/__init__.cpython-310.pyc b/logging/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8e4fd4ded3ce683e09ee37764625c27062a62e68 GIT binary patch literal 166 zcmd1j<>g`k0+q$t=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vLKO;XkRX-)Q zEHx*;Ahk$8pfWilu_!m7C_gJTxujS>u^=-(Gp{7IC@(QbzqBMXr#QaMNIxe(Jv}oo iT|XWumst`YuUAlci^C>2KczG$)edAuF%ytrVE_QWXei16 literal 0 HcmV?d00001 diff --git a/logging/__pycache__/model.cpython-310.pyc b/logging/__pycache__/model.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0adb2ad81d47937f4027258daf463b8b68ee508e GIT binary patch literal 1709 zcmZ`(&2Aev5a#|!TCHSDw&lc5f3R&+Gy-Bvb`mEJj3SC7CvI&?kYpFw%Ys=_(%So1 zF6Gv}rf*Rcu+d)n7JUw0d+ICXP;^K+f-j-OZ{`~gXUXA^$-;t-pxyuDeEfF}p?@T~ z-Ao`apl5#q5ac4F5k1sgO-bF=l{8!fq!F4?&do)6H?K)QGb}`wYehx37}>5JmE4lD z>tWd~(*>$uEncH{np>g9RrMOVOJLKkmPzhf1M3Q1I;;JLNFL-W$inZYd*?MG7AgLU zNRj5=8SY)WM(lH)^@@n-1J&y#Jk=1gZ3kNGWca4re?BA9@cm?(O>pS+oI#SrgtD_> zHu$PFY~S)bU;)9G51p+oK5@D}-+bt7H@6?pe7i5dYwr&aPj62cCe8$3PzO61XH%a~ z8FfYpbNGZhVKUB~2nR8TPKmNJI-Z7@IiqRp^B{>GABSPKsa7o)I-CTV1Ah{XMwHQ* zJ0q4v9}U;)9e#+QLiF1Q?S8wn-yYoBRC8<7nQ)$F&l?SYg84Y*n|=~CAR~-6cAhq$ zz1{J5H+J6Q#~aU@&C$j##k(8LCiNdZY3@9IvbBAatL_h-qi*Zf?bw}0%eMc88bO`9 zE{ZR4MvoIhLyumG*7fWL<_E^bRG1fYb)K@L&S7T6zXgpfnQGX#W~L_UICs{ z;{}*2<5|jHo!g6wFU`5F`0|{W6knP1GQ_E!)gaOWXsaL>Z)D}>3sp7a4$PRXY)SFE zbH1$j+MKT_zCPzQ$p@&uDk`sOER%PXjAyyFCP~I)98sYsnK1lx+7U(?5Mibg3n@#^ zsLzD~6)B2I3X|n&h&)b%Q_4gR?1w~HAoeFvt3u}xhGRG&o9QJhLa+|>>;Zs{%4S(BYgN6fRSio6 zR6iSZ_!){BHBHTu*_2O+=hfFm!ShJsLrU@lE)h#aK1=*_%7vANn8ULZfp$r7%mbh4 z@F^y*k;wDQ6qYl~kjhnFjuj+)E#V94RT@+Np^lg%ExD str_limit: value = value[:str_limit] + "..." + + # Done here: + return value + + @classmethod + def log_it( + cls, + api_version: str = None, + project: str = None, + log_type: str = None, + operation: str = None, + log_input: bool | int = True, + log_output: bool | int = True, + sensitive_keys: list = None + ): + + """ + A decorator factor that can be used to log the results of functions automatically. + :param api_version: A string that indicates the version code of the function being decorated. + :param project: A hint about which project is being worked on. + :param log_type: A hint about which module is being worked on. + :param operation: A hint about which action in a particular module is being worked on. + :param log_input: Set to True to capture everything that went into the function, False to capture the least + info, and set it to an integer to capture a certain depth of the input (applicable on iterables and dicts. + :param log_output: The same as 'log_input', but applicable to the response from the function. + :param sensitive_keys: Keys of a dict whose values must be obscured even if that depth is being captured. + :return: A decorator with the configuration. + """ + + def decorator(func): + + @wraps(func) + async def wrapper(*args, **kwargs): + + # Make variables and extract available info.: + exception = None + response = None + request_ts = date_time.get_current_utc_date_time() + start_ts = time.perf_counter() + cpu_start_ts = time.process_time() + + # Execute the function that is being wrapped: + try: response = await func(*args, **kwargs) + except Exception as exc: exception = exc + + # Do the next steps only if within the logging context: + if cls.get_logger() is not None: + + # Create the log: + if not args: args = None + if not kwargs: kwargs = None + func_log = GeneralLogModel( + pid = PROCESS_ID, + ppid = PARENT_PROCESS_ID, + project = project, + log = log_type or func.__name__, + operation = operation or func.__name__, + apiVer = api_version, + logId = cls.generate_log_id(), + logChain = cls.get_log_chain(), + ts = request_ts, + tat = time.perf_counter() - start_ts, + cpuTime = time.process_time() - cpu_start_ts, + func = func.__name__, + args = cls.summarize(args, expand = log_input, sensitive_keys = sensitive_keys), + kwargs = cls.summarize(kwargs, expand = log_input, sensitive_keys = sensitive_keys), + exception = None if exception is None else describe_exception(exception), + response = cls.summarize(response, expand = log_output, sensitive_keys = sensitive_keys), + ).model_dump() + + # Write the log: + await cls.get_logger().log(func_log) + + # Done here: + if exception is not None: raise exception + return response + + return wrapper + + return decorator + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + from utils_v2.database.async_mongo_v2 import AsyncMongo + + @AsyncLoggerContext.log_it( + api_version = "0.0.1", + project = "testProj", + log_type = "work", + operation = "someWork", + log_input = True, + log_output = True, + sensitive_keys = None + ) + async def some_work(*args, **kwargs): + print("SOME WORK:", AsyncLoggerContext.get_log_chain()) + await asyncio.sleep(max(2.0 * random.random(), 1.0)) + total = sum(args) + return total + + @AsyncLoggerContext.log_it( + api_version = "0.0.1", + project = "testProj", + log_type = "work", + operation = "moreWork", + log_input = True, + log_output = True, + sensitive_keys = ["password", "sessionToken"] + ) + async def more_work(*args, **kwargs): + print("MORE WORK:", AsyncLoggerContext.get_log_chain()) + await asyncio.sleep(max(2.0 * random.random(), 1.0)) + return {"success": True, "sessionToken": "1234567890"} + + @AsyncLoggerContext.log_it( + api_version = "0.0.1", + project = "testProj", + log_type = "work", + operation = "moreWork", + log_input = True, + log_output = True, + sensitive_keys = None + ) + async def last_work(*args, **kwargs): + print("LAST WORK:", AsyncLoggerContext.get_log_chain()) + await asyncio.sleep(max(2.0 * random.random(), 1.0)) + + async def main(chain = None): + + # Connect to MongoDB: + mongo = AsyncMongo( + connection_string = r"mongodb://del.ditscentre.in:27017,wtt.ditscentre.in:27017,mum.arh.001.ditscentre.in:27017/admin?tls=true&tlsCAFile=%2Fetc%2Fssl%2Fcerts%2Fmongo_data_ca.pem&tlsCertificateKeyFile=%2Fetc%2Fssl%2Fcerts%2Fmongo_data_cert.pem&replicaSet=dits_mongod_rep&readPreference=primary&authMechanism=MONGODB-X509&authSource=%24external", + database_name = "converse", + max_connections = 10, + debug = True + ) + + # Convert the connection to a logger instance that can be injected + # into the context as a dependency: + mongo_logger = AsyncMongoLogger( + db_conn = mongo, + collection = "logs" + ) + + # Initialize the context: + async with AsyncLoggerContext.logging_context( + logger = mongo_logger, + log_chain = chain + ): + + # Run some functions within the context: + await some_work(1, 2, 3, 4, 5) + await more_work(username = "john.doe@domain.com", password = "mySecretPass") + + # Run something outside the context: + await last_work() + + # async def multi_main(): + # tasks = [ + # main(chain = "kPRwXdItb1"), + # main(chain = "456") + # ] + # await asyncio.gather(*tasks) + + asyncio.run(main(chain = "00wGHRFYPY123")) diff --git a/logging/model.py b/logging/model.py new file mode 100644 index 0000000..355d07e --- /dev/null +++ b/logging/model.py @@ -0,0 +1,131 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 11th Oct., 2024 + + OBJECTIVE: + + To have a structure for the logs maintained for regular function calls. + This is different from the logs maintained for API calls. + + REFERENCES: + + 01. https://chatgpt.com/share/6708b6c9-6ba4-800f-9ea9-00ec35067512 + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# System-level activities: +import distro +import socket +import platform + +# For data-modelling: +from pydantic import BaseModel, Field +from typing import Any, Optional, List, Literal + +# To work with date and time: +import datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# Info for logging that will stay constant during runtime: +SERVER_HOSTNAME = str(socket.gethostname()) +PLATFORM_INFO = platform.uname() +HOST_OS = str(distro.name(True)) +HOST_CPU = f"{PLATFORM_INFO.processor} ({PLATFORM_INFO.machine})" + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class GeneralLogModel(BaseModel): + + # To identify the machine the code is running on. + # DO NOT MODIFY THESE: + hostname: str = SERVER_HOSTNAME + os: str = HOST_OS + cpu: str = HOST_CPU + # Can modify these: + pid: Optional[Any] = None + ppid: Optional[Any] = None + + # To identify the project and actions: + project: Optional[str] = None + log: str + operation: Optional[str] = None + apiVer: Optional[str] = None + logId: Optional[str] = None + logChain: Optional[str] = None + + # Timing metrics: + ts: datetime.datetime + tat: float + cpuTime: float + + # To understand the inputs: + func: str + args: Optional[Any] = None + kwargs: Optional[Any] = None + + # To understand the outputs: + exception: Optional[Any] = None + response: Optional[Any] = None + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/mail/__init__.py b/mail/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/mail/async_smpt.py b/mail/async_smpt.py new file mode 100644 index 0000000..0e8ed06 --- /dev/null +++ b/mail/async_smpt.py @@ -0,0 +1,443 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 16th Jul, 2024 + + OBJECTIVE: + + To be able to send out mails from code. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For working with mails: +import aiosmtplib +from email.mime.multipart import MIMEMultipart +from email.mime.image import MIMEImage +from email.mime.text import MIMEText +from email.mime.base import MIMEBase +from email import encoders + +# For random strings: +import string +import random + +# For system-level activities: +import os + +# For working with files in RAM: +import io + +# For debugging: +from icecream import IceCreamDebugger + +# To work with datatypes: +from typing import List + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class SMTPMessage: + + def __init__( + self, + to_email: str, + subject: str, + cc_emails: List[str] = None, + bcc_emails: List[str] = None + ): + + """ + Create an instance of the message that you would like to send. + :param to_email: The EMail ID of th recipient. + :param subject: The subject of the mail. + :param cc_emails: A list of recipients to add to the CC section. + :param bcc_emails: A list of recipients to add to the BCC section. + """ + + self.message = MIMEMultipart() + self.message["To"] = to_email + self.message["Subject"] = subject + if cc_emails: self.message["CC"] = ",".join(cc_emails) + if bcc_emails: self.message["BCC"] = ",".join(bcc_emails) + + def add_text(self, text): + + """ + Add plain-text to the mail body. + :param text: The text to add to the mail body. + :return: None. + """ + + self.message.attach(MIMEText(text, "plain")) + + def add_html(self, html_text): + + """ + Add HTML text to the mail body. + :param html_text: The HTML text to add to the mail body. + :return: None. + """ + + self.message.attach(MIMEText(html_text, "html")) + + def add_inline_image(self, image_file, content_id = None): + + """ + Add an inline image to the body of the mail. + NOTE: This is NOT the same as sending an image as an attachment. + :param image_file: The image data to attach to the mail body. + :param content_id: Inline images are inserted via HTML bocks. This field identifies the image resource. If not + specified, I will generate a random string. You may write a custom value here if you know what you are + doing. For most use cases, please ignore this field. + :return: None. + """ + + # Read the image as bytes: + image_bytes = None + if type(image_file) is str: + with open(image_file, "rb") as opened_image_file: + image_bytes = opened_image_file.read() + if type(image_file) is io.BytesIO: + image_file.seek(0) + image_bytes = image_file.getvalue() + + # Declare the part to be attached to the multipart message: + if image_bytes is not None: + + # Create the HTML block if the image pointer is blank: + if content_id is None: + content_id = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(8)) + self.add_html(f""" + + +

    + + + """) + + # Then add the image: + image_part = MIMEImage(image_bytes) + image_part.add_header("Content-ID", f"<{content_id}>") + self.message.attach(image_part) + + def add_attachment(self, attachment_file, file_name = None): + + # Declare the part to be attached to the multipart message: + part = MIMEBase("application", "octet-stream") + + # If the attachment is a file stored in the local disk: + if isinstance(attachment_file, str): + file_name = file_name or os.path.split(attachment_file)[-1] + with open(attachment_file, "rb") as attachment: + part.set_payload(attachment.read()) + + # If the file is held in RAM: + elif isinstance(attachment_file, io.BytesIO): + attachment_file.seek(0) + part.set_payload(attachment_file.read()) + + # Encode and attach the file: + encoders.encode_base64(part) + part.add_header( + "Content-Disposition", + f"attachment; filename= {file_name}", + ) + self.message.attach(part) + + def get_message(self): + return self.message + + +# --------------------------------------------------------------------------------------------------------------------- + + +class AsyncSMTPClient: + + # Constants: + SMTP_TLS_PORT = 587 + SMTP_SSL_PORT = 465 + + # variables: + __smtp = None + + def __init__( + self, + email, + password, + server, + port = 587, + rate_limiters = None, + wait_for_turn = True, + debug = True, + debug_prefix = "Mail (C) | " + ): + + """ + Set up the mail client. + :param email: The Email ID to use when sending out mails. + :param password: The password of the EMail ID that is being used. + :param server: The EMail server. + :param port: The port number to connect to the host. + :param rate_limiters: The rate limiters to use. Must have "get_turn" and "has_turn" methods. "get_turn" method + must wait for the turn, and "has_turn" method must only check if a turn is available. + :param wait_for_turn: To wait for turn if the rate limit has been exceeded, or to return with failure. + :param debug: Whether, or not, you want to print debugging messages. + :param debug_prefix: The prefix to identify the debugging messages. + """ + + # Initialize the debugger: + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + + # Note down the credentials and other details: + self.__email = email + self.__password = password + self.__server = server + self.__port = port + self.__rate_limiters = rate_limiters if type(rate_limiters) is list else ([rate_limiters] if rate_limiters is not None else []) + self.__wait_for_turn = wait_for_turn + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + async def login(self): + + """ + To connect to the mail server and authenticate the user. + :return: True if authenticated, else False. + """ + + # Initialize the SMTP connection, + # and return with success if all goes well: + try: + self.__smtp = aiosmtplib.SMTP( + hostname = self.__server, + port = self.__port, + use_tls = False, + start_tls = False + ) + await self.__smtp.connect() + await self.__smtp.starttls() + await self.__smtp.login(self.__email, self.__password) + return True + + # Return with failure if something goes wrong: + except Exception as exception: + self.__printer(exception) + try: await self.__smtp.quit() + except Exception as exception: self.__printer(exception) + self.__smtp = None + return False + + async def ensure_connection(self): + + """ + Can be run before the sending operation to confirm that we are yet connected to the server. + If not connected, this code will reattempt to connect and log-in. + :return: True if connected, else False. + """ + + # If the login had failed initially, the object will be set to null. + # In such a case, we make an attempt to login: + if self.__smtp is None: + return await self.login() + + # If the login was successful, we check if the connection is active. + # If not, we try to re-login: + if self.__smtp.is_connected: + return True + else: + try: + await self.__smtp.connect() + await self.__smtp.starttls() + await self.__smtp.login(self.__email, self.__password) + return True + except Exception as exception: + self.__printer(exception) + try: await self.__smtp.quit() + except Exception as exception: self.__printer(exception) + self.__smtp = None + return False + + async def logout(self): + + """ + Closes the connection to the SMTP client. + :return: True by default. + """ + + if self.__smtp is not None: + try: await self.__smtp.quit() + except Exception as exception: self.__printer(exception) + self.__smtp = None + return True + + async def send(self, mail: SMTPMessage): + + """ + Send out the mail. + :param mail: The instance of 'MailMessage' with all the content populated. + :return: A dict with 'success' and 'message'. + """ + + # Return with failure if we aren't connected, + # and our attempt to (re)connect fails: + if not await self.ensure_connection(): + return { + "success": False, + "message": "login failed" + } + + # Comply with the rate-limit: + for rate_limiter in self.__rate_limiters: + if not self.__wait_for_turn: + if not await rate_limiter.has_turn(): return False + got_turn = await rate_limiter.get_turn() + if not got_turn: + return { + "success": False, + "message": "rate-limit wait timeout" + } + + # Try to send the message: + try: + mail.message["From"] = self.__email + response = await self.__smtp.send_message(mail.message) + return { + "success": True, + "message": f"mail accepted - {response[-1]}" + } + + # If something goes wrong: + except Exception as exception: + self.__printer(exception) + return { + "success": False, + "message": str(exception) + } + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + from utils_v2.string import json + + async def test(): + + mail_client = AsyncSMTPClient( + email = "sender@gmail.com", + password = "zcaf nmqy ncfz fave", + server = "smtp.gmail.com", + rate_limiters = None + ) + + my_mail = SMTPMessage( + to_email = "orangebhopli@gmail.coms", + subject = "Bhopli is the best!", + cc_emails = None, + bcc_emails = None + ) + my_mail.add_html( + """ + + + + + Sample HTML String + + + +

    Hello, Bhopli!

    +

    Bhopli is the best, most well-behaved cat in the known universe.

    + + + """ + ) + my_mail.add_text("This is how you should pet her 👇") + my_mail.add_inline_image(r"/path/to/image/cat_petting.png") + my_mail.add_attachment(r"/path/to/file/sample_label.pdf") + + await mail_client.login() + result = await mail_client.send(my_mail) + print("MAIL RESULT:", json.to_string(result)) + await mail_client.logout() + + asyncio.run(test()) diff --git a/mail/mail_parser.py b/mail/mail_parser.py new file mode 100644 index 0000000..75b7db3 --- /dev/null +++ b/mail/mail_parser.py @@ -0,0 +1,266 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 10th Dec., 2024 + + OBJECTIVE: + + To parse raw mail bodies and give a structure that is suitable for storing in No-SQL databases like MongoDB. The + raw mail's text is expected to be compliant with standard defined in RFC 5322, RFC 2045, and maybe a few more. + + REFERENCES: + + 1. GitHub: https://github.com/SpamScope/mail-parser + 2. RFC 5322: https://datatracker.ietf.org/doc/html/rfc5322 + 3. RFC 2045: https://datatracker.ietf.org/doc/html/rfc2045 + 4. StackOverflow: https://stackoverflow.com/questions/17874360/python-how-to-parse-the-body-from-a-raw-email-given-that-raw-email-does-not + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with mails: +import email +from email.message import Message +from email.utils import parsedate_tz +from email.utils import parseaddr + +# To parse the HTML content in the mail: +from bs4 import BeautifulSoup + +# To work with datatypes: +from typing import Any, Dict, List, Literal + +# To work with various encodings: +import base64 +import quopri + +# To work with date and time: +import datetime +import pytz +import time + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def parse_addr(addr_header: str) -> List[Dict[str, str]]: + + # If the field is null, we return null: + if addr_header is None: return [] + + # Create an empty variable that will hold the results: + addrs = [] + + # Iterate through the addresses and parse them: + for a in addr_header.split(","): + n, e = parseaddr(a.strip()) + addrs.append({ + "name": n.strip() or e.strip(), + "email": e.strip() + }) + + # Done here: + return addrs + + +# --------------------------------------------------------------------------------------------------------------------- + + +def parse_date(date_header: str) -> datetime.datetime | None: + + # Try to parse the date header: + date_tuple = parsedate_tz(date_header) + + # If the date header was parsed successfully, we assemble + # the parts to get an aware object in UTC timezone: + if date_tuple: + dt = datetime.datetime(*date_tuple[:6], tzinfo = pytz.FixedOffset(int(date_tuple[-1] / 60))) + dt = date_time.to_timezone(dt, date_time.TIMEZONE_UTC) + return dt + + # In case of an invalid date header: + else: return None + + +# --------------------------------------------------------------------------------------------------------------------- + + +def decode_payload( + raw_payload: str | bytes, + content_main_type: str, + content_charset: str | None, + content_transfer_encoding: Literal[None, "base64", "quoted-printable"] +) -> str | bytes: + + # Start by assuming nothing needs to be done: + payload = raw_payload + + # We decode various kinds of parts: + match content_transfer_encoding: + + # This is just unencoded plaintext: + case None: + pass + + # Typically see with attachments: + case "base64": + charset = content_charset or "utf-8" + payload = raw_payload + payload = base64.b64decode(payload) + if content_main_type == "text": payload = payload.decode(charset) + + # Typically seen with HTML parts: + case "quoted-printable": + charset = content_charset or "utf-8" + payload = raw_payload.encode(charset) + payload = quopri.decodestring(payload) + if content_main_type == "text": payload = payload.decode(charset) + + # Done here: + return payload + + +# --------------------------------------------------------------------------------------------------------------------- + + +def parse_part( + part: Message | List[Message] +) -> Dict[str, Any]: + + # Start by extracting basic details: + part_json = { + "boundary": part.get_boundary(), + "contentType": part.get_content_type(), + "contentMainType": part.get_content_maintype(), + "contentSubType": part.get_content_subtype(), + "contentCharset": part.get_content_charset(), + "contentTransferEncoding": part.get("Content-Transfer-Encoding"), + "contentDisposition": part.get_content_disposition(), + "filename": part.get_filename(), + "contentId": part.get("Content-ID") + } + + # Process the payload of this part: + if part_json["contentMainType"] == "multipart": + part_json["payload"] = [parse_part(sub_part) for sub_part in part.get_payload(decode = False)] + else: + part_json["payload"] = decode_payload( + raw_payload = part.get_payload(decode = False), + content_main_type = part_json["contentMainType"], + content_charset = part_json["contentCharset"], + content_transfer_encoding = part_json["contentTransferEncoding"] + ) + + # Done here; + return part_json + + +# --------------------------------------------------------------------------------------------------------------------- + + +def parse(raw_mail: str | bytes) -> Dict[str, Any]: + + """ + To parse the raw mail text to a usable JSON that can even be stored on a No-SQL database like MongoDB. + DOCUMENTATION: + 1. GitHub: https://github.com/SpamScope/mail-parser + 2. RFC 5322: https://datatracker.ietf.org/doc/html/rfc5322 + 3. RFC 2045: https://datatracker.ietf.org/doc/html/rfc2045 + :param raw_mail: The raw mail body that adheres to RFC 5322 and RFC 2045 (among others). + :return: The parsed JSON format (dict) of the mail. + """ + + # Parse the raw format: + if isinstance(raw_mail, str): parsed_mail = email.message_from_string(raw_mail) + else: parsed_mail = email.message_from_bytes(raw_mail) + + # Extract the most basic details: + mail_json = { + "ts": parse_date(parsed_mail["Date"]), + "headers": {k: v for k, v in parsed_mail.items()}, + "from": parse_addr(parsed_mail["From"]), + "to": parse_addr(parsed_mail["To"]), + "cc": parse_addr(parsed_mail["Cc"]), + "bcc": parse_addr(parsed_mail["Bcc"]), + "subject": parsed_mail["Subject"], + "payload": None + } + + # Iterate through each part of the mail for multipart mails: + if parsed_mail.is_multipart(): mail_json["payload"] = parse_part(parsed_mail) + + # When the mails are not multipart, just plaintext: + else: mail_json["payload"] = parsed_mail.get_payload() + + # Done here: + return mail_json + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + from utils_v2.system import files + + mail_string_raw = files.read_file(r"/home/developer/Downloads/raw_mail_test.txt") + parse_results = parse(mail_string_raw) + + print(json.to_string(parse_results, default = str)) diff --git a/network/__init__.py b/network/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/network/ip.py b/network/ip.py new file mode 100644 index 0000000..134078f --- /dev/null +++ b/network/ip.py @@ -0,0 +1,173 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 12th Jul., 2024 + + OBJECTIVE: + + To provide an easy way to get geolocation information of an IP address. + + REFERENCES: + + 1) https://medium.com/@tubelwj/how-to-retrieve-ip-geolocation-information-in-python-929e15041e3e + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For working with IP Addresses: +import ipaddress + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def ipv4_to_int(ip_string): + + """ + Converts an IP (v4) string to an integer value. + :param ip_string: The IP address (v4) that you want to convert to integer format. + :return: An integer representation of the IP (v4) address. + """ + + ip_numerical = int(ipaddress.IPv4Address(ip_string)) + return ip_numerical + + +# --------------------------------------------------------------------------------------------------------------------- + + +def int_to_ipv4(ip_numerical): + + """ + Interprets the IP (v4) value from the given integer value. + :param ip_numerical: The integer value that represents an IP (v4) address. + :return: + """ + + ip_string = str(ipaddress.IPv4Address(ip_numerical)) + return ip_string + + +# --------------------------------------------------------------------------------------------------------------------- + + +def ipv4_to_bin(ip_string): + + """ + Converts an input IP (v4) address to the binary string that represents the 32 bits. + :param ip_string: The IP (v4) string in a format like "192.168.0.1" + :return: The binary representation (as a string) of the input IP address. + """ + + ip_binary = bin(int(ipaddress.IPv4Address(ip_string)))[2:].zfill(32) + return ip_binary + + +# --------------------------------------------------------------------------------------------------------------------- + + +def bin_to_ipv4(ip_binary): + + """ + Interprets the IP (v4) value from the given binary string. + :param ip_binary: The string of 1s and 0s that represents the IP (v4) address. + :return: The IP (v4) address as a string. + """ + + ip_string = str(ipaddress.IPv4Address(int(ip_binary, 2))) + return ip_string + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_ipv4_range(ip_string, as_string = True): + + """ + Given a network description in the format "88.95.100.128/25", this function tells you the first and last IP + addresses of that network. Useful for determining if an IP address lies in a network. + :param ip_string: The input network description in the format "88.95.100.128/25" + :param as_string: To select between integer and string formats for the IP range output. + :return: The first and last IP addresses of the input network, and the count. + """ + + # Extract the components of the string: + ip_components = ip_string.split("/") + ip_addr = ipv4_to_int(ip_components[0]) + ip_bits = int(ip_components[1]) + + # Convert the mask number to binary representation: + ip_mask = (1 << ip_bits) - 1 + ip_mask = ip_mask << (32 - ip_bits) + inv_ip_mask = (~ip_mask) & 0xFFFF + + # Figure out the start and end IP addresses: + start_ip = ip_addr & ip_mask + end_ip = ip_addr | inv_ip_mask + count = end_ip - start_ip + 1 + + # If the IPs are needed as strings, we perform the conversion: + if as_string: + start_ip = int_to_ipv4(start_ip) + end_ip = int_to_ipv4(end_ip) + + # Done here: + return start_ip, end_ip, count + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + print(ipv4_to_int("255.255.255.255")) + print(ipv4_to_int("x.x.x.x")) diff --git a/network/ping.py b/network/ping.py new file mode 100644 index 0000000..5ea23b2 --- /dev/null +++ b/network/ping.py @@ -0,0 +1,201 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 28th Jun, 2024 + + OBJECTIVE: + + To provide a way to ping a server and get the traceroute dump. + + REFERENCES: + + 1) https://www.geeksforgeeks.org/traceroute-implementation-on-python/ + + DOWNLOADS: + + N/A + +""" + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# Utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# For networking: +import socket +from scapy.all import * + +# For running the script from the terminal: +import argparse + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def get_name_and_addr(destination): + + # If the user provided the IP address: + if ( + regex.match(destination, regex.REGEX_IPV4) or + regex.match(destination, regex.REGEX_IPV6) + ): + try: destination_name = socket.gethostbyaddr(destination)[0] + except Exception as exception: destination_name = "*" + destination_ip = destination + + # If the provided destination was the domain name: + else: + destination_name = destination + try: destination_ip = socket.gethostbyname(destination) + except Exception as exception: destination_ip = "*" + + # Done here: + return destination_name, destination_ip + + +# --------------------------------------------------------------------------------------------------------------------- + + +def tracert( + destination, + max_hops = 30, + timeout = 2.0, + port = 33434 +): + + # Initialize the variables: + destination_name, destination_ip = get_name_and_addr(destination) + full_trace = [] + ttl = 1 + + # Keep noting hops till the limit is reached: + while ttl <= max_hops: + + # Create a JSON for this stage: + this_hop = { + "destAddr": destination_ip, + "destName": destination_name, + "hopNo": ttl - 1, + "isDest": False, + "hopAddr": None, + "hopName": None, + "ts": None + } + + # Create the IP and UDP headers and combine them: + ip_packet = IP(dst = destination, ttl = ttl) + udp_packet = UDP(dport = port) + trace_packet = ip_packet / udp_packet + + # Send the packet and receive a reply and note down the timestamp: + reply = sr1(trace_packet, timeout = timeout, verbose = 0) + this_hop["ts"] = date_time.get_current_utc_date_time(as_string = True) + + # No response: + if reply is None: this_hop["hopAddr"] = this_hop["hopName"] = "*" + + # If some response was received, we note the values and break out if this was the destination hop: + else: + this_hop["hopName"], this_hop["hopAddr"] = get_name_and_addr(f"{reply.src}") + if reply.type == 3: + this_hop["isDest"] = True + full_trace.append(this_hop) + break + + # Carry on to the next hop: + full_trace.append(this_hop) + ttl += 1 + + # Done here: + return full_trace + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + parser = argparse.ArgumentParser(description = "Traceroute Implementation in Python!") + + parser.add_argument( + "dest", + help = "Destination (Name or IP address)." + ) + parser.add_argument( + "-m", + "--max-hops", + type = int, + default = 30, + help = + "Maximum number of hops (default: 30)." + ) + parser.add_argument( + "-t", + "--timeout", + type = float, + default = 2.0, + help = "Timeout for each packet in seconds (default: 2.0)." + ) + parser.add_argument( + "-p", + "--port", + type = int, + default = 33434, + help = "The port to probe at the destination (default: 33434)." + ) + + args = parser.parse_args() + + trace = tracert( + destination = args.dest, + max_hops = args.max_hops, + timeout = args.timeout, + port = args.port + ) + print("TRACE:", json.to_string(trace)) diff --git a/nse/__init__.py b/nse/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/controllers/__init__.py b/nse/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/controllers/base.py b/nse/controllers/base.py new file mode 100644 index 0000000..45d2229 --- /dev/null +++ b/nse/controllers/base.py @@ -0,0 +1,443 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 28th Nov., 2024 + + OBJECTIVE: + + To provide a base class for common behaviour of NSE's APIs. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" +import asyncio +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time +from utils_v2.nse.models.api_call import NSEApiResponse + +# To make API calls: +import httpx + +# To work with date and time: +import datetime + +# For working with datatypes: +from typing import Literal, List + +# For debugging: +from icecream import IceCreamDebugger +import inspect + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncNSEBase: + + def __init__( + self, + base_url: str, + data_url: str, + http_client: httpx.AsyncClient = None, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE | ", + debug_only_errors = True + ): + + """ + To be used as a base class for all sorts of NSE scraping. + :param base_url: The base URL (that you open in your browser) for your targeted module. + :param data_url: The internal URL (that NSE's script calls by itself) for your targeted module. + :param http_client: An HTTP client to use to make API calls. + :param cookies_refresh_interval: The no. of seconds after which the cookies should get refreshed. + :param debug: Whether, or not, you want to show debugging messages. + :param debug_prefix: The prefix string to use to recognize the module that is printing the debugging text. + :param debug_only_errors: Whether you want to show all debugging messages, or just error messages. + """ + + # Prepare the debugging utility: + self._debug_prefix = debug_prefix + self._printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self._printer.disable() + self._debug_only_errors = debug_only_errors + + # Accept the input configuration: + self._base_url = base_url + self._data_url = data_url + self._http_client = http_client or httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 5.0, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 60.0 # ...... Time to wait for receiving data. + ) + ) + + # Make some provisions for later: + self._cookies = None + self._cookies_refresh_interval = cookies_refresh_interval + self._last_cookies_refresh = datetime.datetime.fromtimestamp(0, tz = date_time.TIMEZONE_UTC) + + # For locking asynchronous tasks: + self._exclusive_lock = asyncio.Semaphore(1) + + def enable_debug(self): + self._printer.enable() + + def disable_debug(self): + self._printer.disable() + + def debug_only_errors(self): + self._debug_only_errors = True + + def debug_everything(self): + self._debug_only_errors = False + + # ┏┓ • + # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ + # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ + # ┛ + + @property + def cookies(self): + return self._cookies + + # ┓┏ ┓ + # ┣┫┏┓┃┏┓┏┓┏┓┏ + # ┛┗┗ ┗┣┛┗ ┛ ┛ + # ┛ + + @staticmethod + def parse_datetime_string( + dt_str: str, + dt_formats: str | List[str] = None, + input_tz: str = date_time.TIMEZONE_IST, + output_tz: str = date_time.TIMEZONE_UTC + ) -> datetime.datetime | None: + + """ + Handles the date-time conversion and normalization for strings received from NSE. + :param dt_str: The string value as received from NSE. + :param dt_formats: The format(s) in which to attempt to parse the date string. + :param input_tz: The timezone in which the input must be assumed to be. + :param output_tz: The timezone the output must be converted to. + :return: The parsed datetime object, or null if parsing fails. + """ + + # Basic input formatting: + dt_formats = dt_formats or ["%d-%b-%Y"] + + # Try to parse the date-time string: + if isinstance(dt_formats, list): + dt_obj = date_time.parse_date_time( + input_value = dt_str, + date_formats = dt_formats + ) + else: + try: dt_obj = datetime.datetime.strptime(dt_str, dt_formats) + except: dt_obj = None + + # If the parsing failed: + if not dt_obj: return None + + # If parsed successfully: + return date_time.to_timezone( + datetime_object = date_time.as_if_timezone( + datetime_object = dt_obj, + timezone = input_tz + ), + timezone = output_tz + ) + + # ┏┓ ┓ • ┳┳┓ ┓ • + # ┃ ┏┓┏┓┃┏┓┏┓┏ ┃┃┃┏┓┃┏┓┏┓┏┓ + # ┗┛┗┛┗┛┛┗┗┗ ┛ ┛ ┗┗┻┛┗┗┛┗┗┫ + # ┛ + + @property + def seconds_since_cookies_refreshed(self): + return (date_time.get_current_utc_date_time() - self._last_cookies_refresh).total_seconds() + + async def refresh_cookies( + self, + force_refresh = True, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> bool: + + """ + To get cookies for the given base URL. NSE has some sort of strict cookies and origin policy that is beyond my + current understanding. But I have noticed that if you furnish the right base URL and then use that, NSE will + respond just fine. + USAGE: Call this right after you initialize your class and then call it every so often after that. + :param force_refresh: Set to True to ignore the time criterion and refresh the cookie even if it is new. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The cookies in the 'data' field of the + """ + + # Start by assuming failure: + success = False + http_code = None + + # Ensure that only one cookie-refresh attempt is being made at a time: + async with self._exclusive_lock: + + # We refresh the cookies only if the time has elapsed, + # or we have been asked to forcefully refresh the cookies: + if ( + force_refresh or + self._cookies is None or + self.seconds_since_cookies_refreshed > self._cookies_refresh_interval + ): + + # Make the API call: + api_response = await self.get( + url = self._base_url, + headers = { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US,en;q=0.9", + "Upgrade-Insecure-Requests": "1", + "Sec-Ch-Ua": "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\"", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" + }, + refresh_cookies = False, + force_refresh_cookies = False, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + http_code = api_response.httpCode + + # If the API call succeeds: + if api_response.httpCode in [200]: + self._last_cookies_refresh = date_time.get_current_utc_date_time(as_string = False) + self._cookies = api_response.response.cookies + success = True + + # Done here: + if not success or not self._debug_only_errors: self._printer(success, http_code) + return success + + # ┏┓┏┓┳ ┏┓ ┓┓• + # ┣┫┃┃┃ ┃ ┏┓┃┃┓┏┓┏┓ + # ┛┗┣┛┻ ┗┛┗┻┗┗┗┛┗┗┫ + # ┛ + + async def _get( + self, + url: str = None, + headers: dict = None, + params: dict = None, + cookies: httpx.Cookies | dict = None + ) -> (httpx.Response | None, Exception | None): + + """ + To call an API once using the GET method. + :param url: A custom URL to hit. If not specified, the data URL will be hit. + :param headers: Custom headers to use. If not specified, default values will be used. + :param params: The params to send in the query string itself. + :param cookies: The cookies to use when calling the API. + :return: The raw response from the API call and any exception that occurred. + """ + + # Start by assuming failure: + response = None + excp = None + + try: + + # Make the API call: + response = await self._http_client.get( + url = url or self._data_url, + headers = headers or { + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "en-US,en;q=0.9", + "Host": "www.nseindia.com", + "Referer": self._base_url, + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "Sec-GPC": "1", + "Upgrade-Insecure-Requests": "1", + "TE": "trailers", + "Sec-Ch-Ua": "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\"", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" + }, + params = params, + cookies = cookies + ) + + # If something goes wrong: + except Exception as exception: + excp = exception + self._printer(exception, url, params) + + # Done here: + return response, excp + + async def get( + self, + url: str = None, + headers: dict = None, + params: dict = None, + cookies: httpx.Cookies | dict = None, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + Call an API using the GET method. + :param url: A custom URL to hit. If not specified, the data URL will be hit. + :param headers: Custom headers to use. If not specified, default values will be used. + :param params: The params to send in the query string itself. + :param cookies: Any custom cookies to use when calling the API. If not given, the class's internal cookies will + be used by default. Use this only to override the default one. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Select and refresh the cookies as needed: + if cookies: use_cookies = cookies + else: + if refresh_cookies: await self.refresh_cookies(force_refresh = force_refresh_cookies) + use_cookies = self._cookies + + # Prepare the structure of the response: + frame = inspect.stack()[1] + caller_locals = frame[0].f_locals + calling_class = caller_locals.get("self", None) + calling_class = calling_class.__class__.__name__ if calling_class else "" + calling_function = inspect.stack()[1].function + api_response = NSEApiResponse( + action = f"{calling_class}.{calling_function}", + url = url or self._data_url, + method = "GET", + inputs = {"headers": headers, "params": params} + ) + + # Try as many times as asked: + for attempt in range(retry_count): + + # Simple debugging statement: + if not self._debug_only_errors: + self._printer("API call.", attempt) + + # Make the API call: + raw_response, exception = await self._get( + url = url, + headers = headers, + params = params, + cookies = use_cookies + ) + + # Populate the response model: + if raw_response is not None: + api_response.response = raw_response + api_response.httpCode = raw_response.status_code + api_response.message = raw_response.reason_phrase + if raw_response.status_code in [200]: api_response.success = True + if exception is not None: + api_response.exception = exception + api_response.message = str(exception) + + # If the API call succeeded: + if api_response.success: break + + # If the API call failed: + await asyncio.sleep(backoff_seconds) + backoff_seconds *= backoff_multiplier + + # Done here: + return api_response + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/nse/controllers/bhavcopy/__init__.py b/nse/controllers/bhavcopy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/controllers/bhavcopy/equities.py b/nse/controllers/bhavcopy/equities.py new file mode 100644 index 0000000..e040d35 --- /dev/null +++ b/nse/controllers/bhavcopy/equities.py @@ -0,0 +1,326 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Saturday, 4th Jan., 2025. + + OBJECTIVE: + + To provide a way to fetch the daily BhavCopy from NSE. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime +import pytz + +# To work with datatypes: +from typing import Any, List + +# To work with tabulated dataL +import pandas as pd + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEEquitiesBhavCopy(AsyncNSEBase): + + def __init__( + self, + http_client: httpx.AsyncClient, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (Eq. BhavCopy) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/all-reports", + data_url = r"https://nsearchives.nseindia.com/products/content/sec_bhavdata_full_03012025.csv", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + @staticmethod + def parse_float(value): + try: return float(value) + except ValueError: return None + + @staticmethod + def parse_int(value): + try: return int(value) + except ValueError: return None + + async def get_data( + self, + target_date: datetime.datetime, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the corporate event calendar. + :param target_date: The starting date (inclusive) from which the events must be fetched. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Figure out the file name: + date_time.to_timezone(target_date, date_time.TIMEZONE_IST) + file_name = f"sec_bhavdata_full_{target_date.strftime('%d%m%Y')}.csv" + + # Make the API call: + api_response = await self.get( + url = f"https://nsearchives.nseindia.com/products/content/{file_name}", + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" + }, + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: + api_response.data = io.BytesIO(await api_response.get_content()) + api_response.data.seek(0) + else: + try: api_response.data = self.format_data( + raw_data = await api_response.get_content(), + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + def format_data( + self, + raw_data: bytes | io.BytesIO, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[dict] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_data: The raw data as scraped from NSE. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_data is None: return raw_data + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Ensure that we have a BytesIO object, + # and that we are pointing at the start: + if isinstance(raw_data, bytes): + raw_data = io.BytesIO(raw_data) + raw_data.seek(0) + + # Read the data into Pandas: + bhav_df = pd.read_csv(raw_data) + bhav_df.rename( + columns = {c: c.strip() for c in bhav_df.columns.to_list()}, + inplace = True + ) + bhav_df.rename( + columns = { + "SYMBOL": "symbol", + "SERIES": "segment", + "DATE1": "date", + "PREV_CLOSE": "prevClose", + "OPEN_PRICE": "open", + "HIGH_PRICE": "high", + "LOW_PRICE": "low", + "CLOSE_PRICE": "close", + "LAST_PRICE": "ltp", + "AVG_PRICE": "vwap", + "TTL_TRD_QNTY": "totVol", + "TURNOVER_LACS": "totCash", + "NO_OF_TRADES": "tradeCount", + "DELIV_QTY": "deliveryVol", + "DELIV_PER": "deliveryPct" + }, + inplace = True + ) + + # Format the data: + for column in ["symbol", "segment", "date"]: + bhav_df[column] = bhav_df[column].apply(lambda x: str(x).strip()) + for column in ["prevClose", "open", "high", "low", "close", "ltp", "vwap", "totCash", "deliveryPct"]: + bhav_df[column] = bhav_df[column].apply(lambda x: self.parse_float(x)) + for column in ["totVol", "deliveryVol"]: + bhav_df[column] = bhav_df[column].apply(lambda x: self.parse_int(x)) + bhav_df["totCash"] *= 1_00_000 + + # Give the date as a timestamp: + bhav_df["scrapeTs"] = timestamp + bhav_df["ts"] = bhav_df["date"].apply(lambda x: self.parse_datetime_string( + dt_str = x, + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + )) + bhav_df["tz"] = "Asia/Kolkata" + + # Keep what is needed, in an order that makes intuitive sense: + bhav_df = bhav_df[[ + "symbol", "segment", + "prevClose", "open", "high", "low", "close", "ltp", "vwap", + "totVol", "totCash", "deliveryVol", "deliveryPct", + "date", "ts", "tz", "scrapeTs" + ]] + + # Done here: + formatted_data = bhav_df.to_dict(orient = "records") + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an HTTP client: + test_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 2.5, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 2.5 # ....... Time to wait for receiving data. + ) + ) + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSEEquitiesBhavCopy(http_client = test_client) + + # Get and show the data: + target_date = datetime.datetime.strptime("20250103", "%Y%m%d") + api_response = await my_nse.get_data( + target_date = target_date, + return_raw = False + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("BHAV-COPY:", json.to_string(api_response.data[-10:], default = str)) + + asyncio.run(main()) diff --git a/nse/controllers/bhavcopy/fno.py b/nse/controllers/bhavcopy/fno.py new file mode 100644 index 0000000..82528d5 --- /dev/null +++ b/nse/controllers/bhavcopy/fno.py @@ -0,0 +1,325 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 6th Jan., 2025. + + OBJECTIVE: + + To provide a way to fetch the daily BhavCopy from NSE. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime +import pytz + +# To work with datatypes: +from typing import Any, List + +# To work with tabulated dataL +import pandas as pd + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEFNOBhavCopy(AsyncNSEBase): + + def __init__( + self, + http_client: httpx.AsyncClient, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (FNO BhavCopy) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/all-reports", + data_url = r"https://nsearchives.nseindia.com/content/trdops/FNO_BC02012025.DAT", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + @staticmethod + def parse_float(value): + try: return float(value) + except ValueError: return None + + @staticmethod + def parse_int(value): + try: return int(value) + except ValueError: return None + + async def get_data( + self, + target_date: datetime.datetime, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the corporate event calendar. + :param target_date: The starting date (inclusive) from which the events must be fetched. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Figure out the file name: + date_time.to_timezone(target_date, date_time.TIMEZONE_IST) + file_name = f"FNO_BC{target_date.strftime('%d%m%Y')}.DAT" + + # Make the API call: + api_response = await self.get( + url = f"https://nsearchives.nseindia.com/content/trdops/{file_name}", + headers = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" + }, + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: + api_response.data = io.BytesIO(await api_response.get_content()) + api_response.data.seek(0) + else: + try: api_response.data = self.format_data( + raw_data = await api_response.get_content(), + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + def format_data( + self, + raw_data: bytes | io.BytesIO, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[dict] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_data: The raw data as scraped from NSE. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_data is None: return raw_data + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Ensure that we have a BytesIO object, + # and that we are pointing at the start: + if isinstance(raw_data, bytes): + raw_data = io.BytesIO(raw_data) + raw_data.seek(0) + + # Read the data into Pandas: + bhav_df = pd.read_csv( + raw_data, + header = None, + names = [ + "symbol", "segment", "underlying", "expiry", "strike", + "type", "G?", "H?", "I?", "prevClose", + "open", "high", "low", "close", "O?", + "totVol", "totCash", "oi", "oiChg", "T?", + "U?", "date", "W?", "X?", "Y?", + "Z?" + ] + ) + # Format the data: + for column in ["symbol", "segment", "type", "underlying", "expiry", "date"]: + bhav_df[column] = bhav_df[column].apply(lambda x: str(x).strip()) + for column in ["strike", "prevClose", "open", "high", "low", "close", "totCash"]: + bhav_df[column] = bhav_df[column].apply(lambda x: self.parse_float(x)) + for column in ["totVol", "oi", "oiChg"]: + bhav_df[column] = bhav_df[column].apply(lambda x: self.parse_int(x)) + + # Handle segment, type and other normalizations: + bhav_df["isIndex"] = bhav_df["segment"].apply(lambda x: True if x.endswith("IDX") else False) + bhav_df["segment"] = bhav_df["segment"].apply(lambda x: x[:3]) + bhav_df["type"] = bhav_df.apply(lambda x: None if x["segment"] == "FUT" else x["type"], axis = 1) + bhav_df["strike"] = bhav_df.apply(lambda x: None if x["segment"] == "FUT" else x["strike"], axis = 1) + + # Give the expiry as a timestamp: + bhav_df["expiryTs"] = bhav_df["expiry"].apply(lambda x: self.parse_datetime_string( + dt_str = f"{int(x):0>8}", + dt_formats = ["%d%m%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + )) + bhav_df["expiryTz"] = "Asia/Kolkata" + + # Give the data recording date as a timestamp: + bhav_df["ts"] = bhav_df["date"].apply(lambda x: self.parse_datetime_string( + dt_str = x, + dt_formats = ["%d%m%Y", "%d-%b-%Y", "%d/%b/%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + )) + bhav_df["tz"] = "Asia/Kolkata" + bhav_df["scrapeTs"] = timestamp + + # Keep what is needed, in an order that makes intuitive sense: + bhav_df = bhav_df[[ + "symbol", "segment", "type", "underlying", "isIndex", "expiry", "expiryTs", "expiryTz", "strike", + "prevClose", "open", "high", "low", "close", "totVol", "totCash", "oi", "oiChg", + "date", "ts", "tz", "scrapeTs" + ]] + + # Done here: + formatted_data = bhav_df.to_dict(orient = "records") + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an HTTP client: + test_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 2.5, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 2.5 # ....... Time to wait for receiving data. + ) + ) + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSEFNOBhavCopy(http_client = test_client) + + # Get and show the data: + target_date = datetime.datetime.strptime("20250103", "%Y%m%d") + api_response = await my_nse.get_data( + target_date = target_date, + return_raw = False + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("BHAV-COPY:", json.to_string(api_response.data[-10:], default = str)) + + asyncio.run(main()) diff --git a/nse/controllers/calendar/__init__.py b/nse/controllers/calendar/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/controllers/calendar/corporate_actions.py b/nse/controllers/calendar/corporate_actions.py new file mode 100644 index 0000000..e462b0e --- /dev/null +++ b/nse/controllers/calendar/corporate_actions.py @@ -0,0 +1,282 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 28th Nov., 2024 + + OBJECTIVE: + + To provide a way to retrieve dates of important events like financial-results, stock-splits, fund-raising, etc. + from NSE's portal. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# data models: +from utils_v2.nse.models.calendar import NSECorporateAction + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime +import pytz + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSECorporateActionsCalendar(AsyncNSEBase): + + # The types of corporate actions/entities: + KIND_EQUITIES = "equities" + KIND_MUTUAL_FUNDS = "mf" + KIND_DEBT = "debt" + KIND_SME = "sme" + + def __init__( + self, + http_client: httpx.AsyncClient = None, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (C.Act.) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/companies-listing/corporate-filings-actions", + data_url = r"https://www.nseindia.com/api/corporates-corporateActions", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + kind: str = KIND_EQUITIES, + from_date: datetime.datetime = None, + to_date: datetime.datetime = None, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the corporate event calendar. + :param kind: The option between 'equities", "mf", "debt", and "sme". + :param from_date: The starting date (inclusive) from which the events must be fetched. + :param to_date: The ending date (inclusive) till which the events must be fetched. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Prepare the inputs: + now = date_time.get_current_utc_date_time(as_string = False) + from_date = date_time.to_timezone(from_date or now, timezone = date_time.TIMEZONE_IST).strftime("%d-%m-%Y") + to_date = date_time.to_timezone(to_date or now, timezone = date_time.TIMEZONE_IST).strftime("%d-%m-%Y") + + # Make the API call: + api_response = await self.get( + params = { + "index": kind, + "from_date": from_date, + "to_date": to_date, + }, + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + kind = kind, + timestamp = date_time.get_current_utc_date_time(as_string = True), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + def format_data( + self, + raw_json: List[dict], + kind: str = None, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[NSECorporateAction] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param kind: The kind of data pulled using the 'get_data' method. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Format the data: + formatted_data = [] + for action in raw_json: + formatted_data.append(NSECorporateAction(**{ + "scrapeTs": timestamp, + "kind": kind, + "symbol": action["symbol"], + "name": action["comp"], + "isin": action["isin"], + "series": action["series"], + "ind": action["ind"], + "faceVal": float(action["faceVal"]), + "action": action["subject"], + "exTs": self.parse_datetime_string(action["exDate"], ["%d-%b-%Y"]), + "recTs": self.parse_datetime_string(action["recDate"]), + "bcStartTs": self.parse_datetime_string(action["bcStartDate"]), + "bcEndTs": self.parse_datetime_string(action["bcEndDate"]), + "ndStartTs": self.parse_datetime_string(action["ndStartDate"]), + "ndEndTs": self.parse_datetime_string(action["ndEndDate"]), + "caBroadcastTs": self.parse_datetime_string(action["caBroadcastDate"]) + })) + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSECorporateActionsCalendar() + + # Get and show the data: + now = date_time.get_current_ist_date_time() + to_date = now + datetime.timedelta(days = 31) + from_date = now - datetime.timedelta(days = 31) + print("FROM :", from_date) + print("TO :", to_date) + api_response = await my_nse.get_data( + kind = NSECorporateActionsCalendar.KIND_EQUITIES, + from_date = from_date, + to_date = to_date, + return_raw = False + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("CORPORATE ACTIONS:", json.to_string(api_response.data, default = str)) + else: raise api_response.exception + + asyncio.run(main()) diff --git a/nse/controllers/calendar/corporate_events.py b/nse/controllers/calendar/corporate_events.py new file mode 100644 index 0000000..afe2769 --- /dev/null +++ b/nse/controllers/calendar/corporate_events.py @@ -0,0 +1,273 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 28th Nov., 2024 + + OBJECTIVE: + + To provide a way to retrieve dates of important events like financial-results, stock-splits, fund-raising, etc. + from NSE's portal. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# Data models: +from utils_v2.nse.models.calendar import NSECorporateEvent + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSECorporateEventsCalendar(AsyncNSEBase): + + # Index types: + KIND_EQUITIES = "equities" + KIND_SME = "sme" + + def __init__( + self, + http_client: httpx.AsyncClient = None, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (CECal) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/companies-listing/corporate-filings-event-calendar", + data_url = r"https://www.nseindia.com/api/event-calendar", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + kind: str = KIND_EQUITIES, + from_date: datetime.datetime = None, + to_date: datetime.datetime = None, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the corporate event calendar. + :param kind: The type of index you want. A choice between "equities" and "sme" + :param from_date: The starting date (inclusive) from which the events must be fetched. + :param to_date: The ending date (inclusive) till which the events must be fetched. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Prepare the inputs: + now = date_time.get_current_utc_date_time(as_string = False) + from_date = date_time.to_timezone(from_date or now, timezone = date_time.TIMEZONE_IST).strftime("%d-%m-%Y") + to_date = date_time.to_timezone(to_date or now, timezone = date_time.TIMEZONE_IST).strftime("%d-%m-%Y") + + # Make the API call: + api_response = await self.get( + params = { + "index": kind, + "from_date": from_date, + "to_date": to_date + }, + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + kind = kind, + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + @staticmethod + def format_data( + raw_json: List[dict], + kind: str = None, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[NSECorporateEvent] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param kind: The kind of data pulled using the 'get_data' method. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Format the data: + formatted_data = [ + { + "scrapeTs": timestamp, + "kind": kind, + "symbol": event.get("symbol", event.get("bm_symbol")), + "name": event.get("company", event.get("sm_name")), + "ts": date_time.to_timezone( + date_time.parse_date_time( + event.get("date", event.get("bm_date")), + timezone = date_time.TIMEZONE_IST + ), + timezone = date_time.TIMEZONE_UTC + ), + "tz": "Asia/Kolkata", + "purpose": event.get("purpose", event.get("bm_purpose")), + "description": event.get("bm_desc"), + "attachment": event.get("attachment") + } for event in raw_json + ] + formatted_data = [NSECorporateEvent(**d) for d in formatted_data] + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSECorporateEventsCalendar() + + # Get and show the data: + api_response = await my_nse.get_data( + kind = NSECorporateEventsCalendar.KIND_EQUITIES, + from_date = datetime.datetime(year = 2024, month = 1, day = 1), + to_date = datetime.datetime(year = 2025, month = 1, day = 1), + return_raw = False + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("CORPORATE EVENT CALENDAR:", json.to_string(api_response.data, default = str)) + + asyncio.run(main()) diff --git a/nse/controllers/calendar/examples/20241128_formatted_nse_corporate_event_calendar.json b/nse/controllers/calendar/examples/20241128_formatted_nse_corporate_event_calendar.json new file mode 100644 index 0000000..55df7c6 --- /dev/null +++ b/nse/controllers/calendar/examples/20241128_formatted_nse_corporate_event_calendar.json @@ -0,0 +1,178 @@ +[ + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "AAREYDRUGS", + "company": "Aarey Drugs & Pharmaceuticals Limited", + "eventDate": "2024-11-28 18:07:00+00:00", + "eventType": "Fund Raising/Other business matters", + "brief": "To consider Fund Raising and other business matters" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "ASTERDM", + "company": "Aster DM Healthcare Limited", + "eventDate": "2024-11-28 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider other business matters pertaining to Preferential Issue." + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "EROSMEDIA", + "company": "Eros International Media Limited", + "eventDate": "2024-11-28 18:07:00+00:00", + "eventType": "Financial Results/Other business matters", + "brief": "To consider and approve the financial results for the quarter and year ended March 31, 2024 and other business matters" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "MUFIN", + "company": "Mufin Green Finance Limited", + "eventDate": "2024-11-28 18:07:00+00:00", + "eventType": "Fund Raising", + "brief": "To consider Fund Raising by Issue of Secured Unlisted Non Convertible Debenture." + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "ONMOBILE", + "company": "OnMobile Global Limited", + "eventDate": "2024-11-28 18:07:00+00:00", + "eventType": "Fund Raising", + "brief": "To consider Fund Raising" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "PRIVISCL", + "company": "Privi Speciality Chemicals Limited", + "eventDate": "2024-11-28 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider and Approve \"Privi Employee Stock Option Scheme - 2024\"" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "SOUTHBANK", + "company": "The South Indian Bank Limited", + "eventDate": "2024-11-28 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider, decide on exercise of call option of Bank s Non-convertible, fully paid-up, unsecured, perpetual, Basel III Compliant, Tier I Bonds, listed in BSE" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "BCG", + "company": "Brightcom Group Limited", + "eventDate": "2024-11-29 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider other business matters" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "BCG", + "company": "Brightcom Group Limited", + "eventDate": "2024-11-29 18:07:00+00:00", + "eventType": "Financial Results", + "brief": "To consider and approve the financial results for the period ended Jun 30, 2024" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "SIKKO", + "company": "Sikko Industries Limited", + "eventDate": "2024-11-29 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider discuss and decide terms and conditions such as determination of the rights issue price, rights entitlement ratio, record date and other matters incidental orconnected therewith." + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "AGIIL", + "company": "Agi Infra Limited", + "eventDate": "2024-12-01 18:07:00+00:00", + "eventType": "Stock Split", + "brief": "To consider stock split of equity shares of the Company" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "MANAKCOAT", + "company": "Manaksia Coated Metals & Industries Limited", + "eventDate": "2024-12-01 18:07:00+00:00", + "eventType": "Fund Raising", + "brief": "To consider Fund Raising" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "NTL", + "company": "Neueon Towers Limited", + "eventDate": "2024-12-01 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider the enclosed business matters" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "PAR", + "company": "Par Drugs and Chemicals Limited", + "eventDate": "2024-12-01 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider other business matters" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "FIBERWEB", + "company": "Fiberweb (India) Limited", + "eventDate": "2024-12-02 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider and discuss about the expansion plans" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "IITL", + "company": "Industrial Investment Trust Limited", + "eventDate": "2024-12-02 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider other business matters" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "SWIGGY", + "company": "Swiggy Limited", + "eventDate": "2024-12-02 18:07:00+00:00", + "eventType": "Financial Results", + "brief": "To consider and approve the financial results for the quarter and half year ended September 30, 2024" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "GBGLOBAL", + "company": "GB Global Limited", + "eventDate": "2024-12-03 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider other business matters" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "MOTOGENFIN", + "company": "The Motor & General Finance Limited", + "eventDate": "2024-12-03 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "Intimation Regarding Independent Directors Meeting will be held on 04.12.2024." + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "DIL", + "company": "Debock Industries Limited", + "eventDate": "2024-12-04 18:07:00+00:00", + "eventType": "Financial Results", + "brief": "DIL : 05-Dec-2024 : The Company has informed the Exchange that a Board meeting to be held on November 27, 2024 has been re-scheduled. Further, the Company has informed the Exchange that the meeting of the Board of Directors of the Company will be held on December 05, 2024, To consider and approve the financial results for the period ended September 30, 2024" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "NTL", + "company": "Neueon Towers Limited", + "eventDate": "2024-12-08 18:07:00+00:00", + "eventType": "Other business matters", + "brief": "To consider enclosed business matters" + }, + { + "ts": "2024-11-28 15:11:22.793824+05:30", + "symbol": "EXIDEIND", + "company": "Exide Industries Limited", + "eventDate": "2025-01-27 18:07:00+00:00", + "eventType": "Financial Results", + "brief": "To consider and approve the financial results for the period ended December 31, 2024" + } +] \ No newline at end of file diff --git a/nse/controllers/calendar/examples/20241128_raw_nse_corporate_event_calendar.json b/nse/controllers/calendar/examples/20241128_raw_nse_corporate_event_calendar.json new file mode 100644 index 0000000..8a35cc6 --- /dev/null +++ b/nse/controllers/calendar/examples/20241128_raw_nse_corporate_event_calendar.json @@ -0,0 +1,156 @@ +[ + { + "symbol": "AAREYDRUGS", + "company": "Aarey Drugs & Pharmaceuticals Limited", + "purpose": "Fund Raising/Other business matters", + "bm_desc": "To consider Fund Raising and other business matters", + "date": "29-Nov-2024" + }, + { + "symbol": "ASTERDM", + "company": "Aster DM Healthcare Limited", + "purpose": "Other business matters", + "bm_desc": "To consider other business matters pertaining to Preferential Issue.", + "date": "29-Nov-2024" + }, + { + "symbol": "EROSMEDIA", + "company": "Eros International Media Limited", + "purpose": "Financial Results/Other business matters", + "bm_desc": "To consider and approve the financial results for the quarter and year ended March 31, 2024 and other business matters", + "date": "29-Nov-2024" + }, + { + "symbol": "MUFIN", + "company": "Mufin Green Finance Limited", + "purpose": "Fund Raising", + "bm_desc": "To consider Fund Raising by Issue of Secured Unlisted Non Convertible Debenture.", + "date": "29-Nov-2024" + }, + { + "symbol": "ONMOBILE", + "company": "OnMobile Global Limited", + "purpose": "Fund Raising", + "bm_desc": "To consider Fund Raising", + "date": "29-Nov-2024" + }, + { + "symbol": "PRIVISCL", + "company": "Privi Speciality Chemicals Limited", + "purpose": "Other business matters", + "bm_desc": "To consider and Approve \"Privi Employee Stock Option Scheme - 2024\"", + "date": "29-Nov-2024" + }, + { + "symbol": "SOUTHBANK", + "company": "The South Indian Bank Limited", + "purpose": "Other business matters", + "bm_desc": "To consider, decide on exercise of call option of Bank s Non-convertible, fully paid-up, unsecured, perpetual, Basel III Compliant, Tier I Bonds, listed in BSE", + "date": "29-Nov-2024" + }, + { + "symbol": "BCG", + "company": "Brightcom Group Limited", + "purpose": "Other business matters", + "bm_desc": "To consider other business matters", + "date": "30-Nov-2024" + }, + { + "symbol": "BCG", + "company": "Brightcom Group Limited", + "purpose": "Financial Results", + "bm_desc": "To consider and approve the financial results for the period ended Jun 30, 2024", + "date": "30-Nov-2024" + }, + { + "symbol": "SIKKO", + "company": "Sikko Industries Limited", + "purpose": "Other business matters", + "bm_desc": "To consider discuss and decide terms and conditions such as determination of the rights issue price, rights entitlement ratio, record date and other matters incidental orconnected therewith.", + "date": "30-Nov-2024" + }, + { + "symbol": "AGIIL", + "company": "Agi Infra Limited", + "purpose": "Stock Split", + "bm_desc": "To consider stock split of equity shares of the Company", + "date": "02-Dec-2024" + }, + { + "symbol": "MANAKCOAT", + "company": "Manaksia Coated Metals & Industries Limited", + "purpose": "Fund Raising", + "bm_desc": "To consider Fund Raising", + "date": "02-Dec-2024" + }, + { + "symbol": "NTL", + "company": "Neueon Towers Limited", + "purpose": "Other business matters", + "bm_desc": "To consider the enclosed business matters", + "date": "02-Dec-2024" + }, + { + "symbol": "PAR", + "company": "Par Drugs and Chemicals Limited", + "purpose": "Other business matters", + "bm_desc": "To consider other business matters", + "date": "02-Dec-2024" + }, + { + "symbol": "FIBERWEB", + "company": "Fiberweb (India) Limited", + "purpose": "Other business matters", + "bm_desc": "To consider and discuss about the expansion plans", + "date": "03-Dec-2024" + }, + { + "symbol": "IITL", + "company": "Industrial Investment Trust Limited", + "purpose": "Other business matters", + "bm_desc": "To consider other business matters", + "date": "03-Dec-2024" + }, + { + "symbol": "SWIGGY", + "company": "Swiggy Limited", + "purpose": "Financial Results", + "bm_desc": "To consider and approve the financial results for the quarter and half year ended September 30, 2024", + "date": "03-Dec-2024" + }, + { + "symbol": "GBGLOBAL", + "company": "GB Global Limited", + "purpose": "Other business matters", + "bm_desc": "To consider other business matters", + "date": "04-Dec-2024" + }, + { + "symbol": "MOTOGENFIN", + "company": "The Motor & General Finance Limited", + "purpose": "Other business matters", + "bm_desc": "Intimation Regarding Independent Directors Meeting will be held on 04.12.2024.", + "date": "04-Dec-2024" + }, + { + "symbol": "DIL", + "company": "Debock Industries Limited", + "purpose": "Financial Results", + "bm_desc": "DIL : 05-Dec-2024 : The Company has informed the Exchange that a Board meeting to be held on November 27, 2024 has been re-scheduled. Further, the Company has informed the Exchange that the meeting of the Board of Directors of the Company will be held on December 05, 2024, To consider and approve the financial results for the period ended September 30, 2024", + "date": "05-Dec-2024" + }, + { + "symbol": "NTL", + "company": "Neueon Towers Limited", + "purpose": "Other business matters", + "bm_desc": "To consider enclosed business matters", + "date": "09-Dec-2024" + }, + { + "symbol": "EXIDEIND", + "company": "Exide Industries Limited", + "purpose": "Financial Results", + "bm_desc": "To consider and approve the financial results for the period ended December 31, 2024", + "date": "28-Jan-2025" + } +] \ No newline at end of file diff --git a/nse/controllers/calendar/examples/20241205_formatted_nse_trading_holiday_calendar.json b/nse/controllers/calendar/examples/20241205_formatted_nse_trading_holiday_calendar.json new file mode 100644 index 0000000..84fb614 --- /dev/null +++ b/nse/controllers/calendar/examples/20241205_formatted_nse_trading_holiday_calendar.json @@ -0,0 +1,542 @@ +[ + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-01-21 18:30:00+00:00", + "weekDay": "Monday", + "event": "Special Holiday", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-01-25 18:30:00+00:00", + "weekDay": "Friday", + "event": "Republic Day", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-02-18 18:30:00+00:00", + "weekDay": "Monday", + "event": "Chatrapati Shivaji Maharaj Jayanti", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "IRD", + "NDM", + "NTRP" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-03-07 18:30:00+00:00", + "weekDay": "Friday", + "event": "Mahashivratri", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-03-24 18:30:00+00:00", + "weekDay": "Monday", + "event": "Holi", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-03-28 18:30:00+00:00", + "weekDay": "Friday", + "event": "Good Friday", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-03-31 18:30:00+00:00", + "weekDay": "Monday", + "event": "Annual Bank Closing", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "IRD", + "NDM", + "NTRP" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-04-08 18:30:00+00:00", + "weekDay": "Tuesday", + "event": "Gudi Padwa", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "IRD", + "NDM", + "NTRP" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-04-10 18:30:00+00:00", + "weekDay": "Thursday", + "event": "Id-Ul-Fitr (Ramadan Id)", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-04-13 18:30:00+00:00", + "weekDay": "Sunday", + "event": "Dr.Baba Saheb Ambedkar Jayanti", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-04-16 18:30:00+00:00", + "weekDay": "Wednesday", + "event": "Shri Ram Navami", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-04-20 18:30:00+00:00", + "weekDay": "Sunday", + "event": "Mahavir Jayanti", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-04-30 18:30:00+00:00", + "weekDay": "Wednesday", + "event": "Maharashtra Day", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-05-19 18:30:00+00:00", + "weekDay": "Monday", + "event": "General Parliamentary Elections", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-05-22 18:30:00+00:00", + "weekDay": "Thursday", + "event": "Buddha Pournima", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "IRD", + "NDM", + "NTRP" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-06-16 18:30:00+00:00", + "weekDay": "Monday", + "event": "Bakri Id", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-07-16 18:30:00+00:00", + "weekDay": "Wednesday", + "event": "Muharram", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-08-14 18:30:00+00:00", + "weekDay": "Thursday", + "event": "Independence Day/Parsi New Year", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-09-06 18:30:00+00:00", + "weekDay": "Saturday", + "event": "Ganesh Chaturthi", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-09-15 18:30:00+00:00", + "weekDay": "Monday", + "event": "Id-E-Milad", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "IRD", + "NDM", + "NTRP" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-10-01 18:30:00+00:00", + "weekDay": "Wednesday", + "event": "Mahatma Gandhi Jayanti", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-10-11 18:30:00+00:00", + "weekDay": "Saturday", + "event": "Dussehra", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-11-01 18:30:00+00:00", + "weekDay": "Saturday", + "event": "Balipratipada", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-11-14 18:30:00+00:00", + "weekDay": "Friday", + "event": "Prakash Gurpurb Sri Guru Nanak Dev", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-11-19 18:30:00+00:00", + "weekDay": "Wednesday", + "event": "Assembly Elections in Maharashtra", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-12-24 18:30:00+00:00", + "weekDay": "Wednesday", + "event": "Christmas", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "CBM", + "CD", + "CM", + "CMOT", + "COM", + "FO", + "IRD", + "MF", + "NDM", + "NTRP", + "SLBS" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2023-12-31 18:30:00+00:00", + "weekDay": "Monday", + "event": "New year", + "morningSession": "Open", + "eveningSession": "Closed", + "holidayType": [ + "COM" + ] + }, + { + "scrapeTs": "2024-12-05T04:19:17.317730+00:00", + "date": "2024-10-31 18:30:00+00:00", + "weekDay": "Friday", + "event": "Diwali Laxmi Pujan", + "morningSession": null, + "eveningSession": null, + "holidayType": [ + "MF", + "NDM", + "NTRP" + ] + } +] \ No newline at end of file diff --git a/nse/controllers/calendar/examples/20241205_raw_nse_trading_holiday_calendar.json b/nse/controllers/calendar/examples/20241205_raw_nse_trading_holiday_calendar.json new file mode 100644 index 0000000..9491b74 --- /dev/null +++ b/nse/controllers/calendar/examples/20241205_raw_nse_trading_holiday_calendar.json @@ -0,0 +1,2104 @@ +{ + "CBM": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "19-Feb-2024", + "weekDay": "Monday", + "description": "Chatrapati Shivaji Maharaj Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "01-Apr-2024", + "weekDay": "Monday", + "description": "Annual Bank Closing", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "09-Apr-2024", + "weekDay": "Tuesday", + "description": "Gudi Padwa", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramadan Id)", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr.Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Shri Ram Navami", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "23-May-2024", + "weekDay": "Thursday", + "description": "Buddha Pournima", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Muharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day/Parsi New Year", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "16-Sep-2024", + "weekDay": "Monday", + "description": "Id-E-Milad", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 22 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 23 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 24 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 25 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 26 + } + ], + "CD": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "19-Feb-2024", + "weekDay": "Monday", + "description": "Chatrapati Shivaji Maharaj Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "01-Apr-2024", + "weekDay": "Monday", + "description": "Annual Bank Closing", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "09-Apr-2024", + "weekDay": "Tuesday", + "description": "Gudhipadwa", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramzan Id)", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr.Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Ram Navami", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "23-May-2024", + "weekDay": "Thursday", + "description": "Buddha Pournima", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Muharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day/Parsi New Year", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "16-Sep-2024", + "weekDay": "Monday", + "description": "Id-E-Milad", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 22 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 23 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 24 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 25 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 26 + } + ], + "CM": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramadan Eid)", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr. Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Shri Ram Navmi", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Shri Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Moharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + } + ], + "CMOT": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramadan Eid)", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr. Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Shri Ram Navmi", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Shri Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Moharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + } + ], + "COM": [ + { + "tradingDate": "01-Jan-2024", + "weekDay": "Monday", + "description": "New year", + "morning_session": "Open", + "evening_session": "Closed", + "Sr_no": 1 + }, + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": "Closed", + "evening_session": "Closed", + "Sr_no": 2 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": "Closed", + "evening_session": "Closed", + "Sr_no": 3 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 4 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 5 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": "Closed", + "evening_session": "Closed", + "Sr_no": 6 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramzan Eid)", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 7 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr. Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Ram Navami", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 9 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 11 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 12 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 13 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Moharram", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 14 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day", + "morning_session": "Closed", + "evening_session": "Closed", + "Sr_no": 15 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": "Closed", + "evening_session": "Closed", + "Sr_no": 17 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 20 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": "Closed", + "evening_session": "Open", + "Sr_no": 21 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": "Closed", + "evening_session": "Closed", + "Sr_no": 22 + } + ], + "FO": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramadan Eid)", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr. Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Shri Ram Navmi", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Shri Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Moharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + } + ], + "IRD": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "19-Feb-2024", + "weekDay": "Monday", + "description": "Chatrapati Shivaji Maharaj Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "01-Apr-2024", + "weekDay": "Monday", + "description": "Annual Bank Closing", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "09-Apr-2024", + "weekDay": "Tuesday", + "description": "Gudhipadwa", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramzan Id)", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr.Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Ram Navami", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "23-May-2024", + "weekDay": "Thursday", + "description": "Buddha Pournima", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Muharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day/Parsi New Year", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "16-Sep-2024", + "weekDay": "Monday", + "description": "Id-E-Milad", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 22 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 23 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 24 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 25 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 26 + } + ], + "MF": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramadan Eid)", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr. Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Shri Ram Navmi", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Shri Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Moharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day/Parsi New Year", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "01-Nov-2024", + "weekDay": "Friday", + "description": "Diwali Laxmi Pujan", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 22 + } + ], + "NDM": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "19-Feb-2024", + "weekDay": "Monday", + "description": "Chatrapati Shivaji Maharaj Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "01-Apr-2024", + "weekDay": "Monday", + "description": "Annual Bank Closing", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "09-Apr-2024", + "weekDay": "Tuesday", + "description": "Gudhipadwa", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramzan Id)", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr.Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Ram Navami", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "23-May-2024", + "weekDay": "Thursday", + "description": "Buddha Pournima", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Muharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day/Parsi New Year", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "16-Sep-2024", + "weekDay": "Monday", + "description": "Id-E-Milad", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 22 + }, + { + "tradingDate": "01-Nov-2024", + "weekDay": "Friday", + "description": "Diwali Laxmi Pujan", + "morning_session": null, + "evening_session": null, + "Sr_no": 23 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 24 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 25 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 26 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 27 + } + ], + "NTRP": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "19-Feb-2024", + "weekDay": "Monday", + "description": "Chatrapati Shivaji Maharaj Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "01-Apr-2024", + "weekDay": "Monday", + "description": "Annual Bank Closing", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "09-Apr-2024", + "weekDay": "Tuesday", + "description": "Gudhipadwa", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramzan Id)", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr.Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Ram Navami", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "23-May-2024", + "weekDay": "Thursday", + "description": "Buddha Pournima", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Muharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day/Parsi New Year", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "16-Sep-2024", + "weekDay": "Monday", + "description": "Id-E-Milad", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 22 + }, + { + "tradingDate": "01-Nov-2024", + "weekDay": "Friday", + "description": "Diwali Laxmi Pujan", + "morning_session": null, + "evening_session": null, + "Sr_no": 23 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 24 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 25 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 26 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 27 + } + ], + "SLBS": [ + { + "tradingDate": "22-Jan-2024", + "weekDay": "Monday", + "description": "Special Holiday", + "morning_session": null, + "evening_session": null, + "Sr_no": 1 + }, + { + "tradingDate": "26-Jan-2024", + "weekDay": "Friday", + "description": "Republic Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 2 + }, + { + "tradingDate": "08-Mar-2024", + "weekDay": "Friday", + "description": "Mahashivratri", + "morning_session": null, + "evening_session": null, + "Sr_no": 3 + }, + { + "tradingDate": "25-Mar-2024", + "weekDay": "Monday", + "description": "Holi", + "morning_session": null, + "evening_session": null, + "Sr_no": 4 + }, + { + "tradingDate": "29-Mar-2024", + "weekDay": "Friday", + "description": "Good Friday", + "morning_session": null, + "evening_session": null, + "Sr_no": 5 + }, + { + "tradingDate": "11-Apr-2024", + "weekDay": "Thursday", + "description": "Id-Ul-Fitr (Ramadan Eid)", + "morning_session": null, + "evening_session": null, + "Sr_no": 6 + }, + { + "tradingDate": "14-Apr-2024", + "weekDay": "Sunday", + "description": "Dr. Baba Saheb Ambedkar Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 7 + }, + { + "tradingDate": "17-Apr-2024", + "weekDay": "Wednesday", + "description": "Shri Ram Navmi", + "morning_session": null, + "evening_session": null, + "Sr_no": 8 + }, + { + "tradingDate": "21-Apr-2024", + "weekDay": "Sunday", + "description": "Shri Mahavir Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 9 + }, + { + "tradingDate": "01-May-2024", + "weekDay": "Wednesday", + "description": "Maharashtra Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 10 + }, + { + "tradingDate": "20-May-2024", + "weekDay": "Monday", + "description": "General Parliamentary Elections", + "morning_session": null, + "evening_session": null, + "Sr_no": 11 + }, + { + "tradingDate": "17-Jun-2024", + "weekDay": "Monday", + "description": "Bakri Id", + "morning_session": null, + "evening_session": null, + "Sr_no": 12 + }, + { + "tradingDate": "17-Jul-2024", + "weekDay": "Wednesday", + "description": "Moharram", + "morning_session": null, + "evening_session": null, + "Sr_no": 13 + }, + { + "tradingDate": "15-Aug-2024", + "weekDay": "Thursday", + "description": "Independence Day", + "morning_session": null, + "evening_session": null, + "Sr_no": 14 + }, + { + "tradingDate": "07-Sep-2024", + "weekDay": "Saturday", + "description": "Ganesh Chaturthi", + "morning_session": null, + "evening_session": null, + "Sr_no": 15 + }, + { + "tradingDate": "02-Oct-2024", + "weekDay": "Wednesday", + "description": "Mahatma Gandhi Jayanti", + "morning_session": null, + "evening_session": null, + "Sr_no": 16 + }, + { + "tradingDate": "12-Oct-2024", + "weekDay": "Saturday", + "description": "Dussehra", + "morning_session": null, + "evening_session": null, + "Sr_no": 17 + }, + { + "tradingDate": "02-Nov-2024", + "weekDay": "Saturday", + "description": "Balipratipada", + "morning_session": null, + "evening_session": null, + "Sr_no": 18 + }, + { + "tradingDate": "15-Nov-2024", + "weekDay": "Friday", + "description": "Prakash Gurpurb Sri Guru Nanak Dev", + "morning_session": null, + "evening_session": null, + "Sr_no": 19 + }, + { + "tradingDate": "20-Nov-2024", + "weekDay": "Wednesday", + "description": "Assembly Elections in Maharashtra", + "morning_session": null, + "evening_session": null, + "Sr_no": 20 + }, + { + "tradingDate": "25-Dec-2024", + "weekDay": "Wednesday", + "description": "Christmas", + "morning_session": null, + "evening_session": null, + "Sr_no": 21 + } + ] +} \ No newline at end of file diff --git a/nse/controllers/calendar/holidays.py b/nse/controllers/calendar/holidays.py new file mode 100644 index 0000000..c2ffd5f --- /dev/null +++ b/nse/controllers/calendar/holidays.py @@ -0,0 +1,323 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 5th Dec., 2024 + + OBJECTIVE: + + To provide a way to retrieve the list of holidays from NSE and to check if today is a holiday. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# Data models: +from utils_v2.nse.models.calendar import NSEHoliday + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + +# For debugging: +import inspect + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEHolidaysCalendar(AsyncNSEBase): + + def __init__( + self, + http_client: httpx.AsyncClient = None, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (Hol) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/resources/exchange-communication-holidays", + data_url = r"https://www.nseindia.com/api/holiday-master?type=trading", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the holiday calendar. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Make the API call: + api_response = await self.get( + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + @staticmethod + def format_data( + raw_json: dict, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[NSEHoliday] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Start by creating an empty dict: + formatted_data = {} + + # Process each category in the original data + for category, events in raw_json.items(): + for event in events: + trading_date = event["tradingDate"] + + # If the tradingDate is not in the dictionary, initialize it + if trading_date not in formatted_data: + formatted_data[trading_date] = { + "scrapeTs": timestamp, + "ts": date_time.to_timezone( + date_time.as_if_timezone( + datetime.datetime.strptime(trading_date, "%d-%b-%Y"), + timezone = date_time.TIMEZONE_IST + ), + timezone = date_time.TIMEZONE_UTC + ), + "tz": "Asia/Kolkata", + "weekday": event["weekDay"], + "event": event["description"], + "type": [] + } + + # Add the current category to the "type" list + formatted_data[trading_date]["type"].append(category) + + # Now we get rid of the unnecessary keys and make it a list, and model it: + formatted_data = [v for v in formatted_data.values()] + formatted_data = [NSEHoliday(**d) for d in formatted_data] + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + async def is_holiday( + self, + timestamp: datetime.datetime + ) -> NSEApiResponse: + + """ + Checks if a given date is a trading holiday, or not. + :param timestamp: The datetime instance that you want to check for it being a holiday. Preferably make it an + aware instance. If a naive instance is passed, it will be assumed to be in UTC. + :return: True if it is a holiday, False if it isn't. Can be None if something goes wrong in fetching the data. + The value will be in the 'data' field of the response model. + """ + + # We first prepare UTC and IST versions of the incoming datetime: + timestamp_utc = date_time.to_timezone(timestamp, timezone = date_time.TIMEZONE_UTC) + timestamp_ist = date_time.to_timezone(timestamp_utc, timezone = date_time.TIMEZONE_IST) + + # If this day is a weekend, it is a holiday by default: + ist_dow = timestamp_ist.weekday() + if ist_dow in [5, 6]: return NSEApiResponse( + action = inspect.stack()[0].function, + url = None, + method = None, + success = True, + data = { + "isHoliday": True, + "event": "Saturday" if ist_dow == 5 else "Sunday" + }, + message = "Holiday due to weekend." + ) + + # First we fetch the data from NSE: + api_response = await self.get_data(return_raw = False) + api_response.action = inspect.stack()[0].function + if not api_response.success: return api_response + + # Now we check if our date to check is in the list: + is_holiday = False + event = None + for h in api_response.data: + if h.ts.date() == timestamp_utc.date(): + is_holiday = True + event = h.event + break + api_response.data = { + "isHoliday": is_holiday, + "event": event + } + + # Done here: + return api_response + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSEHolidaysCalendar() + + # Get and show the data: + api_response = await my_nse.get_data(return_raw = False) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("HOLIDAY CALENDAR:", json.to_string(api_response.data, default = str)) + ts = api_response.data[0].ts + print(ts, type(ts)) + print("\n---\n\n") + + # # Check for a holiday: + # date_to_check = date_time.parse_date_time( + # input_value = "2025-12-25 00:00:00", + # date_formats = ["%Y-%m-%d %H:%M:%S"], + # timezone = date_time.TIMEZONE_IST + # ) + # api_response = await my_nse.is_holiday(date_to_check) + # print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + # print("DATETIME:", date_to_check) + # print("IS HOLIDAY:", api_response.data) + + asyncio.run(main()) diff --git a/nse/controllers/indices/__init__.py b/nse/controllers/indices/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/controllers/indices/constituents.py b/nse/controllers/indices/constituents.py new file mode 100644 index 0000000..e4ffdda --- /dev/null +++ b/nse/controllers/indices/constituents.py @@ -0,0 +1,378 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 16th Dec., 2024 + + OBJECTIVE: + + This file aims to fetch the current details about the constituents of various indices. This gives you not only + the constituent stocks of the selected index, but also that stock's current activity in the market. + https://www.nseindia.com/market-data/live-equity-market?symbol=NIFTY%2050 + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEIndexConstituents(AsyncNSEBase): + + # Broad Market Indices: + INDEX_NIFTY_50 = "NIFTY 50" + INDEX_NIFTY_NEXT_50 = "NIFTY NEXT 50" + INDEX_NIFTY_MIDCAP_50 = "NIFTY MIDCAP 50" + INDEX_NIFTY_MIDCAP_100 = "NIFTY MIDCAP 100" + INDEX_NIFTY_MIDCAP_150 = "NIFTY MIDCAP 150" + INDEX_NIFTY_SMALLCAP_50 = "NIFTY SMALLCAP 50" + INDEX_NIFTY_SMALLCAP_100 = "NIFTY SMALLCAP 100" + INDEX_NIFTY_SMALLCAP_250 = "NIFTY SMALLCAP 250" + INDEX_NIFTY_MIDSMALLCAP_400 = "NIFTY MIDSMALLCAP 400" + INDEX_NIFTY_100 = "NIFTY 100" + INDEX_NIFTY_200 = "NIFTY 200" + INDEX_NIFTY_500_MULTICAP_50_25_25 = "NIFTY500 MULTICAP 50:25:25" + INDEX_NIFTY_LARGEMIDCAP_250 = "NIFTY LARGEMIDCAP 250" + INDEX_NIFTY_MIDCAP_SELECT = "NIFTY MIDCAP SELECT" + INDEX_NIFTY_TOTAL_MARKET = "NIFTY TOTAL MARKET" + INDEX_NIFTY_MICROCAP_250 = "NIFTY MICROCAP 250" + INDEX_NIFTY_500 = "NIFTY 500" + INDEX_NIFTY_500_LARGEMIDSMALL_EQUAL_CAP_WEIGHTED = "NIFTY500 LARGEMIDSMALL EQUAL-CAP WEIGHTED" + + # Sectoral Indices: + INDEX_NIFTY_AUTO = "NIFTY AUTO" + INDEX_NIFTY_BANK = "NIFTY BANK" + INDEX_NIFTY_ENERGY = "NIFTY ENERGY" + INDEX_NIFTY_FINANCIAL_SERVICES = "NIFTY FINANCIAL SERVICES" + INDEX_NIFTY_FINANCIAL_SERVICES_25_50 = "NIFTY FINANCIAL SERVICES 25/50" + INDEX_NIFTY_FMCG = "NIFTY FMCG" + INDEX_NIFTY_IT = "NIFTY IT" + INDEX_NIFTY_MEDIA = "NIFTY MEDIA" + INDEX_NIFTY_METAL = "NIFTY METAL" + INDEX_NIFTY_PHARMA = "NIFTY PHARMA" + INDEX_NIFTY_PSU_BANK = "NIFTY PSU BANK" + INDEX_NIFTY_REALTY = "NIFTY REALTY" + INDEX_NIFTY_PRIVATE_BANK = "NIFTY PRIVATE BANK" + INDEX_NIFTY_HEALTHCARE_INDEX = "NIFTY HEALTHCARE INDEX" + INDEX_NIFTY_CONSUMER_DURABLES = "NIFTY CONSUMER DURABLES" + INDEX_NIFTY_OIL_GAS = "NIFTY OIL & GAS" + INDEX_NIFTY_MIDSMALL_HEALTHCARE = "NIFTY MIDSMALL HEALTHCARE" + INDEX_NIFTY_FINANCIAL_SERVICES_EX_BANK = "NIFTY FINANCIAL SERVICES EX-BANK" + INDEX_NIFTY_MIDSMALL_FINANCIAL_SERVICES = "NIFTY MIDSMALL FINANCIAL SERVICES" + INDEX_NIFTY_MIDSMALL_IT_TELECOM = "NIFTY MIDSMALL IT & TELECOM" + + # Thematic: + INDEX_NIFTY_COMMODITIES = "NIFTY COMMODITIES" + INDEX_NIFTY_INDIA_CONSUMPTION = "NIFTY INDIA CONSUMPTION" + INDEX_NIFTY_CPSE = "NIFTY CPSE" + INDEX_NIFTY_INFRASTRUCTURE = "NIFTY INFRASTRUCTURE" + INDEX_NIFTY_MNC = "NIFTY MNC" + INDEX_NIFTY_GROWTH_SECTORS_15 = "NIFTY GROWTH SECTORS 15" + INDEX_NIFTY_PSE = "NIFTY PSE" + INDEX_NIFTY_SERVICES_SECTOR = "NIFTY SERVICES SECTOR" + INDEX_NIFTY_100_LIQUID_15 = "NIFTY100 LIQUID 15" + INDEX_NIFTY_MIDCAP_LIQUID_15 = "NIFTY MIDCAP LIQUID 15" + INDEX_NIFTY_INDIA_DIGITAL = "NIFTY INDIA DIGITAL" + INDEX_NIFTY_100_ESG = "NIFTY100 ESG" + INDEX_NIFTY_INDIA_MANUFACTURING = "NIFTY INDIA MANUFACTURING" + INDEX_NIFTY_INDIA_CORPORATE_GROUP_INDEX_TATA_GROUP_25_CAP = "NIFTY INDIA CORPORATE GROUP INDEX - TATA GROUP 25% CAP" + INDEX_NIFTY_500_MULTICAP_INDIA_MANUFACTURING_50_30_20 = "NIFTY500 MULTICAP INDIA MANUFACTURING 50:30:20" + INDEX_NIFTY_500_MULTICAP_INFRASTRUCTURE_50_30_20 = "NIFTY500 MULTICAP INFRASTRUCTURE 50:30:20" + INDEX_NIFTY_INDIA_DEFENCE = "NIFTY INDIA DEFENCE" + INDEX_NIFTY_INDIA_TOURISM = "NIFTY INDIA TOURISM" + INDEX_NIFTY_CAPITAL_MARKETS = "NIFTY CAPITAL MARKETS" + INDEX_NIFTY_EV_NEW_AGE_AUTOMOTIVE = "NIFTY EV & NEW AGE AUTOMOTIVE" + INDEX_NIFTY_INDIA_NEW_AGE_CONSUMPTION = "NIFTY INDIA NEW AGE CONSUMPTION" + INDEX_NIFTY_INDIA_SELECT_5_CORPORATE_GROUPS_MAATR = "NIFTY INDIA SELECT 5 CORPORATE GROUPS (MAATR)" + INDEX_NIFTY_MOBILITY = "NIFTY MOBILITY" + INDEX_NIFTY_100_ENHANCED_ESG = "NIFTY100 ENHANCED ESG" + INDEX_NIFTY_CORE_HOUSING = "NIFTY CORE HOUSING" + INDEX_NIFTY_HOUSING = "NIFTY HOUSING" + INDEX_NIFTY_IPO = "NIFTY IPO" + INDEX_NIFTY_MIDSMALL_INDIA_CONSUMPTION = "NIFTY MIDSMALL INDIA CONSUMPTION" + INDEX_NIFTY_NON_CYCLICAL_CONSUMER = "NIFTY NON-CYCLICAL CONSUMER" + INDEX_NIFTY_RURAL = "NIFTY RURAL" + INDEX_NIFTY_SHARIAH_25 = "NIFTY SHARIAH 25" + INDEX_NIFTY_TRANSPORTATION_LOGISTICS = "NIFTY TRANSPORTATION & LOGISTICS" + INDEX_NIFTY_50_SHARIAH = "NIFTY50 SHARIAH" + INDEX_NIFTY_500_SHARIAH = "NIFTY500 SHARIAH" + + # Strategy Indices: + INDEX_NIFTY_DIVIDEND_OPPORTUNITIES_50 = "NIFTY DIVIDEND OPPORTUNITIES 50" + INDEX_NIFTY_50_VALUE_20 = "NIFTY50 VALUE 20" + INDEX_NIFTY_100_QUALITY_30 = "NIFTY100 QUALITY 30" + INDEX_NIFTY_50_EQUAL_WEIGHT = "NIFTY50 EQUAL WEIGHT" + INDEX_NIFTY_100_EQUAL_WEIGHT = "NIFTY100 EQUAL WEIGHT" + INDEX_NIFTY_100_LOW_VOLATILITY_30 = "NIFTY100 LOW VOLATILITY 30" + INDEX_NIFTY_ALPHA_50 = "NIFTY ALPHA 50" + INDEX_NIFTY_200_QUALITY_30 = "NIFTY200 QUALITY 30" + INDEX_NIFTY_ALPHA_LOW_VOLATILITY_30 = "NIFTY ALPHA LOW-VOLATILITY 30" + INDEX_NIFTY_200_MOMENTUM_30 = "NIFTY200 MOMENTUM 30" + INDEX_NIFTY_MIDCAP_150_QUALITY_50 = "NIFTY MIDCAP150 QUALITY 50" + INDEX_NIFTY_200_ALPHA_30 = "NIFTY200 ALPHA 30" + INDEX_NIFTY_MIDCAP_150_MOMENTUM_50 = "NIFTY MIDCAP150 MOMENTUM 50" + INDEX_NIFTY_500_MOMENTUM_50 = "NIFTY500 MOMENTUM 50" + INDEX_NIFTY_MIDSMALLCAP_400_MOMENTUM_QUALITY_100 = "NIFTY MIDSMALLCAP400 MOMENTUM QUALITY 100" + INDEX_NIFTY_SMALLCAP_250_MOMENTUM_QUALITY_100 = "NIFTY SMALLCAP250 MOMENTUM QUALITY 100" + INDEX_NIFTY_TOP_10_EQUAL_WEIGHT = "NIFTY TOP 10 EQUAL WEIGHT" + INDEX_NIFTY_ALPHA_QUALITY_LOW_VOLATILITY_30 = "NIFTY ALPHA QUALITY LOW-VOLATILITY 30" + INDEX_NIFTY_ALPHA_QUALITY_VALUE_LOW_VOLATILITY_30 = "NIFTY ALPHA QUALITY VALUE LOW-VOLATILITY 30" + INDEX_NIFTY_HIGH_BETA_50 = "NIFTY HIGH BETA 50" + INDEX_NIFTY_LOW_VOLATILITY_50 = "NIFTY LOW VOLATILITY 50" + INDEX_NIFTY_QUALITY_LOW_VOLATILITY_30 = "NIFTY QUALITY LOW-VOLATILITY 30" + INDEX_NIFTY_SMALLCAP_250_QUALITY_50 = "NIFTY SMALLCAP250 QUALITY 50" + INDEX_NIFTY_TOP_15_EQUAL_WEIGHT = "NIFTY TOP 15 EQUAL WEIGHT" + INDEX_NIFTY_100_ALPHA_30 = "NIFTY100 ALPHA 30" + INDEX_NIFTY_200_VALUE_30 = "NIFTY200 VALUE 30" + INDEX_NIFTY_500_EQUAL_WEIGHT = "NIFTY500 EQUAL WEIGHT" + INDEX_NIFTY_500_MULTICAP_MOMENTUM_QUALITY_50 = "NIFTY500 MULTICAP MOMENTUM QUALITY 50" + INDEX_NIFTY_500_VALUE_50 = "NIFTY500 VALUE 50" + INDEX_NIFTY_TOP_20_EQUAL_WEIGHT = "NIFTY TOP 20 EQUAL WEIGHT" + + # Others: + INDEX_SECURITIES_IN_FNO = "SECURITIES IN F&O" + INDEX_PERMITTED_TO_TRADE = "PERMITTED TO TRADE" + + def __init__( + self, + http_client: httpx.AsyncClient = None, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (IdxCons) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/market-data/live-equity-market", + data_url = r"https://www.nseindia.com/api/equity-stockIndices", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + index_name: str, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the corporate event calendar. + :param index_name: The value held in the 'indexName' field of the formatted output of the Index Master. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Make the API call: + api_response = await self.get( + params = {"index": index_name}, + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + index_name = index_name, + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + def format_data( + self, + raw_json: dict, + index_name: str, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[dict] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param index_name: The value that you had used to fetch the raw data in the first place. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Format the data: + formatted_data = [ + { + "scrapeTs": timestamp, + "ts": self.parse_datetime_string( + dt_str = symbol.get("lastUpdateTime"), + dt_formats = ["%d-%b-%Y %H:%M:%S"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ), + "indexName": index_name, + "symbol": symbol["symbol"], + "name": symbol.get("meta", {}).get("companyName"), + "industry": symbol.get("meta", {}).get("industry"), + "isFNOSec": symbol.get("meta", {}).get("isFNOSec"), + "isSuspended": symbol.get("meta", {}).get("isSuspended"), + "isin": symbol.get("meta", {}).get("isin"), + "open": symbol["open"], + "high": symbol["dayHigh"], + "low": symbol["dayLow"], + "close": symbol["lastPrice"], + "totTradedVol": symbol["totalTradedVolume"], + "totTradedVal": symbol["totalTradedValue"], + "prevClose": symbol["previousClose"], + "chg": symbol["change"], + "pChg": symbol["pChange"], + "yearHigh": symbol["yearHigh"], + "yearLow": symbol["yearLow"], + "pChg30d": symbol.get("perChange30d"), + "pChg365d": symbol.get("perChange365d"), + "ffmc": symbol.get("ffmc") + } for symbol in raw_json["data"] if symbol.get("priority") in [0, None] + ] + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSEIndexConstituents() + + # Get and show the data: + api_response = await my_nse.get_data( + index_name = NSEIndexConstituents.INDEX_NIFTY_500, + return_raw = False + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("INDEX CONSTITUENTS:", json.to_string(api_response.data, default = str)) + + asyncio.run(main()) diff --git a/nse/controllers/indices/examples/20241128_formatted_nse_index_master.json b/nse/controllers/indices/examples/20241128_formatted_nse_index_master.json new file mode 100644 index 0000000..e259fdf --- /dev/null +++ b/nse/controllers/indices/examples/20241128_formatted_nse_index_master.json @@ -0,0 +1,2301 @@ +[ + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY 50", + "indexSymbol": "NIFTY 50", + "open": 23796.9, + "high": 23915.35, + "low": 23599.3, + "close": 23644.9, + "prevClose": 23813.4, + "pChg": -0.71, + "yearHigh": 26277.35, + "yearLow": 21137.2, + "advances": "11", + "declines": "38", + "unchanged": "1", + "pChg30d": -1.32, + "pChg365d": 9.58 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY NEXT 50", + "indexSymbol": "NIFTY NEXT 50", + "open": 68624.2, + "high": 68704, + "low": 67840.5, + "close": 68063.8, + "prevClose": 68557.15, + "pChg": -0.72, + "yearHigh": 77918, + "yearLow": 52766.3, + "advances": "20", + "declines": "29", + "unchanged": "1", + "pChg30d": -3.07, + "pChg365d": 28.52 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY 100", + "indexSymbol": "NIFTY 100", + "open": 24623.1, + "high": 24732.1, + "low": 24436.2, + "close": 24500.75, + "prevClose": 24632, + "pChg": -0.53, + "yearHigh": 27335.65, + "yearLow": 21391.8, + "advances": "31", + "declines": "67", + "unchanged": "2", + "pChg30d": -1.68, + "pChg365d": 12.38 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY 200", + "indexSymbol": "NIFTY 200", + "open": 13454.9, + "high": 13516.65, + "low": 13356.1, + "close": 13408.85, + "prevClose": 13459.75, + "pChg": -0.38, + "yearHigh": 14833.75, + "yearLow": 11555.45, + "advances": "72", + "declines": "125", + "unchanged": "3", + "pChg30d": -1.23, + "pChg365d": 14.08 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY 500", + "indexSymbol": "NIFTY 500", + "open": 22438.15, + "high": 22522.4, + "low": 22266.15, + "close": 22357.15, + "prevClose": 22445.2, + "pChg": -0.39, + "yearHigh": 24573.4, + "yearLow": 19080.5, + "advances": "189", + "declines": "307", + "unchanged": "4", + "pChg30d": -1.07, + "pChg365d": 15.52 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY MIDCAP 50", + "indexSymbol": "NIFTY MIDCAP 50", + "open": 15915.2, + "high": 16065.5, + "low": 15817.85, + "close": 16030.35, + "prevClose": 15919.4, + "pChg": 0.7, + "yearHigh": 17066.75, + "yearLow": 12837, + "advances": "25", + "declines": "25", + "unchanged": "0", + "pChg30d": 1.41, + "pChg365d": 21.11 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY MIDCAP 100", + "indexSymbol": "NIFTY MIDCAP 100", + "open": 56958.35, + "high": 57321.45, + "low": 56592.1, + "close": 57189.75, + "prevClose": 56979.8, + "pChg": 0.37, + "yearHigh": 60925.95, + "yearLow": 45293.35, + "advances": "41", + "declines": "58", + "unchanged": "1", + "pChg30d": 1.04, + "pChg365d": 23.38 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY SMALLCAP 100", + "indexSymbol": "NIFTY SMLCAP 100", + "open": 18762.35, + "high": 18787.35, + "low": 18561.1, + "close": 18639.95, + "prevClose": 18755.85, + "pChg": -0.62, + "yearHigh": 19716.2, + "yearLow": 14085.35, + "advances": "35", + "declines": "64", + "unchanged": "1", + "pChg30d": 0.56, + "pChg365d": 23.85 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "INDIA VIX", + "indexSymbol": "INDIA VIX", + "open": 13.2375, + "high": 14.37, + "low": 13.2375, + "close": 13.9725, + "prevClose": 13.2375, + "pChg": 5.55, + "yearHigh": 31.71, + "yearLow": 9.47, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": -8.23, + "pChg365d": -8.72 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY MIDCAP 150", + "indexSymbol": "NIFTY MIDCAP 150", + "open": 21067.25, + "high": 21170.6, + "low": 20921.85, + "close": 21109.25, + "prevClose": 21071.85, + "pChg": 0.18, + "yearHigh": 22515.4, + "yearLow": 16717.95, + "advances": "61", + "declines": "88", + "unchanged": "1", + "pChg30d": 0.79, + "pChg365d": 23.39 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY SMALLCAP 50", + "indexSymbol": "NIFTY SMLCAP 50", + "open": 8950.5, + "high": 8967.3, + "low": 8842.5, + "close": 8870.7, + "prevClose": 8942.8, + "pChg": -0.81, + "yearHigh": 9505.5, + "yearLow": 6515.65, + "advances": "17", + "declines": "32", + "unchanged": "1", + "pChg30d": -0.47, + "pChg365d": 25.39 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY SMALLCAP 250", + "indexSymbol": "NIFTY SMLCAP 250", + "open": 17711.95, + "high": 17726.65, + "low": 17528.95, + "close": 17638.15, + "prevClose": 17715.2, + "pChg": -0.43, + "yearHigh": 18688.3, + "yearLow": 13284.3, + "advances": "97", + "declines": "152", + "unchanged": "1", + "pChg30d": -0.01, + "pChg365d": 26.16 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY MIDSMALLCAP 400", + "indexSymbol": "NIFTY MIDSML 400", + "open": 19916.9, + "high": 19977.55, + "low": 19755, + "close": 19912.05, + "prevClose": 19921, + "pChg": -0.04, + "yearHigh": 21177.6, + "yearLow": 15493.8, + "advances": "158", + "declines": "240", + "unchanged": "2", + "pChg30d": 0.5, + "pChg365d": 24.39 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY500 MULTICAP 50:25:25", + "indexSymbol": "NIFTY500 MULTICAP", + "open": 15811.5, + "high": 15856.45, + "low": 15685.35, + "close": 15763.75, + "prevClose": 15815.95, + "pChg": -0.33, + "yearHigh": 17112.15, + "yearLow": 5531.55, + "advances": "189", + "declines": "307", + "unchanged": "4", + "pChg30d": -0.65, + "pChg365d": 18.54 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY LARGEMIDCAP 250", + "indexSymbol": "NIFTY LARGEMID250", + "open": 15726.8, + "high": 15794.25, + "low": 15614.9, + "close": 15704.55, + "prevClose": 15731.3, + "pChg": -0.17, + "yearHigh": 17095.2, + "yearLow": 5635.2, + "advances": "92", + "declines": "155", + "unchanged": "3", + "pChg30d": -0.44, + "pChg365d": 17.86 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY MIDCAP SELECT", + "indexSymbol": "NIFTY MID SELECT", + "open": 12780.15, + "high": 13014.1, + "low": 12702, + "close": 12987.9, + "prevClose": 12768.9, + "pChg": 1.72, + "yearHigh": 13407.55, + "yearLow": 5520.25, + "advances": "17", + "declines": "8", + "unchanged": "0", + "pChg30d": 1.18, + "pChg365d": 22.81 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY TOTAL MARKET", + "indexSymbol": "NIFTY TOTAL MKT", + "open": 12668.4, + "high": 12712.55, + "low": 12569.45, + "close": 12619.1, + "prevClose": 12671.8, + "pChg": -0.42, + "yearHigh": 13842.6, + "yearLow": 6252.1, + "advances": "252", + "declines": "495", + "unchanged": "5", + "pChg30d": -1.03, + "pChg365d": 16.14 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY MICROCAP 250", + "indexSymbol": "NIFTY MICROCAP250", + "open": 25089.55, + "high": 25120.3, + "low": 24786.3, + "close": 24816.95, + "prevClose": 25066.15, + "pChg": -0.99, + "yearHigh": 26476.9, + "yearLow": 5802.95, + "advances": "63", + "declines": "188", + "unchanged": "1", + "pChg30d": -0.2, + "pChg365d": 34.35 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "BROAD MARKET INDICES", + "indexName": "NIFTY500 LARGEMIDSMALL EQUAL-CAP WEIGHTED", + "indexSymbol": "NIFTY500 LMS EQL", + "open": 17588.65, + "high": 17632.65, + "low": 17444.6, + "close": 17546.85, + "prevClose": 17593.15, + "pChg": -0.26, + "yearHigh": 18838.1, + "yearLow": 14014.4, + "advances": "189", + "declines": "307", + "unchanged": "4", + "pChg30d": -0.3, + "pChg365d": 20.61 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY BANK", + "indexSymbol": "NIFTY BANK", + "open": 51255.35, + "high": 51979.75, + "low": 50718.35, + "close": 50952.75, + "prevClose": 51311.3, + "pChg": -0.7, + "yearHigh": 54467.35, + "yearLow": 44429, + "advances": "5", + "declines": "7", + "unchanged": "0", + "pChg30d": -1.43, + "pChg365d": 6.25 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY AUTO", + "indexSymbol": "NIFTY AUTO", + "open": 23072.25, + "high": 23100.8, + "low": 22695.75, + "close": 22768.25, + "prevClose": 23099.05, + "pChg": -1.43, + "yearHigh": 27696.1, + "yearLow": 18142.5, + "advances": "1", + "declines": "14", + "unchanged": "0", + "pChg30d": -1.15, + "pChg365d": 24.07 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY FINANCIAL SERVICES", + "indexSymbol": "NIFTY FIN SERVICE", + "open": 23757.1, + "high": 24047.35, + "low": 23497.2, + "close": 23565.3, + "prevClose": 23788, + "pChg": -0.94, + "yearHigh": 25201.95, + "yearLow": 19822.05, + "advances": "3", + "declines": "17", + "unchanged": "0", + "pChg30d": -0.93, + "pChg365d": 10.71 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY FINANCIAL SERVICES 25/50", + "indexSymbol": "NIFTY FINSRV25 50", + "open": 25358.85, + "high": 25640.45, + "low": 25091.15, + "close": 25170.15, + "prevClose": 25377.05, + "pChg": -0.83, + "yearHigh": 0, + "yearLow": 0, + "advances": "3", + "declines": "17", + "unchanged": "0", + "pChg30d": -1.52, + "pChg365d": 12.46 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY FMCG", + "indexSymbol": "NIFTY FMCG", + "open": 56545.25, + "high": 56827.6, + "low": 56278.7, + "close": 56618.4, + "prevClose": 56444.25, + "pChg": 0.31, + "yearHigh": 66438.7, + "yearLow": 52398.75, + "advances": "10", + "declines": "5", + "unchanged": "0", + "pChg30d": -2.59, + "pChg365d": -0.95 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY IT", + "indexSymbol": "NIFTY IT", + "open": 43674.05, + "high": 44175.5, + "low": 43259.8, + "close": 43971.4, + "prevClose": 43721.4, + "pChg": 0.57, + "yearHigh": 46088.9, + "yearLow": 31320.15, + "advances": "6", + "declines": "4", + "unchanged": "0", + "pChg30d": 1.33, + "pChg365d": 23.11 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY MEDIA", + "indexSymbol": "NIFTY MEDIA", + "open": 1847.75, + "high": 1853.85, + "low": 1815.55, + "close": 1819.05, + "prevClose": 1853.75, + "pChg": -1.87, + "yearHigh": 2508.6, + "yearLow": 1717.4, + "advances": "0", + "declines": "10", + "unchanged": "0", + "pChg30d": -7.16, + "pChg365d": -22.38 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY METAL", + "indexSymbol": "NIFTY METAL", + "open": 8720.85, + "high": 8753.3, + "low": 8584, + "close": 8609.85, + "prevClose": 8720.7, + "pChg": -1.27, + "yearHigh": 10322.05, + "yearLow": 7470.15, + "advances": "3", + "declines": "12", + "unchanged": "0", + "pChg30d": -3.47, + "pChg365d": 9.31 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY PHARMA", + "indexSymbol": "NIFTY PHARMA", + "open": 23037.2, + "high": 23313.2, + "low": 22980.8, + "close": 23241.15, + "prevClose": 23008.35, + "pChg": 1.01, + "yearHigh": 23907.9, + "yearLow": 16818.7, + "advances": "12", + "declines": "6", + "unchanged": "2", + "pChg30d": 3.45, + "pChg365d": 36.7 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY PSU BANK", + "indexSymbol": "NIFTY PSU BANK", + "open": 6573.75, + "high": 6647.25, + "low": 6470.05, + "close": 6493.25, + "prevClose": 6570.9, + "pChg": -1.18, + "yearHigh": 8053.3, + "yearLow": 5616.8, + "advances": "2", + "declines": "10", + "unchanged": "0", + "pChg30d": -3.57, + "pChg365d": 15.01 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY PRIVATE BANK", + "indexSymbol": "NIFTY PVT BANK", + "open": 24897.65, + "high": 25279.6, + "low": 24647.25, + "close": 24761.6, + "prevClose": 24919.05, + "pChg": -0.63, + "yearHigh": 27280.6, + "yearLow": 22390.1, + "advances": "3", + "declines": "7", + "unchanged": "0", + "pChg30d": -1.61, + "pChg365d": 0.17 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY REALTY", + "indexSymbol": "NIFTY REALTY", + "open": 1068.65, + "high": 1078.9, + "low": 1046.25, + "close": 1054.85, + "prevClose": 1071.35, + "pChg": -1.54, + "yearHigh": 1157.35, + "yearLow": 794.5, + "advances": "0", + "declines": "10", + "unchanged": "0", + "pChg30d": 5.02, + "pChg365d": 36.82 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY HEALTHCARE INDEX", + "indexSymbol": "NIFTY HEALTHCARE", + "open": 14689.25, + "high": 14951.75, + "low": 14669.05, + "close": 14893.65, + "prevClose": 14699.85, + "pChg": 1.32, + "yearHigh": 15049.4, + "yearLow": 6482.8, + "advances": "14", + "declines": "5", + "unchanged": "1", + "pChg30d": 4.05, + "pChg365d": 38.19 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY CONSUMER DURABLES", + "indexSymbol": "NIFTY CONSR DURBL", + "open": 41520.15, + "high": 41814, + "low": 41277.45, + "close": 41635.05, + "prevClose": 41534.85, + "pChg": 0.24, + "yearHigh": 44426.55, + "yearLow": 14089.55, + "advances": "9", + "declines": "6", + "unchanged": "0", + "pChg30d": 3.39, + "pChg365d": 33.41 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY OIL & GAS", + "indexSymbol": "NIFTY OIL AND GAS", + "open": 10657.2, + "high": 10722.6, + "low": 10591.8, + "close": 10631.15, + "prevClose": 10683.05, + "pChg": -0.49, + "yearHigh": 13607.2, + "yearLow": 4632.7, + "advances": "5", + "declines": "10", + "unchanged": "0", + "pChg30d": -3.79, + "pChg365d": 12.5 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY MIDSMALL HEALTHCARE", + "indexSymbol": "NIFTY MIDSML HLTH", + "open": 43290.2, + "high": 44349, + "low": 43239.85, + "close": 44106.85, + "prevClose": 43366.05, + "pChg": 1.71, + "yearHigh": 44349, + "yearLow": 20019.15, + "advances": "17", + "declines": "12", + "unchanged": "1", + "pChg30d": 3.02, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY FINANCIAL SERVICES EX-BANK", + "indexSymbol": "NIFTY FINSEREXBNK", + "open": 25251.15, + "high": 25469.15, + "low": 25074.15, + "close": 25335.75, + "prevClose": 25252.2, + "pChg": 0.33, + "yearHigh": 28262.35, + "yearLow": 21702.4, + "advances": "10", + "declines": "20", + "unchanged": "0", + "pChg30d": -0.34, + "pChg365d": 13.77 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY MIDSMALL FINANCIAL SERVICES", + "indexSymbol": "NIFTY MS FIN SERV", + "open": 15829.4, + "high": 16005.4, + "low": 15718, + "close": 15873.9, + "prevClose": 15840, + "pChg": 0.21, + "yearHigh": 16743.9, + "yearLow": 12407.95, + "advances": "11", + "declines": "19", + "unchanged": "0", + "pChg30d": 1.25, + "pChg365d": 21.85 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "SECTORAL INDICES", + "indexName": "NIFTY MIDSMALL IT & TELECOM", + "indexSymbol": "NIFTY MS IT TELCM", + "open": 11060.55, + "high": 11237.55, + "low": 10960.2, + "close": 11204.6, + "prevClose": 11026.4, + "pChg": 1.62, + "yearHigh": 11723.2, + "yearLow": 8812.7, + "advances": "12", + "declines": "8", + "unchanged": "0", + "pChg30d": 1.77, + "pChg365d": 13.28 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY DIVIDEND OPPORTUNITIES 50", + "indexSymbol": "NIFTY DIV OPPS 50", + "open": 6310.95, + "high": 6320.8, + "low": 6253, + "close": 6276.65, + "prevClose": 6309.9, + "pChg": -0.53, + "yearHigh": 7012.65, + "yearLow": 5335.25, + "advances": "15", + "declines": "34", + "unchanged": "1", + "pChg30d": -2.41, + "pChg365d": 17.19 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY GROWTH SECTORS 15", + "indexSymbol": "NIFTY GROWSECT 15", + "open": 11909.25, + "high": 11917.6, + "low": 11823.6, + "close": 11869.35, + "prevClose": 11912.1, + "pChg": -0.36, + "yearHigh": 13065.05, + "yearLow": 10168.35, + "advances": "4", + "declines": "11", + "unchanged": "0", + "pChg30d": 0.09, + "pChg365d": 10.42 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY100 QUALITY 30", + "indexSymbol": "NIFTY100 QUALTY30", + "open": 5542.65, + "high": 5547.65, + "low": 5506.55, + "close": 5528.25, + "prevClose": 5541.8, + "pChg": -0.22, + "yearHigh": 0, + "yearLow": 0, + "advances": "11", + "declines": "18", + "unchanged": "1", + "pChg30d": -3.05, + "pChg365d": 9.86 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY50 VALUE 20", + "indexSymbol": "NIFTY50 VALUE 20", + "open": 13538.15, + "high": 13565.2, + "low": 13421.1, + "close": 13457.9, + "prevClose": 13540.65, + "pChg": -0.61, + "yearHigh": 14731.65, + "yearLow": 11426.2, + "advances": "5", + "declines": "14", + "unchanged": "1", + "pChg30d": -1.12, + "pChg365d": 16.54 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY50 TR 2X LEVERAGE", + "indexSymbol": "NIFTY50 TR 2X LEV", + "open": 19102.8, + "high": 19293, + "low": 18786.6, + "close": 18858.4, + "prevClose": 19140.1, + "pChg": -1.47, + "yearHigh": 23715.35, + "yearLow": 15754.1, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": -3.2, + "pChg365d": 12.92 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY50 PR 2X LEVERAGE", + "indexSymbol": "NIFTY50 PR 2X LEV", + "open": 13086.05, + "high": 13216.35, + "low": 12869.45, + "close": 12918.65, + "prevClose": 13111.6, + "pChg": -1.47, + "yearHigh": 16297.55, + "yearLow": 10914.7, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": -3.2, + "pChg365d": 10.29 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY50 TR 1X INVERSE", + "indexSymbol": "NIFTY50 TR 1X INV", + "open": 174.25, + "high": 175.7, + "low": 173.4, + "close": 175.4, + "prevClose": 174.05, + "pChg": 0.78, + "yearHigh": 190, + "yearLow": 156.1, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 1.75, + "pChg365d": -5.51 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY50 PR 1X INVERSE", + "indexSymbol": "NIFTY50 PR 1X INV", + "open": 210.35, + "high": 212.1, + "low": 209.3, + "close": 211.7, + "prevClose": 210.1, + "pChg": 0.76, + "yearHigh": 227.85, + "yearLow": 188.15, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 1.77, + "pChg365d": -4.39 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY50 DIVIDEND POINTS", + "indexSymbol": "NIFTY50 DIV POINT", + "open": 233.03, + "high": 233.03, + "low": 233.03, + "close": 233.03, + "prevClose": 233.03, + "pChg": 0, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0, + "pChg365d": 28.09 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY ALPHA 50", + "indexSymbol": "NIFTY ALPHA 50", + "open": 56348.25, + "high": 56509.9, + "low": 55687.3, + "close": 55911.75, + "prevClose": 56347.95, + "pChg": -0.87, + "yearHigh": 0, + "yearLow": 0, + "advances": "16", + "declines": "33", + "unchanged": "1", + "pChg30d": 0.43, + "pChg365d": 33.19 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY50 EQUAL WEIGHT", + "indexSymbol": "NIFTY50 EQL WGT", + "open": 29468.6, + "high": 29560.75, + "low": 29262.35, + "close": 29317.25, + "prevClose": 29464.7, + "pChg": -0.32, + "yearHigh": 0, + "yearLow": 0, + "advances": "11", + "declines": "38", + "unchanged": "1", + "pChg30d": -1.49, + "pChg365d": 10.13 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY100 EQUAL WEIGHT", + "indexSymbol": "NIFTY100 EQL WGT", + "open": 31365.8, + "high": 31457.25, + "low": 31133.9, + "close": 31313.9, + "prevClose": 31346.8, + "pChg": -0.36, + "yearHigh": 0, + "yearLow": 0, + "advances": "31", + "declines": "67", + "unchanged": "2", + "pChg30d": -2.34, + "pChg365d": 16.62 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY100 LOW VOLATILITY 30", + "indexSymbol": "NIFTY100 LOWVOL30", + "open": 19257.75, + "high": 19279.95, + "low": 19152, + "close": 19187.2, + "prevClose": 19259.8, + "pChg": -0.06, + "yearHigh": 0, + "yearLow": 0, + "advances": "8", + "declines": "21", + "unchanged": "1", + "pChg30d": -0.4, + "pChg365d": 11.51 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY200 QUALITY 30", + "indexSymbol": "NIFTY200 QUALTY30", + "open": 20770.75, + "high": 20872.95, + "low": 20648, + "close": 20820.8, + "prevClose": 20758.35, + "pChg": 0.3, + "yearHigh": 0, + "yearLow": 0, + "advances": "16", + "declines": "13", + "unchanged": "1", + "pChg30d": -2.37, + "pChg365d": 12.49 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY ALPHA LOW-VOLATILITY 30", + "indexSymbol": "NIFTY ALPHALOWVOL", + "open": 27450.3, + "high": 27483.6, + "low": 27203.45, + "close": 27260.25, + "prevClose": 27445.2, + "pChg": -0.54, + "yearHigh": 0, + "yearLow": 0, + "advances": "5", + "declines": "24", + "unchanged": "1", + "pChg30d": -1.25, + "pChg365d": 17.42 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY200 MOMENTUM 30", + "indexSymbol": "NIFTY200MOMENTM30", + "open": 33376.45, + "high": 33430.65, + "low": 32729.35, + "close": 32847.05, + "prevClose": 33342, + "pChg": -1.92, + "yearHigh": 0, + "yearLow": 0, + "advances": "6", + "declines": "23", + "unchanged": "1", + "pChg30d": -2.65, + "pChg365d": 21.9 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY MIDCAP150 QUALITY 50", + "indexSymbol": "NIFTY M150 QLTY50", + "open": 24251.9, + "high": 24425.5, + "low": 24115.3, + "close": 24388.95, + "prevClose": 24276.3, + "pChg": 0.58, + "yearHigh": 0, + "yearLow": 0, + "advances": "27", + "declines": "23", + "unchanged": "0", + "pChg30d": -0.97, + "pChg365d": 18.58 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY200 ALPHA 30", + "indexSymbol": "NIFTY200 ALPHA 30", + "open": 26351.55, + "high": 26383.85, + "low": 26064.25, + "close": 26236.3, + "prevClose": 26332.65, + "pChg": -0.58, + "yearHigh": 0, + "yearLow": 0, + "advances": "9", + "declines": "19", + "unchanged": "2", + "pChg30d": 0.05, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY MIDCAP150 MOMENTUM 50", + "indexSymbol": "NIFTYM150MOMNTM50", + "open": 64882.15, + "high": 65132.4, + "low": 64188.65, + "close": 64398, + "prevClose": 64881.65, + "pChg": -1.23, + "yearHigh": 0, + "yearLow": 0, + "advances": "16", + "declines": "34", + "unchanged": "0", + "pChg30d": 1.74, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY500 MOMENTUM 50", + "indexSymbol": "NIFTY500MOMENTM50", + "open": 58273.7, + "high": 58343.5, + "low": 57073.1, + "close": 57283.45, + "prevClose": 58247.9, + "pChg": -2.24, + "yearHigh": 0, + "yearLow": 0, + "advances": "9", + "declines": "40", + "unchanged": "1", + "pChg30d": -1.62, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY MIDSMALLCAP400 MOMENTUM QUALITY 100", + "indexSymbol": "NIFTYMS400 MQ 100", + "open": 51755.65, + "high": 51791.45, + "low": 51087.8, + "close": 51294.15, + "prevClose": 51739.8, + "pChg": -0.88, + "yearHigh": 0, + "yearLow": 0, + "advances": "34", + "declines": "64", + "unchanged": "2", + "pChg30d": 0.1, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY SMALLCAP250 MOMENTUM QUALITY 100", + "indexSymbol": "NIFTYSML250MQ 100", + "open": 50506.8, + "high": 50538.2, + "low": 49648.7, + "close": 49822.7, + "prevClose": 50471.05, + "pChg": -1.07, + "yearHigh": 0, + "yearLow": 0, + "advances": "25", + "declines": "73", + "unchanged": "2", + "pChg30d": -0.91, + "pChg365d": 21.61 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY TOP 10 EQUAL WEIGHT", + "indexSymbol": "NIFTY TOP 10 EW", + "open": 9362.9, + "high": 9417.25, + "low": 9282.35, + "close": 9298.7, + "prevClose": 9368.1, + "pChg": -0.52, + "yearHigh": 0, + "yearLow": 0, + "advances": "0", + "declines": "10", + "unchanged": "0", + "pChg30d": -1.33, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY ALPHA QUALITY LOW-VOLATILITY 30", + "indexSymbol": "NIFTY AQL 30", + "open": 22755.75, + "high": 22783.65, + "low": 22583.75, + "close": 22656.9, + "prevClose": 22738.7, + "pChg": -0.37, + "yearHigh": 0, + "yearLow": 0, + "advances": "13", + "declines": "15", + "unchanged": "2", + "pChg30d": -2.12, + "pChg365d": 18.42 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY ALPHA QUALITY VALUE LOW-VOLATILITY 30", + "indexSymbol": "NIFTY AQLV 30", + "open": 20500.75, + "high": 20520.65, + "low": 20318.8, + "close": 20400, + "prevClose": 20498.9, + "pChg": -0.53, + "yearHigh": 0, + "yearLow": 0, + "advances": "9", + "declines": "20", + "unchanged": "1", + "pChg30d": -1.78, + "pChg365d": 20.6 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY HIGH BETA 50", + "indexSymbol": "NIFTY HIGHBETA 50", + "open": 3555.6, + "high": 3575.75, + "low": 3508, + "close": 3524.6, + "prevClose": 3548.4, + "pChg": -1.52, + "yearHigh": 0, + "yearLow": 0, + "advances": "12", + "declines": "38", + "unchanged": "0", + "pChg30d": -4.76, + "pChg365d": 4.31 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY LOW VOLATILITY 50", + "indexSymbol": "NIFTY LOW VOL 50", + "open": 23667.5, + "high": 23706.1, + "low": 23530.7, + "close": 23624, + "prevClose": 23663.4, + "pChg": 0.03, + "yearHigh": 0, + "yearLow": 0, + "advances": "17", + "declines": "33", + "unchanged": "0", + "pChg30d": -1.44, + "pChg365d": 13.3 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY QUALITY LOW-VOLATILITY 30", + "indexSymbol": "NIFTY QLTY LV 30", + "open": 16927.9, + "high": 16940.35, + "low": 16805.65, + "close": 16888.45, + "prevClose": 16920.75, + "pChg": -0.03, + "yearHigh": 0, + "yearLow": 0, + "advances": "13", + "declines": "16", + "unchanged": "1", + "pChg30d": -1.92, + "pChg365d": 8.03 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY SMALLCAP250 QUALITY 50", + "indexSymbol": "NIFTY SML250 Q50", + "open": 29688.85, + "high": 29745.65, + "low": 28874.4, + "close": 29058, + "prevClose": 29682, + "pChg": -1.95, + "yearHigh": 0, + "yearLow": 0, + "advances": "14", + "declines": "36", + "unchanged": "0", + "pChg30d": 0.53, + "pChg365d": 28.33 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY TOP 15 EQUAL WEIGHT", + "indexSymbol": "NIFTY TOP 15 EW", + "open": 9657.7, + "high": 9710.5, + "low": 9570.1, + "close": 9587.15, + "prevClose": 9664.55, + "pChg": -0.47, + "yearHigh": 0, + "yearLow": 0, + "advances": "0", + "declines": "15", + "unchanged": "0", + "pChg30d": -1.2, + "pChg365d": 8.6 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY100 ALPHA 30", + "indexSymbol": "NIFTY100 ALPHA 30", + "open": 18519.75, + "high": 18539.35, + "low": 18302.1, + "close": 18378.6, + "prevClose": 18503.05, + "pChg": -1.1, + "yearHigh": 0, + "yearLow": 0, + "advances": "7", + "declines": "21", + "unchanged": "2", + "pChg30d": -2.43, + "pChg365d": 25.06 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY200 VALUE 30", + "indexSymbol": "NIFTY200 VALUE 30", + "open": 12466.15, + "high": 12511.65, + "low": 12288.2, + "close": 12325.05, + "prevClose": 12461.05, + "pChg": -2.19, + "yearHigh": 0, + "yearLow": 0, + "advances": "8", + "declines": "21", + "unchanged": "1", + "pChg30d": -4.01, + "pChg365d": 21.51 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY500 EQUAL WEIGHT", + "indexSymbol": "NIFTY500 EW", + "open": 14185.7, + "high": 14205.25, + "low": 14060.9, + "close": 14134.85, + "prevClose": 14185.25, + "pChg": -0.19, + "yearHigh": 0, + "yearLow": 0, + "advances": "189", + "declines": "307", + "unchanged": "4", + "pChg30d": -0.77, + "pChg365d": 22.12 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY500 MULTICAP MOMENTUM QUALITY 50", + "indexSymbol": "NIFTY MULTI MQ 50", + "open": 45677.25, + "high": 45726.75, + "low": 44958.5, + "close": 45087.4, + "prevClose": 45678.2, + "pChg": -1.62, + "yearHigh": 0, + "yearLow": 0, + "advances": "13", + "declines": "36", + "unchanged": "1", + "pChg30d": -1.37, + "pChg365d": 21.63 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY500 VALUE 50", + "indexSymbol": "NIFTY500 VALUE 50", + "open": 13595.95, + "high": 13617.5, + "low": 13336.35, + "close": 13377.15, + "prevClose": 13594.05, + "pChg": -2.56, + "yearHigh": 0, + "yearLow": 0, + "advances": "8", + "declines": "41", + "unchanged": "1", + "pChg30d": -4.62, + "pChg365d": 19.62 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "STRATEGY INDICES", + "indexName": "NIFTY TOP 20 EQUAL WEIGHT", + "indexSymbol": "NIFTY TOP 20 EW", + "open": 8816.5, + "high": 8857.5, + "low": 8753.45, + "close": 8768.4, + "prevClose": 8819.05, + "pChg": -0.24, + "yearHigh": 0, + "yearLow": 0, + "advances": "3", + "declines": "17", + "unchanged": "0", + "pChg30d": -1.01, + "pChg365d": 11.3 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY COMMODITIES", + "indexSymbol": "NIFTY COMMODITIES", + "open": 8158.85, + "high": 8182.05, + "low": 8060.8, + "close": 8084.65, + "prevClose": 8154.4, + "pChg": -0.86, + "yearHigh": 9896.35, + "yearLow": 7495.8, + "advances": "8", + "declines": "21", + "unchanged": "1", + "pChg30d": -4.48, + "pChg365d": 5.68 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INDIA CONSUMPTION", + "indexSymbol": "NIFTY CONSUMPTION", + "open": 11374.3, + "high": 11389.35, + "low": 11316.45, + "close": 11363.9, + "prevClose": 11373.75, + "pChg": -0.09, + "yearHigh": 13057.6, + "yearLow": 9398.6, + "advances": "11", + "declines": "19", + "unchanged": "0", + "pChg30d": -0.64, + "pChg365d": 18.75 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY CPSE", + "indexSymbol": "NIFTY CPSE", + "open": 6070.7, + "high": 6083, + "low": 5967.1, + "close": 5993.15, + "prevClose": 6072.2, + "pChg": -1.3, + "yearHigh": 7661.9, + "yearLow": 4863.75, + "advances": "1", + "declines": "8", + "unchanged": "2", + "pChg30d": -6.96, + "pChg365d": 24.93 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY ENERGY", + "indexSymbol": "NIFTY ENERGY", + "open": 34991.25, + "high": 35144.05, + "low": 34689.05, + "close": 34832.2, + "prevClose": 35039.4, + "pChg": -0.59, + "yearHigh": 45022.15, + "yearLow": 33791.65, + "advances": "3", + "declines": "6", + "unchanged": "1", + "pChg30d": -6.52, + "pChg365d": 4.7 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INFRASTRUCTURE", + "indexSymbol": "NIFTY INFRA", + "open": 8492.45, + "high": 8519.5, + "low": 8405.45, + "close": 8426.4, + "prevClose": 8495, + "pChg": -0.81, + "yearHigh": 9704.2, + "yearLow": 7357.7, + "advances": "6", + "declines": "24", + "unchanged": "0", + "pChg30d": -2.74, + "pChg365d": 16.32 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY100 LIQUID 15", + "indexSymbol": "NIFTY100 LIQ 15", + "open": 6205.45, + "high": 6240.95, + "low": 6139.9, + "close": 6156.3, + "prevClose": 6198.6, + "pChg": -0.68, + "yearHigh": 7205.25, + "yearLow": 5795.85, + "advances": "5", + "declines": "9", + "unchanged": "1", + "pChg30d": -2.54, + "pChg365d": 6.38 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY MIDCAP LIQUID 15", + "indexSymbol": "NIFTY MID LIQ 15", + "open": 14368.8, + "high": 14623.55, + "low": 14299.55, + "close": 14593.55, + "prevClose": 14354.6, + "pChg": 1.66, + "yearHigh": 14941.65, + "yearLow": 10349.6, + "advances": "10", + "declines": "5", + "unchanged": "0", + "pChg30d": 1.59, + "pChg365d": 31.31 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY MNC", + "indexSymbol": "NIFTY MNC", + "open": 27922.65, + "high": 27967.75, + "low": 27727.55, + "close": 27824.05, + "prevClose": 27918.8, + "pChg": -0.34, + "yearHigh": 32841.15, + "yearLow": 23428.9, + "advances": "15", + "declines": "15", + "unchanged": "0", + "pChg30d": -3.23, + "pChg365d": 15.33 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY PSE", + "indexSymbol": "NIFTY PSE", + "open": 9559.65, + "high": 9572.65, + "low": 9379.65, + "close": 9414.85, + "prevClose": 9557.7, + "pChg": -1.49, + "yearHigh": 11814.6, + "yearLow": 7857.25, + "advances": "2", + "declines": "17", + "unchanged": "1", + "pChg30d": -5.57, + "pChg365d": 21.68 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY SERVICES SECTOR", + "indexSymbol": "NIFTY SERV SECTOR", + "open": 31694.15, + "high": 31934.6, + "low": 31451.9, + "close": 31583.45, + "prevClose": 31731.6, + "pChg": -0.47, + "yearHigh": 33791.15, + "yearLow": 26535.15, + "advances": "9", + "declines": "21", + "unchanged": "0", + "pChg30d": -0.73, + "pChg365d": 14.6 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY100 ESG SECTOR LEADERS", + "indexSymbol": "NIFTY100ESGSECLDR", + "open": 3961.3, + "high": 3980.25, + "low": 3935.8, + "close": 3944.65, + "prevClose": 3964.1, + "pChg": -0.25, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": -1.46, + "pChg365d": 11.94 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INDIA DIGITAL", + "indexSymbol": "NIFTY IND DIGITAL", + "open": 9685.25, + "high": 9823.8, + "low": 9622.95, + "close": 9773.7, + "prevClose": 9675.65, + "pChg": 1.01, + "yearHigh": 10152.15, + "yearLow": 4755.25, + "advances": "16", + "declines": "14", + "unchanged": "0", + "pChg30d": 1.5, + "pChg365d": 32.76 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY100 ESG", + "indexSymbol": "NIFTY100 ESG", + "open": 4713.65, + "high": 4729.95, + "low": 4680.1, + "close": 4698.5, + "prevClose": 4714.3, + "pChg": -0.24, + "yearHigh": 0, + "yearLow": 0, + "advances": "31", + "declines": "60", + "unchanged": "2", + "pChg30d": -1.45, + "pChg365d": 12.24 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INDIA MANUFACTURING", + "indexSymbol": "NIFTY INDIA MFG", + "open": 13853.65, + "high": 13870.15, + "low": 13699.65, + "close": 13727.2, + "prevClose": 13860.85, + "pChg": -0.85, + "yearHigh": 0, + "yearLow": 0, + "advances": "21", + "declines": "54", + "unchanged": "2", + "pChg30d": -1.65, + "pChg365d": 25.57 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INDIA CORPORATE GROUP INDEX - TATA GROUP 25% CAP", + "indexSymbol": "NIFTY TATA 25 CAP", + "open": 16505.05, + "high": 16523.75, + "low": 16308.1, + "close": 16373.75, + "prevClose": 16506.1, + "pChg": -0.8, + "yearHigh": 18764.95, + "yearLow": 9887.45, + "advances": "3", + "declines": "7", + "unchanged": "0", + "pChg30d": -0.75, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY500 MULTICAP INDIA MANUFACTURING 50:30:20", + "indexSymbol": "NIFTY MULTI MFG", + "open": 14714.55, + "high": 14727.95, + "low": 14572.45, + "close": 14636.7, + "prevClose": 14720.6, + "pChg": -0.57, + "yearHigh": 16253.65, + "yearLow": 8394.35, + "advances": "24", + "declines": "50", + "unchanged": "1", + "pChg30d": -0.82, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY500 MULTICAP INFRASTRUCTURE 50:30:20", + "indexSymbol": "NIFTY MULTI INFRA", + "open": 13678.25, + "high": 13723, + "low": 13576.35, + "close": 13610.3, + "prevClose": 13686.45, + "pChg": -0.56, + "yearHigh": 15154.1, + "yearLow": 8010.1, + "advances": "22", + "declines": "53", + "unchanged": "0", + "pChg30d": -0.83, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INDIA DEFENCE", + "indexSymbol": "NIFTY IND DEFENCE", + "open": 6599.85, + "high": 6603.8, + "low": 6377.9, + "close": 6405.85, + "prevClose": 6607.15, + "pChg": -3.05, + "yearHigh": 8302.05, + "yearLow": 3374.95, + "advances": "2", + "declines": "13", + "unchanged": "1", + "pChg30d": -1.49, + "pChg365d": 58.24 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INDIA TOURISM", + "indexSymbol": "NIFTY IND TOURISM", + "open": 9132.25, + "high": 9172.1, + "low": 9043.7, + "close": 9137.4, + "prevClose": 9131.2, + "pChg": 0.07, + "yearHigh": 9211.9, + "yearLow": 6058.05, + "advances": "7", + "declines": "8", + "unchanged": "0", + "pChg30d": 5.31, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY CAPITAL MARKETS", + "indexSymbol": "NIFTY CAPITAL MKT", + "open": 4011.8, + "high": 4057.8, + "low": 3973.5, + "close": 4045.5, + "prevClose": 4014.95, + "pChg": 0.76, + "yearHigh": 4265.8, + "yearLow": 2009.6, + "advances": "9", + "declines": "6", + "unchanged": "0", + "pChg30d": 6.42, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY EV & NEW AGE AUTOMOTIVE", + "indexSymbol": "NIFTY EV", + "open": 2991.65, + "high": 2995.05, + "low": 2953.35, + "close": 2961.05, + "prevClose": 2994.8, + "pChg": -0.57, + "yearHigh": 0, + "yearLow": 0, + "advances": "8", + "declines": "25", + "unchanged": "0", + "pChg30d": -1.86, + "pChg365d": 21.18 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INDIA NEW AGE CONSUMPTION", + "indexSymbol": "NIFTY NEW CONSUMP", + "open": 11784.05, + "high": 11809.05, + "low": 11691, + "close": 11760.95, + "prevClose": 11782.45, + "pChg": -0.1, + "yearHigh": 0, + "yearLow": 0, + "advances": "26", + "declines": "49", + "unchanged": "0", + "pChg30d": 1.88, + "pChg365d": 36.62 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY INDIA SELECT 5 CORPORATE GROUPS (MAATR)", + "indexSymbol": "NIFTY CORP MAATR", + "open": 35325.5, + "high": 35518.15, + "low": 35123.2, + "close": 35277.3, + "prevClose": 35340, + "pChg": 0.1, + "yearHigh": 0, + "yearLow": 0, + "advances": "11", + "declines": "31", + "unchanged": "0", + "pChg30d": -2.51, + "pChg365d": 10.42 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY MOBILITY", + "indexSymbol": "NIFTY MOBILITY", + "open": 19724.3, + "high": 19745.3, + "low": 19518.15, + "close": 19584.75, + "prevClose": 19732.85, + "pChg": -0.56, + "yearHigh": 0, + "yearLow": 0, + "advances": "5", + "declines": "25", + "unchanged": "0", + "pChg30d": -1.41, + "pChg365d": 24.89 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY100 ENHANCED ESG", + "indexSymbol": "NIFTY100 ENH ESG", + "open": 4749.1, + "high": 4765.5, + "low": 4715.4, + "close": 4733.8, + "prevClose": 4749.7, + "pChg": -0.24, + "yearHigh": 0, + "yearLow": 0, + "advances": "31", + "declines": "59", + "unchanged": "2", + "pChg30d": -1.45, + "pChg365d": 12.29 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY CORE HOUSING", + "indexSymbol": "NIFTY COREHOUSING", + "open": 16419.35, + "high": 16517.95, + "low": 16329.45, + "close": 16354.9, + "prevClose": 16408.6, + "pChg": -0.33, + "yearHigh": 17961.7, + "yearLow": 13704.8, + "advances": "11", + "declines": "19", + "unchanged": "0", + "pChg30d": 0.49, + "pChg365d": 14.65 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY HOUSING", + "indexSymbol": "NIFTY HOUSING", + "open": 11072.65, + "high": 11138.5, + "low": 10981.35, + "close": 11018.05, + "prevClose": 11067.9, + "pChg": -0.45, + "yearHigh": 12386.3, + "yearLow": 9853, + "advances": "20", + "declines": "30", + "unchanged": "0", + "pChg30d": -2.08, + "pChg365d": 7.91 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY IPO", + "indexSymbol": "NIFTY IPO", + "open": 2221.65, + "high": 2236.75, + "low": 2210.65, + "close": 2225.8, + "prevClose": 2221.6, + "pChg": 0.19, + "yearHigh": 2387.55, + "yearLow": 1742.35, + "advances": "41", + "declines": "81", + "unchanged": "0", + "pChg30d": 1.15, + "pChg365d": 23.61 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY MIDSMALL INDIA CONSUMPTION", + "indexSymbol": "NIFTY MS IND CONS", + "open": 20301.5, + "high": 20640.6, + "low": 20270.55, + "close": 20556.6, + "prevClose": 20307.95, + "pChg": 1.22, + "yearHigh": 21008.1, + "yearLow": 14493.4, + "advances": "21", + "declines": "9", + "unchanged": "0", + "pChg30d": 3.86, + "pChg365d": 33.9 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY NON-CYCLICAL CONSUMER", + "indexSymbol": "NIFTY NONCYC CONS", + "open": 16029.05, + "high": 16106.45, + "low": 15941.8, + "close": 16059.95, + "prevClose": 16010.45, + "pChg": 0.31, + "yearHigh": 18289.65, + "yearLow": 13081.55, + "advances": "15", + "declines": "15", + "unchanged": "0", + "pChg30d": -0.84, + "pChg365d": 17.37 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY RURAL", + "indexSymbol": "NIFTY RURAL", + "open": 14029.4, + "high": 14061.95, + "low": 13903.9, + "close": 13935.8, + "prevClose": 14007.95, + "pChg": -0.52, + "yearHigh": 16370.1, + "yearLow": 12304.35, + "advances": "29", + "declines": "46", + "unchanged": "0", + "pChg30d": -2.71, + "pChg365d": 9.42 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY SHARIAH 25", + "indexSymbol": "NIFTY SHARIAH 25", + "open": 8449.85, + "high": 8494.4, + "low": 8404.85, + "close": 8472.9, + "prevClose": 8451.2, + "pChg": 0.26, + "yearHigh": 9449.55, + "yearLow": 7267.55, + "advances": "11", + "declines": "13", + "unchanged": "1", + "pChg30d": -2.07, + "pChg365d": 11.33 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY TRANSPORTATION & LOGISTICS", + "indexSymbol": "NIFTY TRANS LOGIS", + "open": 22372.2, + "high": 22391.5, + "low": 22127.5, + "close": 22203.55, + "prevClose": 22387.2, + "pChg": -0.82, + "yearHigh": 26170.5, + "yearLow": 16828.35, + "advances": "3", + "declines": "27", + "unchanged": "0", + "pChg30d": -1.25, + "pChg365d": 26.25 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY50 SHARIAH", + "indexSymbol": "NIFTY50 SHARIAH", + "open": 5047.05, + "high": 5062.7, + "low": 5015.75, + "close": 5050.6, + "prevClose": 5047.9, + "pChg": 0.05, + "yearHigh": 5677.9, + "yearLow": 4444.95, + "advances": "7", + "declines": "10", + "unchanged": "1", + "pChg30d": -1.19, + "pChg365d": 8.97 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "THEMATIC INDICES", + "indexName": "NIFTY500 SHARIAH", + "indexSymbol": "NIFTY500 SHARIAH", + "open": 7444.85, + "high": 7456.4, + "low": 7401.65, + "close": 7439.7, + "prevClose": 7446, + "pChg": -0.08, + "yearHigh": 8238.85, + "yearLow": 6154.6, + "advances": "87", + "declines": "123", + "unchanged": "2", + "pChg30d": -1.16, + "pChg365d": 16.15 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY 8-13 YR G-SEC", + "indexSymbol": "NIFTY GS 8 13YR", + "open": 2760.08, + "high": 2761.29, + "low": 2759.93, + "close": 2760.67, + "prevClose": 2760.09, + "pChg": 0.02, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.54, + "pChg365d": 9.45 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY 10 YR BENCHMARK G-SEC", + "indexSymbol": "NIFTY GS 10YR", + "open": 2440.67, + "high": 2442.15, + "low": 2440.47, + "close": 2441.43, + "prevClose": 2440.67, + "pChg": 0.03, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.55, + "pChg365d": 9.29 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY 10 YR BENCHMARK G-SEC (CLEAN PRICE)", + "indexSymbol": "NIFTY GS 10YR CLN", + "open": 888.21, + "high": 888.76, + "low": 888.13, + "close": 888.49, + "prevClose": 888.21, + "pChg": 0.03, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.02, + "pChg365d": 2.08 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY 4-8 YR G-SEC INDEX", + "indexSymbol": "NIFTY GS 4 8YR", + "open": 2980.61, + "high": 2981.4, + "low": 2980.61, + "close": 2980.92, + "prevClose": 2980.62, + "pChg": 0.01, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.51, + "pChg365d": 8.5 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY 11-15 YR G-SEC INDEX", + "indexSymbol": "NIFTY GS 11 15YR", + "open": 3052.06, + "high": 3054.35, + "low": 3051.94, + "close": 3054.35, + "prevClose": 3052.06, + "pChg": 0.07, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.37, + "pChg365d": 10.43 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY 15 YR AND ABOVE G-SEC INDEX", + "indexSymbol": "NIFTY GS 15YRPLUS", + "open": 3366.95, + "high": 3368.57, + "low": 3366.16, + "close": 3368.57, + "prevClose": 3366.95, + "pChg": 0.04, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.38, + "pChg365d": 11.98 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY COMPOSITE G-SEC INDEX", + "indexSymbol": "NIFTY GS COMPSITE", + "open": 2854.91, + "high": 2856.31, + "low": 2854.82, + "close": 2856.09, + "prevClose": 2854.92, + "pChg": 0.04, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.5, + "pChg365d": 9.69 + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY BHARAT BOND INDEX - APRIL 2025", + "indexSymbol": "BHARATBOND-APR25", + "open": 1288.68, + "high": 1288.72, + "low": 1288.67, + "close": 1288.72, + "prevClose": 1287.9, + "pChg": 0.02, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.51, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY BHARAT BOND INDEX - APRIL 2030", + "indexSymbol": "BHARATBOND-APR30", + "open": 1448.76, + "high": 1449.1, + "low": 1448.73, + "close": 1449.06, + "prevClose": 1447.61, + "pChg": 0.04, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.44, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY BHARAT BOND INDEX - APRIL 2031", + "indexSymbol": "BHARATBOND-APR31", + "open": 1322.15, + "high": 1322.89, + "low": 1322.15, + "close": 1322.89, + "prevClose": 1321.31, + "pChg": 0.07, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.55, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY BHARAT BOND INDEX - APRIL 2032", + "indexSymbol": "BHARATBOND-APR32", + "open": 1208.99, + "high": 1208.99, + "low": 1208.98, + "close": 1208.98, + "prevClose": 1208.29, + "pChg": 0.01, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.73, + "pChg365d": "-" + }, + { + "scrapeTs": "2024-12-30T11:24:38.475819+00:00", + "indexType": "FIXED INCOME INDICES", + "indexName": "NIFTY BHARAT BOND INDEX - APRIL 2033", + "indexSymbol": "BHARATBOND-APR33", + "open": 1180.18, + "high": 1180.18, + "low": 1180.17, + "close": 1180.17, + "prevClose": 1179.5, + "pChg": 0.01, + "yearHigh": 0, + "yearLow": 0, + "advances": null, + "declines": null, + "unchanged": null, + "pChg30d": 0.91, + "pChg365d": "-" + } +] \ No newline at end of file diff --git a/nse/controllers/indices/examples/20241128_raw_nse_index_master.json b/nse/controllers/indices/examples/20241128_raw_nse_index_master.json new file mode 100644 index 0000000..ada02a6 --- /dev/null +++ b/nse/controllers/indices/examples/20241128_raw_nse_index_master.json @@ -0,0 +1,2785 @@ +{ + "data": [ + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY 50", + "indexSymbol": "NIFTY 50", + "last": 23914.15, + "variation": -360.75, + "percentChange": -1.49, + "open": 24274.15, + "high": 24345.75, + "low": 23873.35, + "previousClose": 24274.9, + "yearHigh": 26277.35, + "yearLow": 20183.7, + "indicativeClose": 0, + "pe": "22.01", + "pb": "3.56", + "dy": "1.28", + "declines": "46", + "advances": "4", + "unchanged": "0", + "perChange365d": 22.05, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-50.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.26, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-50.svg", + "previousDay": 24194.5, + "oneWeekAgo": 23349.9, + "oneMonthAgo": 24339.15, + "oneYearAgo": 19889.7 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY NEXT 50", + "indexSymbol": "NIFTY NEXT 50", + "last": 70254.25, + "variation": 68.85, + "percentChange": 0.1, + "open": 70442.9, + "high": 70872.4, + "low": 70050.75, + "previousClose": 70185.4, + "yearHigh": 77918, + "yearLow": 48197.45, + "indicativeClose": 0, + "pe": "22.43", + "pb": "3.77", + "dy": "1.4", + "declines": "25", + "advances": "25", + "unchanged": "0", + "perChange365d": 48.82, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-NEXT-50.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.22, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-NEXT-50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-NEXT-50.svg", + "previousDay": 69522.25, + "oneWeekAgo": 66765.45, + "oneMonthAgo": 70030.55, + "oneYearAgo": 47161.95 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY 100", + "indexSymbol": "NIFTY 100", + "last": 24836.25, + "variation": -278.9, + "percentChange": -1.11, + "open": 25135.9, + "high": 25230.1, + "low": 24791.6, + "previousClose": 25115.15, + "yearHigh": 27335.65, + "yearLow": 20263.1, + "indicativeClose": 0, + "pe": "22.56", + "pb": "3.61", + "dy": "1.25", + "declines": "71", + "advances": "29", + "unchanged": "0", + "perChange365d": 25.96, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-100.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.24, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-100.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-100.svg", + "previousDay": 24983.1, + "oneWeekAgo": 24135.1, + "oneMonthAgo": 25175.2, + "oneYearAgo": 19938.4 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY 200", + "indexSymbol": "NIFTY 200", + "last": 13524.75, + "variation": -125.1, + "percentChange": -0.92, + "open": 13664.95, + "high": 13720.8, + "low": 13499.3, + "previousClose": 13649.85, + "yearHigh": 14833.75, + "yearLow": 10924, + "indicativeClose": 0, + "pe": "24.43", + "pb": "3.8", + "dy": "1.18", + "declines": "112", + "advances": "87", + "unchanged": "1", + "perChange365d": 27.06, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-200.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.04, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-200.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-200.svg", + "previousDay": 13575.55, + "oneWeekAgo": 13129.7, + "oneMonthAgo": 13655.35, + "oneYearAgo": 10742.95 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY 500", + "indexSymbol": "NIFTY 500", + "last": 22514.35, + "variation": -177.35, + "percentChange": -0.78, + "open": 22722.3, + "high": 22821.75, + "low": 22472.25, + "previousClose": 22691.7, + "yearHigh": 24573.4, + "yearLow": 18053.15, + "indicativeClose": 0, + "pe": "25.57", + "pb": "3.89", + "dy": "1.13", + "declines": "269", + "advances": "226", + "unchanged": "5", + "perChange365d": 27.9, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-500.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.18, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-500.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-500.svg", + "previousDay": 22562.45, + "oneWeekAgo": 21820.85, + "oneMonthAgo": 22649.95, + "oneYearAgo": 17741.8 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY MIDCAP 50", + "indexSymbol": "NIFTY MIDCAP 50", + "last": 15661.85, + "variation": -68.55, + "percentChange": -0.44, + "open": 15761.4, + "high": 15815.6, + "low": 15628.85, + "previousClose": 15730.4, + "yearHigh": 17066.75, + "yearLow": 12265.45, + "indicativeClose": 0, + "pe": "47.39", + "pb": "5.54", + "dy": "0.79", + "declines": "26", + "advances": "24", + "unchanged": "0", + "perChange365d": 30.74, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MIDCAP-50.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.19, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MIDCAP-50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MIDCAP-50.svg", + "previousDay": 15635.35, + "oneWeekAgo": 15167.55, + "oneMonthAgo": 15544.65, + "oneYearAgo": 12031.6 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY MIDCAP 100", + "indexSymbol": "NIFTY MIDCAP 100", + "last": 56300.75, + "variation": 28.4, + "percentChange": 0.05, + "open": 56414.1, + "high": 56768.95, + "low": 56169.65, + "previousClose": 56272.35, + "yearHigh": 60925.95, + "yearLow": 43118.25, + "indicativeClose": 0, + "pe": "41.24", + "pb": "5.08", + "dy": "0.81", + "declines": "41", + "advances": "58", + "unchanged": "1", + "perChange365d": 33.1, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MIDCAP-100.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.96, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MIDCAP-100.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MIDCAP-100.svg", + "previousDay": 55914.4, + "oneWeekAgo": 54385.35, + "oneMonthAgo": 55736.6, + "oneYearAgo": 42278 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY SMALLCAP 100", + "indexSymbol": "NIFTY SMLCAP 100", + "last": 18511.55, + "variation": 8.7, + "percentChange": 0.05, + "open": 18579.35, + "high": 18712.35, + "low": 18468.1, + "previousClose": 18502.85, + "yearHigh": 19640.6, + "yearLow": 14085.35, + "indicativeClose": 0, + "pe": "34.2", + "pb": "4.08", + "dy": "0.97", + "declines": "52", + "advances": "48", + "unchanged": "0", + "perChange365d": 33.41, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-SMLCAP-100.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 2.44, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-SMLCAP-100.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-SMLCAP-100.svg", + "previousDay": 18265.3, + "oneWeekAgo": 17596.6, + "oneMonthAgo": 18062.3, + "oneYearAgo": 13868.9 + }, + { + "key": "BROAD MARKET INDICES", + "index": "INDIA VIX", + "indexSymbol": "INDIA VIX", + "last": 15.205, + "variation": 0.58, + "percentChange": 3.96, + "open": 14.625, + "high": 15.5625, + "low": 14.27, + "previousClose": 14.625, + "yearHigh": 31.71, + "yearLow": 9.47, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 20.12, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/INDIA-VIX.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 2.34, + "chart30dPath": "https://nsearchives.nseindia.com/30d/INDIA-VIX.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/INDIA-VIX.svg", + "previousDay": 15.305, + "oneWeekAgo": 15.99, + "oneMonthAgo": 14.29, + "oneYearAgo": 12.175 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY MIDCAP 150", + "indexSymbol": "NIFTY MIDCAP 150", + "last": 20839.9, + "variation": 1.7, + "percentChange": 0.01, + "open": 20885.65, + "high": 21001.3, + "low": 20794.2, + "previousClose": 20838.2, + "yearHigh": 22515.4, + "yearLow": 16034.75, + "indicativeClose": 0, + "pe": "41.85", + "pb": "5.37", + "dy": "0.78", + "declines": "70", + "advances": "79", + "unchanged": "1", + "perChange365d": 32.44, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MIDCAP-150.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.69, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MIDCAP-150.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MIDCAP-150.svg", + "previousDay": 20735.1, + "oneWeekAgo": 20180.9, + "oneMonthAgo": 20695.55, + "oneYearAgo": 15734.35 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY SMALLCAP 50", + "indexSymbol": "NIFTY SMLCAP 50", + "last": 8900.15, + "variation": -11.3, + "percentChange": -0.13, + "open": 8948.85, + "high": 8996.75, + "low": 8881.8, + "previousClose": 8911.45, + "yearHigh": 9446.5, + "yearLow": 6515.65, + "indicativeClose": 0, + "pe": "30.7", + "pb": "3.72", + "dy": "0.8", + "declines": "30", + "advances": "20", + "unchanged": "0", + "perChange365d": 38.81, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-SMLCAP-50.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 2.14, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-SMLCAP-50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-SMLCAP-50.svg", + "previousDay": 8807.55, + "oneWeekAgo": 8513.5, + "oneMonthAgo": 8724.6, + "oneYearAgo": 6420.1 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY SMALLCAP 250", + "indexSymbol": "NIFTY SMLCAP 250", + "last": 17577.85, + "variation": 25.2, + "percentChange": 0.14, + "open": 17612.1, + "high": 17737.8, + "low": 17532.35, + "previousClose": 17552.65, + "yearHigh": 18688.3, + "yearLow": 13176.2, + "indicativeClose": 0, + "pe": "33.8", + "pb": "4.09", + "dy": "0.87", + "declines": "128", + "advances": "118", + "unchanged": "4", + "perChange365d": 34.88, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-SMLCAP-250.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 2.34, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-SMLCAP-250.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-SMLCAP-250.svg", + "previousDay": 17375.55, + "oneWeekAgo": 16747.85, + "oneMonthAgo": 17151.6, + "oneYearAgo": 13013.9 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY MIDSMALLCAP 400", + "indexSymbol": "NIFTY MIDSML 400", + "last": 19725.25, + "variation": 11.3, + "percentChange": 0.06, + "open": 19766.8, + "high": 19885.35, + "low": 19683.2, + "previousClose": 19713.95, + "yearHigh": 21177.6, + "yearLow": 15054.75, + "indicativeClose": 0, + "pe": "38.51", + "pb": "4.82", + "dy": "0.81", + "declines": "198", + "advances": "197", + "unchanged": "5", + "perChange365d": 33.32, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MIDSML-400.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.28, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MIDSML-400.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MIDSML-400.svg", + "previousDay": 19579.65, + "oneWeekAgo": 18989.75, + "oneMonthAgo": 19464.5, + "oneYearAgo": 14787.2 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY500 MULTICAP 50:25:25", + "indexSymbol": "NIFTY500 MULTICAP", + "last": 15805.8, + "variation": -82.45, + "percentChange": -0.52, + "open": 15917.3, + "high": 15996.65, + "low": 15775.65, + "previousClose": 15888.25, + "yearHigh": 17112.15, + "yearLow": 5531.55, + "indicativeClose": 0, + "pe": "28.15", + "pb": "4.06", + "dy": "1.04", + "declines": "269", + "advances": "226", + "unchanged": "5", + "perChange365d": 29.87, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY500-MULTICAP.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.63, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY500-MULTICAP.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY500-MULTICAP.svg", + "previousDay": 15786.65, + "oneWeekAgo": 15270.4, + "oneMonthAgo": 15789.4, + "oneYearAgo": 12233.8 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY LARGEMIDCAP 250", + "indexSymbol": "NIFTY LARGEMID250", + "last": 15706.75, + "variation": -86.5, + "percentChange": -0.55, + "open": 15817.8, + "high": 15889.75, + "low": 15675.65, + "previousClose": 15793.25, + "yearHigh": 17095.2, + "yearLow": 5635.2, + "indicativeClose": 0, + "pe": "29.42", + "pb": "4.33", + "dy": "1.02", + "declines": "141", + "advances": "108", + "unchanged": "1", + "perChange365d": 29.24, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-LARGEMID250.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.23, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-LARGEMID250.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-LARGEMID250.svg", + "previousDay": 15712.65, + "oneWeekAgo": 15236.4, + "oneMonthAgo": 15757.7, + "oneYearAgo": 12220.35 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY MIDCAP SELECT", + "indexSymbol": "NIFTY MID SELECT", + "last": 12553.75, + "variation": -65.5, + "percentChange": -0.52, + "open": 12642, + "high": 12688.55, + "low": 12529.2, + "previousClose": 12619.25, + "yearHigh": 13407.55, + "yearLow": 5520.25, + "indicativeClose": 0, + "pe": "50.12", + "pb": "6.63", + "dy": "0.82", + "declines": "15", + "advances": "10", + "unchanged": "0", + "perChange365d": 32.15, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MID-SELECT.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.77, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MID-SELECT.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MID-SELECT.svg", + "previousDay": 12569.65, + "oneWeekAgo": 12164.65, + "oneMonthAgo": 12400.2, + "oneYearAgo": 9549 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY TOTAL MARKET", + "indexSymbol": "NIFTY TOTAL MKT", + "last": 12706.15, + "variation": -93.05, + "percentChange": -0.73, + "open": 12817.65, + "high": 12876.35, + "low": 12682.3, + "previousClose": 12799.2, + "yearHigh": 13842.6, + "yearLow": 6252.1, + "indicativeClose": 0, + "pe": "25.71", + "pb": "3.87", + "dy": "1.11", + "declines": "363", + "advances": "382", + "unchanged": "6", + "perChange365d": 28.31, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-TOTAL-MKT.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.33, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-TOTAL-MKT.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-TOTAL-MKT.svg", + "previousDay": 12721, + "oneWeekAgo": 12302.6, + "oneMonthAgo": 12757.45, + "oneYearAgo": 9975.4 + }, + { + "key": "BROAD MARKET INDICES", + "index": "NIFTY MICROCAP 250", + "indexSymbol": "NIFTY MICROCAP250", + "last": 24906.3, + "variation": 164.55, + "percentChange": 0.67, + "open": 24836.4, + "high": 25079.9, + "low": 24745.65, + "previousClose": 24741.75, + "yearHigh": 26066.45, + "yearLow": 5802.95, + "indicativeClose": 0, + "pe": "29.97", + "pb": "3.56", + "dy": "0.51", + "declines": "94", + "advances": "156", + "unchanged": "1", + "perChange365d": 40.06, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MICROCAP250.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 4.1, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MICROCAP250.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MICROCAP250.svg", + "previousDay": 24332.7, + "oneWeekAgo": 23517.1, + "oneMonthAgo": 23767.15, + "oneYearAgo": 17664.7 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY BANK", + "indexSymbol": "NIFTY BANK", + "last": 51906.85, + "variation": -394.95, + "percentChange": -0.76, + "open": 52389.95, + "high": 52760.2, + "low": 51782.9, + "previousClose": 52301.8, + "yearHigh": 54467.35, + "yearLow": 44429, + "indicativeClose": 0, + "pe": "14.14", + "pb": "2.33", + "dy": "0.96", + "declines": "7", + "advances": "5", + "unchanged": "0", + "perChange365d": 19.19, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-BANK.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 2.03, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-BANK.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-BANK.svg", + "previousDay": 52191.5, + "oneWeekAgo": 50372.9, + "oneMonthAgo": 51259.3, + "oneYearAgo": 43880.95 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY AUTO", + "indexSymbol": "NIFTY AUTO", + "last": 23134.7, + "variation": -382.65, + "percentChange": -1.63, + "open": 23509.25, + "high": 23549.7, + "low": 23091.8, + "previousClose": 23517.35, + "yearHigh": 27696.1, + "yearLow": 17294.35, + "indicativeClose": 0, + "pe": "22.5", + "pb": "4.74", + "dy": "0.97", + "declines": "13", + "advances": "2", + "unchanged": "0", + "perChange365d": 36.71, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-AUTO.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -1.87, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-AUTO.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-AUTO.svg", + "previousDay": 23413, + "oneWeekAgo": 23145.9, + "oneMonthAgo": 23964.45, + "oneYearAgo": 17202.75 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY FINANCIAL SERVICES", + "indexSymbol": "NIFTY FIN SERVICE", + "last": 23919.6, + "variation": -251.95, + "percentChange": -1.04, + "open": 24211.9, + "high": 24378.05, + "low": 23854.7, + "previousClose": 24171.55, + "yearHigh": 25201.95, + "yearLow": 19822.05, + "indicativeClose": 0, + "pe": "16.58", + "pb": "2.88", + "dy": "0.9", + "declines": "11", + "advances": "9", + "unchanged": "0", + "perChange365d": 22.68, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-FIN-SERVICE.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.3, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-FIN-SERVICE.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-FIN-SERVICE.svg", + "previousDay": 24046.8, + "oneWeekAgo": 23273.45, + "oneMonthAgo": 23861.85, + "oneYearAgo": 19702.65 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY FINANCIAL SERVICES 25/50", + "indexSymbol": "NIFTY FINSRV25 50", + "last": 25691.45, + "variation": -266.65, + "percentChange": -1.03, + "open": 25999.75, + "high": 26163.05, + "low": 25596.7, + "previousClose": 25958.1, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "16.6", + "pb": "2.97", + "dy": "0.93", + "declines": "11", + "advances": "9", + "unchanged": "0", + "perChange365d": 24.54, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-FINSRV25-50.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.01, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-FINSRV25-50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-FINSRV25-50.svg", + "previousDay": 25848.5, + "oneWeekAgo": 25020.15, + "oneMonthAgo": 25961.25, + "oneYearAgo": 20842.7 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY FMCG", + "indexSymbol": "NIFTY FMCG", + "last": 57706.05, + "variation": -322.55, + "percentChange": -0.56, + "open": 58068.5, + "high": 58788.85, + "low": 57444.8, + "previousClose": 58028.6, + "yearHigh": 66438.7, + "yearLow": 52398.75, + "indicativeClose": 0, + "pe": "45.95", + "pb": "11.24", + "dy": "1.84", + "declines": "12", + "advances": "3", + "unchanged": "0", + "perChange365d": 10.55, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-FMCG.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -2.07, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-FMCG.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-FMCG.svg", + "previousDay": 57838.25, + "oneWeekAgo": 55693.7, + "oneMonthAgo": 59252.65, + "oneYearAgo": 52489.5 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY IT", + "indexSymbol": "NIFTY IT", + "last": 42968.75, + "variation": -1049.95, + "percentChange": -2.39, + "open": 43948, + "high": 44013.1, + "low": 42864.8, + "previousClose": 44018.7, + "yearHigh": 44330.6, + "yearLow": 31320.15, + "indicativeClose": 0, + "pe": "34.01", + "pb": "8.84", + "dy": "1.89", + "declines": "10", + "advances": "0", + "unchanged": "0", + "perChange365d": 37.05, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-IT.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 4.3, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-IT.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-IT.svg", + "previousDay": 44085.95, + "oneWeekAgo": 41952.8, + "oneMonthAgo": 42205.4, + "oneYearAgo": 32118.45 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY MEDIA", + "indexSymbol": "NIFTY MEDIA", + "last": 1968.35, + "variation": 6.25, + "percentChange": 0.32, + "open": 1966.35, + "high": 1993.1, + "low": 1958.3, + "previousClose": 1962.1, + "yearHigh": 2508.6, + "yearLow": 1717.4, + "indicativeClose": 0, + "pe": null, + "pb": "2.23", + "dy": "0.59", + "declines": "5", + "advances": "5", + "unchanged": "0", + "perChange365d": -14.28, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MEDIA.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.58, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MEDIA.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MEDIA.svg", + "previousDay": 1943.1, + "oneWeekAgo": 1898.75, + "oneMonthAgo": 1931.5, + "oneYearAgo": 2288.85 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY METAL", + "indexSymbol": "NIFTY METAL", + "last": 8964.85, + "variation": -22.5, + "percentChange": -0.25, + "open": 9020.45, + "high": 9074.85, + "low": 8947, + "previousClose": 8987.35, + "yearHigh": 10322.05, + "yearLow": 7025.4, + "indicativeClose": 0, + "pe": "21.34", + "pb": "2.54", + "dy": "2.34", + "declines": "7", + "advances": "8", + "unchanged": "0", + "perChange365d": 28.36, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-METAL.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -3.14, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-METAL.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-METAL.svg", + "previousDay": 8916.7, + "oneWeekAgo": 8717.4, + "oneMonthAgo": 9278.4, + "oneYearAgo": 7001.65 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY PHARMA", + "indexSymbol": "NIFTY PHARMA", + "last": 21728.6, + "variation": -100, + "percentChange": -0.46, + "open": 21855.8, + "high": 21884.5, + "low": 21649.5, + "previousClose": 21828.6, + "yearHigh": 23907.9, + "yearLow": 15868.15, + "indicativeClose": 0, + "pe": "34.32", + "pb": "5.29", + "dy": "0.62", + "declines": "12", + "advances": "8", + "unchanged": "0", + "perChange365d": 37.28, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-PHARMA.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -4.5, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-PHARMA.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-PHARMA.svg", + "previousDay": 21961.75, + "oneWeekAgo": 21740.1, + "oneMonthAgo": 22857.25, + "oneYearAgo": 15900.3 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY PSU BANK", + "indexSymbol": "NIFTY PSU BANK", + "last": 6846.85, + "variation": 62.9, + "percentChange": 0.93, + "open": 6804.55, + "high": 6883.85, + "low": 6771.95, + "previousClose": 6783.95, + "yearHigh": 8053.3, + "yearLow": 5066.55, + "indicativeClose": 0, + "pe": "7.75", + "pb": "1.33", + "dy": "2.17", + "declines": "1", + "advances": "11", + "unchanged": "0", + "perChange365d": 34.49, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-PSU-BANK.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 4.03, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-PSU-BANK.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-PSU-BANK.svg", + "previousDay": 6789.95, + "oneWeekAgo": 6318.9, + "oneMonthAgo": 6521.3, + "oneYearAgo": 5044.35 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY PRIVATE BANK", + "indexSymbol": "NIFTY PVT BANK", + "last": 25234.85, + "variation": -283.1, + "percentChange": -1.11, + "open": 25541.95, + "high": 25689.1, + "low": 25189.55, + "previousClose": 25517.95, + "yearHigh": 27280.6, + "yearLow": 22390.1, + "indicativeClose": 0, + "pe": "15.11", + "pb": "2.34", + "dy": "0.59", + "declines": "6", + "advances": "4", + "unchanged": "0", + "perChange365d": 11.72, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-PVT-BANK.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.12, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-PVT-BANK.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-PVT-BANK.svg", + "previousDay": 25461.15, + "oneWeekAgo": 24824.7, + "oneMonthAgo": 25235.35, + "oneYearAgo": 22840.45 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY REALTY", + "indexSymbol": "NIFTY REALTY", + "last": 1025.35, + "variation": 0.45, + "percentChange": 0.04, + "open": 1028.4, + "high": 1041.2, + "low": 1022.1, + "previousClose": 1024.9, + "yearHigh": 1157.35, + "yearLow": 717.3, + "indicativeClose": 0, + "pe": "52.14", + "pb": "5.75", + "dy": "0.37", + "declines": "6", + "advances": "4", + "unchanged": "0", + "perChange365d": 44.97, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-REALTY.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 3.76, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-REALTY.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-REALTY.svg", + "previousDay": 1029.15, + "oneWeekAgo": 975.3, + "oneMonthAgo": 987.75, + "oneYearAgo": 706.95 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY HEALTHCARE INDEX", + "indexSymbol": "NIFTY HEALTHCARE", + "last": 13844.65, + "variation": -106.2, + "percentChange": -0.76, + "open": 13974.9, + "high": 13991.65, + "low": 13809.55, + "previousClose": 13950.85, + "yearHigh": 15049.4, + "yearLow": 6482.8, + "indicativeClose": 0, + "pe": "39.27", + "pb": "5.87", + "dy": "0.54", + "declines": "13", + "advances": "7", + "unchanged": "0", + "perChange365d": 39, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-HEALTHCARE.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -3.76, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-HEALTHCARE.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-HEALTHCARE.svg", + "previousDay": 14015.15, + "oneWeekAgo": 13816.05, + "oneMonthAgo": 14495.75, + "oneYearAgo": 10036.8 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY CONSUMER DURABLES", + "indexSymbol": "NIFTY CONSR DURBL", + "last": 39785.9, + "variation": -458, + "percentChange": -1.14, + "open": 40298.1, + "high": 40457.1, + "low": 39683.6, + "previousClose": 40243.9, + "yearHigh": 44426.55, + "yearLow": 14089.55, + "indicativeClose": 0, + "pe": "82.82", + "pb": "12.41", + "dy": "0.37", + "declines": "9", + "advances": "6", + "unchanged": "0", + "perChange365d": 38.51, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-CONSR-DURBL.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.19, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-CONSR-DURBL.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-CONSR-DURBL.svg", + "previousDay": 40239.5, + "oneWeekAgo": 39011.45, + "oneMonthAgo": 39769.9, + "oneYearAgo": 29054.75 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY OIL & GAS", + "indexSymbol": "NIFTY OIL AND GAS", + "last": 10966.95, + "variation": -17.9, + "percentChange": -0.16, + "open": 10998.2, + "high": 11144.9, + "low": 10935, + "previousClose": 10984.85, + "yearHigh": 13607.2, + "yearLow": 4632.7, + "indicativeClose": 0, + "pe": "13.07", + "pb": "1.65", + "dy": "2.91", + "declines": "5", + "advances": "9", + "unchanged": "1", + "perChange365d": 31.6, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-OIL-AND-GAS.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -3.4, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-OIL-AND-GAS.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-OIL-AND-GAS.svg", + "previousDay": 10923.95, + "oneWeekAgo": 10446.45, + "oneMonthAgo": 11371.8, + "oneYearAgo": 8347.25 + }, + { + "key": "SECTORAL INDICES", + "index": "NIFTY MIDSMALL HEALTHCARE", + "indexSymbol": "NIFTY MIDSML HLTH", + "last": 41316.4, + "variation": -237.15, + "percentChange": -0.57, + "open": 41674.4, + "high": 41702.5, + "low": 41277.35, + "previousClose": 41553.55, + "yearHigh": 43902.7, + "yearLow": 20019.15, + "indicativeClose": 0, + "pe": "48.63", + "pb": "6.03", + "dy": "0.86", + "declines": "19", + "advances": "11", + "unchanged": "0", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.78, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MIDSML-HLTH.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MIDSML-HLTH.svg", + "previousDay": 41703.6, + "oneWeekAgo": 41072.05, + "oneMonthAgo": 41879 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY DIVIDEND OPPORTUNITIES 50", + "indexSymbol": "NIFTY DIV OPPS 50", + "last": 6449.1, + "variation": -67.4, + "percentChange": -1.03, + "open": 6518.15, + "high": 6542, + "low": 6429.45, + "previousClose": 6516.5, + "yearHigh": 7012.65, + "yearLow": 4926.9, + "indicativeClose": 0, + "pe": "17.85", + "pb": "3.39", + "dy": "2.65", + "declines": "27", + "advances": "22", + "unchanged": "1", + "perChange365d": 34.87, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-DIV-OPPS-50.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.63, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-DIV-OPPS-50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-DIV-OPPS-50.svg", + "previousDay": 6498.8, + "oneWeekAgo": 6222.95, + "oneMonthAgo": 6475.75, + "oneYearAgo": 4831.65 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY GROWTH SECTORS 15", + "indexSymbol": "NIFTY GROWSECT 15", + "last": 11789.25, + "variation": -224.65, + "percentChange": -1.87, + "open": 11993, + "high": 12025.05, + "low": 11758.7, + "previousClose": 12013.9, + "yearHigh": 13065.05, + "yearLow": 10168.35, + "indicativeClose": 0, + "pe": "28.62", + "pb": "7.26", + "dy": "1.77", + "declines": "14", + "advances": "1", + "unchanged": "0", + "perChange365d": 19.6, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-GROWSECT-15.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.34, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-GROWSECT-15.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-GROWSECT-15.svg", + "previousDay": 12021.6, + "oneWeekAgo": 11587.55, + "oneMonthAgo": 11972.7, + "oneYearAgo": 10044.85 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY100 QUALITY 30", + "indexSymbol": "NIFTY100 QUALTY30", + "last": 5696.6, + "variation": -78.35, + "percentChange": -1.36, + "open": 5782.75, + "high": 5790.4, + "low": 5684.15, + "previousClose": 5774.95, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "32.4", + "pb": "8.23", + "dy": "1.73", + "declines": "30", + "advances": "0", + "unchanged": "0", + "perChange365d": 25.33, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY100-QUALTY30.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.35, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY100-QUALTY30.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY100-QUALTY30.svg", + "previousDay": 5740.4, + "oneWeekAgo": 5525, + "oneMonthAgo": 5795.15, + "oneYearAgo": 4607.75 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY50 VALUE 20", + "indexSymbol": "NIFTY50 VALUE 20", + "last": 13633.35, + "variation": -220.75, + "percentChange": -1.59, + "open": 13843.55, + "high": 13875.65, + "low": 13599.3, + "previousClose": 13854.1, + "yearHigh": 14731.65, + "yearLow": 10765.3, + "indicativeClose": 0, + "pe": "19.46", + "pb": "3.56", + "dy": "2.11", + "declines": "19", + "advances": "1", + "unchanged": "0", + "perChange365d": 30.43, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY50-VALUE-20.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.46, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY50-VALUE-20.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY50-VALUE-20.svg", + "previousDay": 13863.9, + "oneWeekAgo": 13300.4, + "oneMonthAgo": 13791, + "oneYearAgo": 10621.85 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY50 TR 2X LEVERAGE", + "indexSymbol": "NIFTY50 TR 2X LEV", + "last": 19424.2, + "variation": -598.85, + "percentChange": -2.99, + "open": 20018.05, + "high": 20136.1, + "low": 19358.6, + "previousClose": 20023.05, + "yearHigh": 23715.35, + "yearLow": 14723.6, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 40.01, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY50-TR-2X-LEV.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.95, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY50-TR-2X-LEV.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY50-TR-2X-LEV.svg", + "previousDay": 19894.5, + "oneWeekAgo": 18559.9, + "oneMonthAgo": 20214.75, + "oneYearAgo": 14300.95 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY50 PR 2X LEVERAGE", + "indexSymbol": "NIFTY50 PR 2X LEV", + "last": 13306.2, + "variation": -410.25, + "percentChange": -2.99, + "open": 13713.05, + "high": 13793.9, + "low": 13261.3, + "previousClose": 13716.45, + "yearHigh": 16297.55, + "yearLow": 10326.2, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 36.76, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY50-PR-2X-LEV.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -1.22, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY50-PR-2X-LEV.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY50-PR-2X-LEV.svg", + "previousDay": 13628.4, + "oneWeekAgo": 12714.15, + "oneMonthAgo": 13886.15, + "oneYearAgo": 10029.8 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY50 TR 1X INVERSE", + "indexSymbol": "NIFTY50 TR 1X INV", + "last": 172.6, + "variation": 2.6, + "percentChange": 1.53, + "open": 170.05, + "high": 172.85, + "low": 169.55, + "previousClose": 170, + "yearHigh": 197.5, + "yearLow": 156.1, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": -15.17, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY50-TR-1X-INV.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.47, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY50-TR-1X-INV.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY50-TR-1X-INV.svg", + "previousDay": 170.55, + "oneWeekAgo": 176.7, + "oneMonthAgo": 169.2, + "oneYearAgo": 200.4 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY50 PR 1X INVERSE", + "indexSymbol": "NIFTY50 PR 1X INV", + "last": 208.3, + "variation": 3.1, + "percentChange": 1.51, + "open": 205.25, + "high": 208.65, + "low": 204.65, + "previousClose": 205.2, + "yearHigh": 235.6, + "yearLow": 188.15, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": -14.16, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY50-PR-1X-INV.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.61, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY50-PR-1X-INV.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY50-PR-1X-INV.svg", + "previousDay": 205.85, + "oneWeekAgo": 213.25, + "oneMonthAgo": 203.95, + "oneYearAgo": 239.05 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY50 DIVIDEND POINTS", + "indexSymbol": "NIFTY50 DIV POINT", + "last": 233.03, + "variation": 0, + "percentChange": 0, + "open": 233.03, + "high": 233.03, + "low": 233.03, + "previousClose": 233.03, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 28.09, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY50-DIV-POINT.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 16.89, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY50-DIV-POINT.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY50-DIV-POINT.svg", + "previousDay": 233.03, + "oneWeekAgo": 233.03, + "oneMonthAgo": 199.35, + "oneYearAgo": 181.93 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY ALPHA 50", + "indexSymbol": "NIFTY ALPHA 50", + "last": 56086.8, + "variation": 446.6, + "percentChange": 0.8, + "open": 55911.8, + "high": 56618.75, + "low": 55768.8, + "previousClose": 55640.2, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "37.78", + "pb": "6.12", + "dy": "0.71", + "declines": "20", + "advances": "29", + "unchanged": "1", + "perChange365d": 45.14, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-ALPHA-50.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.84, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-ALPHA-50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-ALPHA-50.svg", + "previousDay": 54834.95, + "oneWeekAgo": 53141.35, + "oneMonthAgo": 55175.95, + "oneYearAgo": 38335.65 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY50 EQUAL WEIGHT", + "indexSymbol": "NIFTY50 EQL WGT", + "last": 29663.15, + "variation": -450.55, + "percentChange": -1.5, + "open": 30138, + "high": 30198.4, + "low": 29606.8, + "previousClose": 30113.7, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "22.69", + "pb": "3.66", + "dy": "1.4", + "declines": "46", + "advances": "4", + "unchanged": "0", + "perChange365d": 23.36, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY50-EQL-WGT.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -2.03, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY50-EQL-WGT.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY50-EQL-WGT.svg", + "previousDay": 29989.95, + "oneWeekAgo": 29085.4, + "oneMonthAgo": 30737.7, + "oneYearAgo": 24412.2 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY100 EQUAL WEIGHT", + "indexSymbol": "NIFTY100 EQL WGT", + "last": 31824.35, + "variation": -118.95, + "percentChange": -0.37, + "open": 32035.05, + "high": 32236.4, + "low": 31757.95, + "previousClose": 31943.3, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "22.99", + "pb": "3.65", + "dy": "1.26", + "declines": "71", + "advances": "29", + "unchanged": "0", + "perChange365d": 32.45, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY100-EQL-WGT.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -1.38, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY100-EQL-WGT.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY100-EQL-WGT.svg", + "previousDay": 31638.8, + "oneWeekAgo": 30708.85, + "oneMonthAgo": 32389.4, + "oneYearAgo": 24118.1 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY100 LOW VOLATILITY 30", + "indexSymbol": "NIFTY100 LOWVOL30", + "last": 19139.8, + "variation": -275.55, + "percentChange": -1.42, + "open": 19430.15, + "high": 19463.35, + "low": 19084, + "previousClose": 19415.35, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "31.97", + "pb": "5.91", + "dy": "1.1", + "declines": "29", + "advances": "1", + "unchanged": "0", + "perChange365d": 24.05, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY100-LOWVOL30.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -2.53, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY100-LOWVOL30.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY100-LOWVOL30.svg", + "previousDay": 19429, + "oneWeekAgo": 18838.55, + "oneMonthAgo": 19920.05, + "oneYearAgo": 15651.3 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY200 QUALITY 30", + "indexSymbol": "NIFTY200 QUALTY30", + "last": 21188.05, + "variation": -290.65, + "percentChange": -1.35, + "open": 21503.8, + "high": 21539, + "low": 21140.25, + "previousClose": 21478.7, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "34.19", + "pb": "9.9", + "dy": "1.83", + "declines": "29", + "advances": "1", + "unchanged": "0", + "perChange365d": 26.63, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY200-QUALTY30.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.44, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY200-QUALTY30.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY200-QUALTY30.svg", + "previousDay": 21385, + "oneWeekAgo": 20570, + "oneMonthAgo": 21573.7, + "oneYearAgo": 16961.9 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY ALPHA LOW-VOLATILITY 30", + "indexSymbol": "NIFTY ALPHALOWVOL", + "last": 27473.75, + "variation": -272.05, + "percentChange": -0.98, + "open": 27770.5, + "high": 27840.3, + "low": 27404.2, + "previousClose": 27745.8, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "26.58", + "pb": "4.32", + "dy": "0.99", + "declines": "27", + "advances": "3", + "unchanged": "0", + "perChange365d": 31.82, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-ALPHALOWVOL.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -2.84, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-ALPHALOWVOL.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-ALPHALOWVOL.svg", + "previousDay": 27702.6, + "oneWeekAgo": 26892.6, + "oneMonthAgo": 28557.55, + "oneYearAgo": 21047.75 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY200 MOMENTUM 30", + "indexSymbol": "NIFTY200MOMENTM30", + "last": 33940.45, + "variation": -267.75, + "percentChange": -0.78, + "open": 34261.9, + "high": 34466.95, + "low": 33853.5, + "previousClose": 34208.2, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "20.56", + "pb": "4.42", + "dy": "1.51", + "declines": "19", + "advances": "11", + "unchanged": "0", + "perChange365d": 39.17, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY200MOMENTM30.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.89, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY200MOMENTM30.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY200MOMENTM30.svg", + "previousDay": 33748.45, + "oneWeekAgo": 32603.7, + "oneMonthAgo": 34513.9, + "oneYearAgo": 24579.4 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY MIDCAP150 QUALITY 50", + "indexSymbol": "NIFTY M150 QLTY50", + "last": 24296.75, + "variation": -72.9, + "percentChange": -0.3, + "open": 24407.95, + "high": 24462.7, + "low": 24244.4, + "previousClose": 24369.65, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "38.4", + "pb": "9", + "dy": "1.2", + "declines": "34", + "advances": "16", + "unchanged": "0", + "perChange365d": 26.87, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-M150-QLTY50.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.48, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-M150-QLTY50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-M150-QLTY50.svg", + "previousDay": 24336.6, + "oneWeekAgo": 23680.8, + "oneMonthAgo": 24486.75, + "oneYearAgo": 19209 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY200 ALPHA 30", + "indexSymbol": "NIFTY200 ALPHA 30", + "last": 26105.4, + "variation": -142.75, + "percentChange": -0.54, + "open": 26295.35, + "high": 26434.75, + "low": 26036.6, + "previousClose": 26248.15, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "25.11", + "pb": "5.2", + "dy": "1.29", + "declines": "21", + "advances": "9", + "unchanged": "0", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.73, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY200-ALPHA-30.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY200-ALPHA-30.svg", + "previousDay": 26025.05, + "oneWeekAgo": 25092.5, + "oneMonthAgo": 26441.55 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY MIDCAP150 MOMENTUM 50", + "indexSymbol": "NIFTYM150MOMNTM50", + "last": 63698.05, + "variation": 198.85, + "percentChange": 0.31, + "open": 63653.9, + "high": 64182.25, + "low": 63417.5, + "previousClose": 63499.2, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "34.41", + "pb": "5.13", + "dy": "0.86", + "declines": "21", + "advances": "28", + "unchanged": "1", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": 2.08, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTYM150MOMNTM50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTYM150MOMNTM50.svg", + "previousDay": 63102.85, + "oneWeekAgo": 61445.4, + "oneMonthAgo": 62208 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY500 MOMENTUM 50", + "indexSymbol": "NIFTY500MOMENTM50", + "last": 59029.25, + "variation": 86.95, + "percentChange": 0.15, + "open": 59134.5, + "high": 59808.9, + "low": 58878.55, + "previousClose": 58942.3, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "27.59", + "pb": "5.05", + "dy": "0.78", + "declines": "18", + "advances": "31", + "unchanged": "1", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.72, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY500MOMENTM50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY500MOMENTM50.svg", + "previousDay": 57812.1, + "oneWeekAgo": 55972.25, + "oneMonthAgo": 58521.67 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY MIDSMALLCAP400 MOMENTUM QUALITY 100", + "indexSymbol": "NIFTYMS400 MQ 100", + "last": 51538.05, + "variation": 72.5, + "percentChange": 0.14, + "open": 51622.4, + "high": 51941.15, + "low": 51396.25, + "previousClose": 51465.55, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "declines": "52", + "advances": "47", + "unchanged": "1", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.66, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTYMS400-MQ-100.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTYMS400-MQ-100.svg", + "previousDay": 50971.65, + "oneWeekAgo": 49119.6, + "oneMonthAgo": 50624.18 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY SMALLCAP250 MOMENTUM QUALITY 100", + "indexSymbol": "NIFTYSML250MQ 100", + "last": 50668.3, + "variation": 165.35, + "percentChange": 0.33, + "open": 50740, + "high": 51176.7, + "low": 50509.05, + "previousClose": 50502.95, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "27.4", + "pb": "4.48", + "dy": "0.97", + "declines": "51", + "advances": "48", + "unchanged": "1", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": 2.26, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTYSML250MQ-100.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTYSML250MQ-100.svg", + "previousDay": 49619.15, + "oneWeekAgo": 47622.15, + "oneMonthAgo": 49384.72 + }, + { + "key": "STRATEGY INDICES", + "index": "NIFTY TOP 10 EQUAL WEIGHT", + "indexSymbol": "NIFTY TOP 10 EW", + "last": 9398.3, + "variation": -141.55, + "percentChange": -1.48, + "open": 9529.2, + "high": 9564.3, + "low": 9374.9, + "previousClose": 9539.85, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "22.53", + "pb": "3.89", + "dy": "1.12", + "declines": "10", + "advances": "0", + "unchanged": "0", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.51, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-TOP-10-EW.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-TOP-10-EW.svg", + "previousDay": 9531.5, + "oneWeekAgo": 9148.9, + "oneMonthAgo": 9397.71 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY COMMODITIES", + "indexSymbol": "NIFTY COMMODITIES", + "last": 8406.85, + "variation": -36.45, + "percentChange": -0.43, + "open": 8474.75, + "high": 8529.35, + "low": 8387.5, + "previousClose": 8443.3, + "yearHigh": 9896.35, + "yearLow": 6890.65, + "indicativeClose": 0, + "pe": "18.74", + "pb": "2.2", + "dy": "2.23", + "declines": "20", + "advances": "10", + "unchanged": "0", + "perChange365d": 24.25, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-COMMODITIES.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -4.46, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-COMMODITIES.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-COMMODITIES.svg", + "previousDay": 8333.25, + "oneWeekAgo": 8192.55, + "oneMonthAgo": 8837.65, + "oneYearAgo": 6795.65 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY INDIA CONSUMPTION", + "indexSymbol": "NIFTY CONSUMPTION", + "last": 11349.6, + "variation": -118.6, + "percentChange": -1.03, + "open": 11475.7, + "high": 11528, + "low": 11327.85, + "previousClose": 11468.2, + "yearHigh": 13057.6, + "yearLow": 9005.15, + "indicativeClose": 0, + "pe": "46.23", + "pb": "8.9", + "dy": "0.96", + "declines": "25", + "advances": "5", + "unchanged": "0", + "perChange365d": 29.73, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-CONSUMPTION.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -1.09, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-CONSUMPTION.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-CONSUMPTION.svg", + "previousDay": 11390.75, + "oneWeekAgo": 11076.7, + "oneMonthAgo": 11594.4, + "oneYearAgo": 8839.85 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY CPSE", + "indexSymbol": "NIFTY CPSE", + "last": 6525.55, + "variation": -52.8, + "percentChange": -0.8, + "open": 6594.85, + "high": 6617.15, + "low": 6503.95, + "previousClose": 6578.35, + "yearHigh": 7661.9, + "yearLow": 4268.6, + "indicativeClose": 0, + "pe": "13.54", + "pb": "2.35", + "dy": "3.16", + "declines": "6", + "advances": "4", + "unchanged": "1", + "perChange365d": 56.65, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-CPSE.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.86, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-CPSE.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-CPSE.svg", + "previousDay": 6490.4, + "oneWeekAgo": 6238.2, + "oneMonthAgo": 6458.3, + "oneYearAgo": 4199.5 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY ENERGY", + "indexSymbol": "NIFTY ENERGY", + "last": 36979.2, + "variation": -276.8, + "percentChange": -0.74, + "open": 37338.2, + "high": 37628.25, + "low": 36903.5, + "previousClose": 37256, + "yearHigh": 45022.15, + "yearLow": 29421.45, + "indicativeClose": 0, + "pe": "14.95", + "pb": "2.05", + "dy": "2.42", + "declines": "8", + "advances": "2", + "unchanged": "0", + "perChange365d": 27.36, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-ENERGY.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -4.77, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-ENERGY.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-ENERGY.svg", + "previousDay": 36722.2, + "oneWeekAgo": 35789.3, + "oneMonthAgo": 39123.5, + "oneYearAgo": 29252.95 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY INFRASTRUCTURE", + "indexSymbol": "NIFTY INFRA", + "last": 8602.5, + "variation": -98.3, + "percentChange": -1.13, + "open": 8698.6, + "high": 8732.4, + "low": 8584.9, + "previousClose": 8700.8, + "yearHigh": 9704.2, + "yearLow": 6612.55, + "indicativeClose": 0, + "pe": "24.56", + "pb": "3.01", + "dy": "1.2", + "declines": "23", + "advances": "7", + "unchanged": "0", + "perChange365d": 33.71, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-INFRA.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.52, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-INFRA.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-INFRA.svg", + "previousDay": 8663.25, + "oneWeekAgo": 8306.3, + "oneMonthAgo": 8746.35, + "oneYearAgo": 6507.3 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY100 LIQUID 15", + "indexSymbol": "NIFTY100 LIQ 15", + "last": 6287.15, + "variation": -66.45, + "percentChange": -1.05, + "open": 6351.9, + "high": 6389.75, + "low": 6277.3, + "previousClose": 6353.6, + "yearHigh": 7205.25, + "yearLow": 5450.75, + "indicativeClose": 0, + "pe": "18.04", + "pb": "2.87", + "dy": "1.18", + "declines": "12", + "advances": "3", + "unchanged": "0", + "perChange365d": 18.21, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY100-LIQ-15.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -2.65, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY100-LIQ-15.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY100-LIQ-15.svg", + "previousDay": 6324.6, + "oneWeekAgo": 6094.15, + "oneMonthAgo": 6526.4, + "oneYearAgo": 5374.7 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY MIDCAP LIQUID 15", + "indexSymbol": "NIFTY MID LIQ 15", + "last": 14021.8, + "variation": -63.3, + "percentChange": -0.45, + "open": 14090.8, + "high": 14179.35, + "low": 13992.95, + "previousClose": 14085.1, + "yearHigh": 14643.5, + "yearLow": 10240.15, + "indicativeClose": 0, + "pe": "35.62", + "pb": "4.4", + "dy": "0.73", + "declines": "8", + "advances": "7", + "unchanged": "0", + "perChange365d": 40.74, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MID-LIQ-15.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 2.9, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MID-LIQ-15.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MID-LIQ-15.svg", + "previousDay": 14095.55, + "oneWeekAgo": 13679.65, + "oneMonthAgo": 13688.55, + "oneYearAgo": 10008 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY MNC", + "indexSymbol": "NIFTY MNC", + "last": 28650.65, + "variation": -192.95, + "percentChange": -0.67, + "open": 28928.8, + "high": 29001.85, + "low": 28587.95, + "previousClose": 28843.6, + "yearHigh": 32841.15, + "yearLow": 22726.1, + "indicativeClose": 0, + "pe": "38.27", + "pb": "9.14", + "dy": "1.91", + "declines": "24", + "advances": "6", + "unchanged": "0", + "perChange365d": 28.54, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-MNC.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -1.36, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MNC.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MNC.svg", + "previousDay": 28607, + "oneWeekAgo": 27606, + "oneMonthAgo": 29240.9, + "oneYearAgo": 22439.45 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY PSE", + "indexSymbol": "NIFTY PSE", + "last": 10101.35, + "variation": -51.65, + "percentChange": -0.51, + "open": 10175.45, + "high": 10240.7, + "low": 10069.9, + "previousClose": 10153, + "yearHigh": 11814.6, + "yearLow": 6835.8, + "indicativeClose": 0, + "pe": "13.08", + "pb": "2.19", + "dy": "3.13", + "declines": "9", + "advances": "10", + "unchanged": "1", + "perChange365d": 52.63, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-PSE.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 1.08, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-PSE.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-PSE.svg", + "previousDay": 10025.45, + "oneWeekAgo": 9592, + "oneMonthAgo": 10044.65, + "oneYearAgo": 6652 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY SERVICES SECTOR", + "indexSymbol": "NIFTY SERV SECTOR", + "last": 31752, + "variation": -472.9, + "percentChange": -1.47, + "open": 32237.25, + "high": 32351.45, + "low": 31684.65, + "previousClose": 32224.9, + "yearHigh": 33791.15, + "yearLow": 25641.85, + "indicativeClose": 0, + "pe": "21.74", + "pb": "3.68", + "dy": "1.17", + "declines": "24", + "advances": "6", + "unchanged": "0", + "perChange365d": 27.77, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-SERV-SECTOR.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.95, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-SERV-SECTOR.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-SERV-SECTOR.svg", + "previousDay": 32065.25, + "oneWeekAgo": 30967.85, + "oneMonthAgo": 31921.6, + "oneYearAgo": 25221.5 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY100 ESG SECTOR LEADERS", + "indexSymbol": "NIFTY100ESGSECLDR", + "last": 3980.85, + "variation": -53.1, + "percentChange": -1.32, + "open": 4035.55, + "high": 4047.85, + "low": 3975, + "previousClose": 4033.95, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "25.71", + "pb": "3.98", + "dy": "1.04", + "perChange365d": 24.7, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY100ESGSECLDR.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.58, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY100ESGSECLDR.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY100ESGSECLDR.svg", + "previousDay": 4010.4, + "oneWeekAgo": 3875.35, + "oneMonthAgo": 4057.4, + "oneYearAgo": 3235.05 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY INDIA DIGITAL", + "indexSymbol": "NIFTY IND DIGITAL", + "last": 9510.3, + "variation": -98.5, + "percentChange": -1.03, + "open": 9608, + "high": 9611.85, + "low": 9467.4, + "previousClose": 9608.8, + "yearHigh": 9794.65, + "yearLow": 4755.25, + "indicativeClose": 0, + "pe": "332.51", + "pb": "17.76", + "dy": "1.02", + "declines": "23", + "advances": "7", + "unchanged": "0", + "perChange365d": 42.91, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-IND-DIGITAL.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 4.65, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-IND-DIGITAL.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-IND-DIGITAL.svg", + "previousDay": 9538.6, + "oneWeekAgo": 9073.2, + "oneMonthAgo": 9181.85, + "oneYearAgo": 6723.75 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY100 ESG", + "indexSymbol": "NIFTY100 ESG", + "last": 4749.95, + "variation": -57.1, + "percentChange": -1.19, + "open": 4811.65, + "high": 4825.55, + "low": 4740.4, + "previousClose": 4807.05, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "23.74", + "pb": "4.16", + "dy": "1.23", + "declines": "66", + "advances": "27", + "unchanged": "0", + "perChange365d": 25.63, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY100-ESG.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.74, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY100-ESG.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY100-ESG.svg", + "previousDay": 4779.95, + "oneWeekAgo": 4623.2, + "oneMonthAgo": 4842.9, + "oneYearAgo": 3826.35 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY INDIA MANUFACTURING", + "indexSymbol": "NIFTY INDIA MFG", + "last": 13946.1, + "variation": -97.45, + "percentChange": -0.69, + "open": 14065.7, + "high": 14109.45, + "low": 13920.75, + "previousClose": 14043.55, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "29.77", + "pb": "4.44", + "dy": "1.15", + "declines": "53", + "advances": "24", + "unchanged": "0", + "perChange365d": 38.57, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-INDIA-MFG.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": -1.71, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-INDIA-MFG.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-INDIA-MFG.svg", + "previousDay": 13973.1, + "oneWeekAgo": 13634.15, + "oneMonthAgo": 14287.2, + "oneYearAgo": 10134.65 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY INDIA CORPORATE GROUP INDEX - TATA GROUP 25% CAP", + "indexSymbol": "NIFTY TATA 25 CAP", + "last": 16495.5, + "variation": -245.15, + "percentChange": -1.46, + "open": 16714.6, + "high": 16763.7, + "low": 16466.9, + "previousClose": 16740.65, + "yearHigh": 18764.95, + "yearLow": 9887.45, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "declines": "9", + "advances": "1", + "unchanged": "0", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.98, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-TATA-25-CAP.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-TATA-25-CAP.svg", + "previousDay": 16720.5, + "oneWeekAgo": 16108.5, + "oneMonthAgo": 16906.2 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY500 MULTICAP INDIA MANUFACTURING 50:30:20", + "indexSymbol": "NIFTY MULTI MFG", + "last": 14663.55, + "variation": -129.35, + "percentChange": -0.87, + "open": 14802.9, + "high": 14841.55, + "low": 14638.4, + "previousClose": 14792.9, + "yearHigh": 16253.65, + "yearLow": 8394.35, + "indicativeClose": 0, + "pe": "31.23", + "pb": "3.92", + "dy": "0.88", + "declines": "50", + "advances": "25", + "unchanged": "0", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.83, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MULTI-MFG.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MULTI-MFG.svg", + "previousDay": 14745.6, + "oneWeekAgo": 14330.7, + "oneMonthAgo": 14916.55 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY500 MULTICAP INFRASTRUCTURE 50:30:20", + "indexSymbol": "NIFTY MULTI INFRA", + "last": 13652.7, + "variation": -76, + "percentChange": -0.55, + "open": 13742, + "high": 13815, + "low": 13626.7, + "previousClose": 13728.7, + "yearHigh": 15154.1, + "yearLow": 8010.1, + "indicativeClose": 0, + "pe": "30.69", + "pb": "3.88", + "dy": "1.17", + "declines": "42", + "advances": "33", + "unchanged": "0", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": -0.09, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-MULTI-INFRA.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-MULTI-INFRA.svg", + "previousDay": 13636.2, + "oneWeekAgo": 13165, + "oneMonthAgo": 13740.45 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY INDIA DEFENCE", + "indexSymbol": "NIFTY IND DEFENCE", + "last": 6702.1, + "variation": 107.9, + "percentChange": 1.64, + "open": 6642.1, + "high": 6744.8, + "low": 6623.6, + "previousClose": 6594.2, + "yearHigh": 8302.05, + "yearLow": 3374.95, + "indicativeClose": 0, + "pe": "51.73", + "pb": "12.51", + "dy": "0.5", + "declines": "4", + "advances": "12", + "unchanged": "0", + "perChange365d": 83.26, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-IND-DEFENCE.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 8.31, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-IND-DEFENCE.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-IND-DEFENCE.svg", + "previousDay": 6384.9, + "oneWeekAgo": 5992.35, + "oneMonthAgo": 6088.47, + "oneYearAgo": 3598.31 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY INDIA TOURISM", + "indexSymbol": "NIFTY IND TOURISM", + "last": 8593.8, + "variation": 0.2, + "percentChange": 0, + "open": 8610.45, + "high": 8663.1, + "low": 8569.65, + "previousClose": 8593.6, + "yearHigh": 9211.9, + "yearLow": 6058.05, + "indicativeClose": 0, + "pe": "68.43", + "pb": "17.95", + "dy": "0.2", + "declines": "6", + "advances": "8", + "unchanged": "1", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": 7.67, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-IND-TOURISM.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-IND-TOURISM.svg", + "previousDay": 8542.35, + "oneWeekAgo": 8261.9, + "oneMonthAgo": 7981.77 + }, + { + "key": "THEMATIC INDICES", + "index": "NIFTY CAPITAL MARKETS", + "indexSymbol": "NIFTY CAPITAL MKT", + "last": 3737.85, + "variation": 8.1, + "percentChange": 0.22, + "open": 3752.55, + "high": 3783.6, + "low": 3720.45, + "previousClose": 3729.75, + "yearHigh": 3875.55, + "yearLow": 2009.6, + "indicativeClose": 0, + "pe": "43.32", + "pb": "13.63", + "dy": "0.93", + "declines": "9", + "advances": "6", + "unchanged": "0", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "28-Oct-2024", + "perChange30d": 3.94, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-CAPITAL-MKT.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-CAPITAL-MKT.svg", + "previousDay": 3690.9, + "oneWeekAgo": 3665.45, + "oneMonthAgo": 3588.44 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY 8-13 YR G-SEC", + "indexSymbol": "NIFTY GS 8 13YR", + "last": 2741.66, + "variation": 1.71, + "percentChange": 0.06, + "open": 2740.47, + "high": 2743.35, + "low": 2740.46, + "previousClose": 2739.95, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 9.99, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-GS-8-13YR.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.62, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-GS-8-13YR.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-GS-8-13YR.svg", + "previousDay": 2736.48, + "oneWeekAgo": 2729.34, + "oneMonthAgo": 2722.44, + "oneYearAgo": 2490.47 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY 10 YR BENCHMARK G-SEC", + "indexSymbol": "NIFTY GS 10YR", + "last": 2423.3, + "variation": 1.31, + "percentChange": 0.05, + "open": 2422.44, + "high": 2424.98, + "low": 2422.44, + "previousClose": 2421.99, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 9.77, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-GS-10YR.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.55, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-GS-10YR.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-GS-10YR.svg", + "previousDay": 2418.67, + "oneWeekAgo": 2413.04, + "oneMonthAgo": 2408.14, + "oneYearAgo": 2205.8 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY 10 YR BENCHMARK G-SEC (CLEAN PRICE)", + "indexSymbol": "NIFTY GS 10YR CLN", + "last": 886.98, + "variation": 0.31, + "percentChange": 0.03, + "open": 886.66, + "high": 887.6, + "low": 886.66, + "previousClose": 886.67, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 2.49, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-GS-10YR-CLN.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-GS-10YR-CLN.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-GS-10YR-CLN.svg", + "previousDay": 885.6, + "oneWeekAgo": 885.87, + "oneMonthAgo": 886.4, + "oneYearAgo": 864.9 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY 4-8 YR G-SEC INDEX", + "indexSymbol": "NIFTY GS 4 8YR", + "last": 2961.95, + "variation": 1.76, + "percentChange": 0.05, + "open": 2960.75, + "high": 2962.59, + "low": 2960.74, + "previousClose": 2960.19, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 9.19, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-GS-4-8YR.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.55, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-GS-4-8YR.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-GS-4-8YR.svg", + "previousDay": 2958.65, + "oneWeekAgo": 2950.25, + "oneMonthAgo": 2943.73, + "oneYearAgo": 2710.72 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY 11-15 YR G-SEC INDEX", + "indexSymbol": "NIFTY GS 11 15YR", + "last": 3036.57, + "variation": 1.19, + "percentChange": 0.03, + "open": 3035.95, + "high": 3038.54, + "low": 3035.94, + "previousClose": 3035.38, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 11.42, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-GS-11-15YR.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.48, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-GS-11-15YR.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-GS-11-15YR.svg", + "previousDay": 3031.03, + "oneWeekAgo": 3022.51, + "oneMonthAgo": 3020.34, + "oneYearAgo": 2723.62 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY 15 YR AND ABOVE G-SEC INDEX", + "indexSymbol": "NIFTY GS 15YRPLUS", + "last": 3350.86, + "variation": -2.86, + "percentChange": -0.08, + "open": 3354.36, + "high": 3355.83, + "low": 3350.82, + "previousClose": 3353.72, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 13.2, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-GS-15YRPLUS.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.1, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-GS-15YRPLUS.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-GS-15YRPLUS.svg", + "previousDay": 3347.55, + "oneWeekAgo": 3338.22, + "oneMonthAgo": 3348.25, + "oneYearAgo": 2960.72 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY COMPOSITE G-SEC INDEX", + "indexSymbol": "NIFTY GS COMPSITE", + "last": 2837.16, + "variation": 1.41, + "percentChange": 0.05, + "open": 2836.29, + "high": 2838.89, + "low": 2836.27, + "previousClose": 2835.75, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": 10.38, + "date365dAgo": "28-Nov-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-GS-COMPSITE.svg", + "date30dAgo": "28-Oct-2024", + "perChange30d": 0.53, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-GS-COMPSITE.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-GS-COMPSITE.svg", + "previousDay": 2832.36, + "oneWeekAgo": 2824.87, + "oneMonthAgo": 2820.41, + "oneYearAgo": 2568.74 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY BHARAT BOND INDEX - APRIL 2025", + "indexSymbol": "BHARATBOND-APR25", + "last": 1281.18, + "variation": 0.23, + "percentChange": 0.01, + "open": 1281.22, + "high": 1281.25, + "low": 1281.18, + "previousClose": 1280.95, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "-", + "perChange30d": "-", + "chart30dPath": "-", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BHARATBOND-APR25.svg", + "previousDay": 1280.69, + "oneWeekAgo": 1277.4 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY BHARAT BOND INDEX - APRIL 2030", + "indexSymbol": "BHARATBOND-APR30", + "last": 1441.02, + "variation": -0.4, + "percentChange": -0.01, + "open": 1441.47, + "high": 1441.47, + "low": 1441.02, + "previousClose": 1441.42, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "-", + "perChange30d": "-", + "chart30dPath": "-", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BHARATBOND-APR30.svg", + "previousDay": 1440.6, + "oneWeekAgo": 1438.4 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY BHARAT BOND INDEX - APRIL 2031", + "indexSymbol": "BHARATBOND-APR31", + "last": 1313.77, + "variation": -0.4, + "percentChange": 0.01, + "open": 1313.77, + "high": 1313.78, + "low": 1313.77, + "previousClose": 1314.17, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "-", + "perChange30d": "-", + "chart30dPath": "-", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BHARATBOND-APR31.svg", + "previousDay": 1314.02, + "oneWeekAgo": 1312.12 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY BHARAT BOND INDEX - APRIL 2032", + "indexSymbol": "BHARATBOND-APR32", + "last": 1199.34, + "variation": -1.52, + "percentChange": 0.01, + "open": 1199.34, + "high": 1199.34, + "low": 1199.34, + "previousClose": 1200.86, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "-", + "perChange30d": "-", + "chart30dPath": "-", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BHARATBOND-APR32.svg", + "previousDay": 1200.99, + "oneWeekAgo": 1200.19 + }, + { + "key": "FIXED INCOME INDICES", + "index": "NIFTY BHARAT BOND INDEX - APRIL 2033", + "indexSymbol": "BHARATBOND-APR33", + "last": 1168.59, + "variation": -0.81, + "percentChange": 0.01, + "open": 1168.6, + "high": 1168.6, + "low": 1168.59, + "previousClose": 1169.4, + "yearHigh": 0, + "yearLow": 0, + "indicativeClose": 0, + "pe": "", + "pb": "", + "dy": "", + "perChange365d": "-", + "date365dAgo": "-", + "chart365dPath": "-", + "date30dAgo": "-", + "perChange30d": "-", + "chart30dPath": "-", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BHARATBOND-APR33.svg", + "previousDay": 1170.47, + "oneWeekAgo": 1168.07 + } + ], + "timestamp": "28-Nov-2024 15:30", + "advances": 2382, + "declines": 3056, + "unchanged": 40, + "dates": { + "previousDay": "26-Nov-2024", + "oneWeekAgo": "21-Nov-2024", + "oneMonthAgo": "28-Oct-2024", + "oneYearAgo": "28-Nov-2023" + }, + "date30dAgo": "28-Oct-2024", + "date365dAgo": "28-Nov-2023" +} \ No newline at end of file diff --git a/nse/controllers/indices/examples/20241216_formatted_nse_index_constituent.json b/nse/controllers/indices/examples/20241216_formatted_nse_index_constituent.json new file mode 100644 index 0000000..6766df9 --- /dev/null +++ b/nse/controllers/indices/examples/20241216_formatted_nse_index_constituent.json @@ -0,0 +1,1252 @@ +[ + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:43+00:00", + "indexName": "NIFTY 50", + "symbol": "ADANIENT", + "name": "Adani Enterprises Limited", + "industry": "Trading - Minerals", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE423A01024", + "open": 2425, + "high": 2610, + "low": 2421.95, + "close": 2585, + "totTradedVol": 7825097, + "totTradedVal": 19946641758.82, + "prevClose": 2409.95, + "chg": 175.05, + "pChg": 7.26, + "yearHigh": 3743.9, + "yearLow": 2025, + "pChg30d": -2.16, + "pChg365d": -15.41, + "ffmc": 615051362905.91 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:36+00:00", + "indexName": "NIFTY 50", + "symbol": "TECHM", + "name": "Tech Mahindra Limited", + "industry": "Computers - Software & Consulting", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE669C01036", + "open": 1715, + "high": 1773.6, + "low": 1693.8, + "close": 1729.35, + "totTradedVol": 6781500, + "totTradedVal": 11768004765, + "prevClose": 1711.65, + "chg": 17.7, + "pChg": 1.03, + "yearHigh": 1807.7, + "yearLow": 1162.95, + "pChg30d": -0.04, + "pChg365d": 34.49, + "ffmc": 1096284643122.03 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:27:26+00:00", + "indexName": "NIFTY 50", + "symbol": "HCLTECH", + "name": "HCL Technologies Limited", + "industry": "Computers - Software & Consulting", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE860A01027", + "open": 1888, + "high": 1968.95, + "low": 1865.65, + "close": 1910.65, + "totTradedVol": 6262203, + "totTradedVal": 12031758489.99, + "prevClose": 1892, + "chg": 18.65, + "pChg": 0.99, + "yearHigh": 1980, + "yearLow": 1235, + "pChg30d": 2.38, + "pChg365d": 29.05, + "ffmc": 2015159695791.67 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:20+00:00", + "indexName": "NIFTY 50", + "symbol": "INDUSINDBK", + "name": "IndusInd Bank Limited", + "industry": "Private Sector Bank", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE095A01012", + "open": 953.3, + "high": 973.5, + "low": 948.85, + "close": 961, + "totTradedVol": 8165774, + "totTradedVal": 7853024855.8, + "prevClose": 953.4, + "chg": 7.6, + "pChg": 0.8, + "yearHigh": 1694.5, + "yearLow": 926.45, + "pChg30d": -4.26, + "pChg365d": -40.37, + "ffmc": 633922458585.17 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:27:42+00:00", + "indexName": "NIFTY 50", + "symbol": "SHRIRAMFIN", + "name": "Shriram Finance Limited", + "industry": "Non Banking Financial Company (NBFC)", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE721A01013", + "open": 2912.8, + "high": 2968.85, + "low": 2895.3, + "close": 2921.85, + "totTradedVol": 690544, + "totTradedVal": 2021567560, + "prevClose": 2898.9, + "chg": 22.95, + "pChg": 0.79, + "yearHigh": 3652.25, + "yearLow": 2016, + "pChg30d": -4, + "pChg365d": 41.18, + "ffmc": 815615556448.35 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:26:20+00:00", + "indexName": "NIFTY 50", + "symbol": "APOLLOHOSP", + "name": "Apollo Hospitals Enterprise Limited", + "industry": "Hospital", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE437A01024", + "open": 7240, + "high": 7378.4, + "low": 7220.05, + "close": 7303, + "totTradedVol": 428884, + "totTradedVal": 3133645234.84, + "prevClose": 7246.3, + "chg": 56.7, + "pChg": 0.78, + "yearHigh": 7545, + "yearLow": 5640, + "pChg30d": 6.11, + "pChg365d": 27.04, + "ffmc": 738379683723.58 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:29+00:00", + "indexName": "NIFTY 50", + "symbol": "CIPLA", + "name": "Cipla Limited", + "industry": "Pharmaceuticals", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE059A01026", + "open": 1509, + "high": 1526.7, + "low": 1495.1, + "close": 1517.95, + "totTradedVol": 1501086, + "totTradedVal": 2278033102.74, + "prevClose": 1506.6, + "chg": 11.35, + "pChg": 0.75, + "yearHigh": 1702.05, + "yearLow": 1239.75, + "pChg30d": -1.78, + "pChg365d": 20.89, + "ffmc": 833029487672.21 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:55+00:00", + "indexName": "NIFTY 50", + "symbol": "SUNPHARMA", + "name": "Sun Pharmaceutical Industries Limited", + "industry": "Pharmaceuticals", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE044A01036", + "open": 1862.05, + "high": 1895.75, + "low": 1855, + "close": 1871.35, + "totTradedVol": 6021550, + "totTradedVal": 11333339901.5, + "prevClose": 1861.25, + "chg": 10.1, + "pChg": 0.54, + "yearHigh": 1960.35, + "yearLow": 1249.55, + "pChg30d": 4.51, + "pChg365d": 47.78, + "ffmc": 2017332526424.52 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:10+00:00", + "indexName": "NIFTY 50", + "symbol": "POWERGRID", + "name": "Power Grid Corporation of India Limited", + "industry": "Power - Transmission", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE752E01010", + "open": 309, + "high": 312, + "low": 306.3, + "close": 310.4, + "totTradedVol": 12489142, + "totTradedVal": 3843283667.6600003, + "prevClose": 309.4, + "chg": 1, + "pChg": 0.32, + "yearHigh": 366.25, + "yearLow": 226.05, + "pChg30d": -6.07, + "pChg365d": 30.44, + "ffmc": 1404223527704.8 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:54+00:00", + "indexName": "NIFTY 50", + "symbol": "BRITANNIA", + "name": "Britannia Industries Limited", + "industry": "Packaged Foods", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE216A01030", + "open": 4759.7, + "high": 4818, + "low": 4738, + "close": 4781, + "totTradedVol": 271403, + "totTradedVal": 1297822005.6999998, + "prevClose": 4769.3, + "chg": 11.7, + "pChg": 0.25, + "yearHigh": 6469.9, + "yearLow": 4641, + "pChg30d": -3.48, + "pChg365d": -10.66, + "ffmc": 562712432565.4 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:51+00:00", + "indexName": "NIFTY 50", + "symbol": "ASIANPAINT", + "name": "Asian Paints Limited", + "industry": "Paints", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE021A01026", + "open": 2280.25, + "high": 2298.8, + "low": 2256.8, + "close": 2272.5, + "totTradedVol": 1076978, + "totTradedVal": 2452838934.56, + "prevClose": 2271.4, + "chg": 1.1, + "pChg": 0.05, + "yearHigh": 3422.95, + "yearLow": 2256.5, + "pChg30d": -8.4, + "pChg365d": -33.24, + "ffmc": 1026583405898.96 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:52+00:00", + "indexName": "NIFTY 50", + "symbol": "COALINDIA", + "name": "Coal India Limited", + "industry": "Coal", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE522F01014", + "open": 380.5, + "high": 382.3, + "low": 375.7, + "close": 380.5, + "totTradedVol": 22328728, + "totTradedVal": 8449413962.4800005, + "prevClose": 380.5, + "chg": 0, + "pChg": 0, + "yearHigh": 543.55, + "yearLow": 365.8, + "pChg30d": -8.62, + "pChg365d": 1.2, + "ffmc": 861874658102.06 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:59+00:00", + "indexName": "NIFTY 50", + "symbol": "HINDUNILVR", + "name": "Hindustan Unilever Limited", + "industry": "Diversified FMCG", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE030A01027", + "open": 2341.5, + "high": 2359.15, + "low": 2325, + "close": 2338, + "totTradedVol": 924180, + "totTradedVal": 2162849212.2, + "prevClose": 2341.25, + "chg": -3.25, + "pChg": -0.14, + "yearHigh": 3035, + "yearLow": 2172.05, + "pChg30d": -6.21, + "pChg365d": -12.11, + "ffmc": 2078868283526.99 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:59+00:00", + "indexName": "NIFTY 50", + "symbol": "BPCL", + "name": "Bharat Petroleum Corporation Limited", + "industry": "Refineries & Marketing", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE029A01011", + "open": 293.55, + "high": 295.25, + "low": 289.75, + "close": 293, + "totTradedVol": 8236910, + "totTradedVal": 2411355402.5, + "prevClose": 293.55, + "chg": -0.55, + "pChg": -0.19, + "yearHigh": 376, + "yearLow": 222.55, + "pChg30d": 0.5, + "pChg365d": -34.86, + "ffmc": 566356120480.65 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:10+00:00", + "indexName": "NIFTY 50", + "symbol": "SBILIFE", + "name": "SBI Life Insurance Company Limited", + "industry": "Life Insurance", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE123W01016", + "open": 1391.25, + "high": 1414.95, + "low": 1389, + "close": 1401.95, + "totTradedVol": 1439560, + "totTradedVal": 2016938724.8, + "prevClose": 1405.3, + "chg": -3.35, + "pChg": -0.24, + "yearHigh": 1936, + "yearLow": 1307.7, + "pChg30d": -2.26, + "pChg365d": -1.91, + "ffmc": 626299127304.61 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:27:15+00:00", + "indexName": "NIFTY 50", + "symbol": "BAJFINANCE", + "name": "Bajaj Finance Limited", + "industry": "Non Banking Financial Company (NBFC)", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE296A01024", + "open": 6900, + "high": 6995, + "low": 6865, + "close": 6889.15, + "totTradedVol": 490876, + "totTradedVal": 3393087083.5600004, + "prevClose": 6907.75, + "chg": -18.6, + "pChg": -0.27, + "yearHigh": 7830, + "yearLow": 6187.8, + "pChg30d": 5.05, + "pChg365d": -5.73, + "ffmc": 1924569421868.89 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:49+00:00", + "indexName": "NIFTY 50", + "symbol": "ADANIPORTS", + "name": "Adani Ports and Special Economic Zone Limited", + "industry": "Port & Port services", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE742F01042", + "open": 1233.75, + "high": 1258.8, + "low": 1212, + "close": 1226.9, + "totTradedVol": 8312636, + "totTradedVal": 10205672596.28, + "prevClose": 1230.7, + "chg": -3.8, + "pChg": -0.31, + "yearHigh": 1621.4, + "yearLow": 995.65, + "pChg30d": 3.42, + "pChg365d": 20.14, + "ffmc": 903128731145.17 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:57+00:00", + "indexName": "NIFTY 50", + "symbol": "NESTLEIND", + "name": "Nestle India Limited", + "industry": "Packaged Foods", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE239A01024", + "open": 2174, + "high": 2177, + "low": 2149, + "close": 2158, + "totTradedVol": 1235490, + "totTradedVal": 2672772581.7, + "prevClose": 2165.6, + "chg": -7.6, + "pChg": -0.35, + "yearHigh": 2778, + "yearLow": 2145.4, + "pChg30d": -3.09, + "pChg365d": -91.85, + "ffmc": 771994399915.17 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:28:38+00:00", + "indexName": "NIFTY 50", + "symbol": "TCS", + "name": "Tata Consultancy Services Limited", + "industry": "Computers - Software & Consulting", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE467B01029", + "open": 4151, + "high": 4199.3, + "low": 4112, + "close": 4150, + "totTradedVol": 1527169, + "totTradedVal": 6340927861.5199995, + "prevClose": 4164.85, + "chg": -14.85, + "pChg": -0.36, + "yearHigh": 4592.25, + "yearLow": 3591.5, + "pChg30d": -2.48, + "pChg365d": 9.79, + "ffmc": 4235749328635.37 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:47+00:00", + "indexName": "NIFTY 50", + "symbol": "ITC", + "name": "ITC Limited", + "industry": "Diversified FMCG", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE154A01025", + "open": 480.75, + "high": 481.45, + "low": 476, + "close": 476.8, + "totTradedVol": 13074810, + "totTradedVal": 6255642844.5, + "prevClose": 478.6, + "chg": -1.8, + "pChg": -0.38, + "yearHigh": 528.5, + "yearLow": 399.35, + "pChg30d": 0.39, + "pChg365d": 3.57, + "ffmc": 4430519564850.09 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:50+00:00", + "indexName": "NIFTY 50", + "symbol": "BAJAJFINSV", + "name": "Bajaj Finserv Limited", + "industry": "Holding Company", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE918I01026", + "open": 1580, + "high": 1587.85, + "low": 1560.45, + "close": 1572.95, + "totTradedVol": 1307371, + "totTradedVal": 2056586098.97, + "prevClose": 1579.3, + "chg": -6.35, + "pChg": -0.4, + "yearHigh": 2029.9, + "yearLow": 1419.05, + "pChg30d": -0.04, + "pChg365d": -6.32, + "ffmc": 857815060639.19 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:28:44+00:00", + "indexName": "NIFTY 50", + "symbol": "ULTRACEMCO", + "name": "UltraTech Cement Limited", + "industry": "Cement & Cement Products", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE481G01011", + "open": 11419.45, + "high": 11507.65, + "low": 11239.7, + "close": 11350, + "totTradedVol": 164726, + "totTradedVal": 1871667877.06, + "prevClose": 11406.55, + "chg": -56.55, + "pChg": -0.5, + "yearHigh": 12145.35, + "yearLow": 9250, + "pChg30d": 1.82, + "pChg365d": 8.6, + "ffmc": 1293653509621.78 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:06+00:00", + "indexName": "NIFTY 50", + "symbol": "LT", + "name": "Larsen & Toubro Limited", + "industry": "Civil Construction", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE018A01030", + "open": 3607.9, + "high": 3623, + "low": 3566, + "close": 3590, + "totTradedVol": 1591690, + "totTradedVal": 5714851526.7, + "prevClose": 3608.1, + "chg": -18.1, + "pChg": -0.5, + "yearHigh": 3963.5, + "yearLow": 3175.05, + "pChg30d": -3.13, + "pChg365d": 2.33, + "ffmc": 4220692322122.58 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:23:39+00:00", + "indexName": "NIFTY 50", + "symbol": "EICHERMOT", + "name": "Eicher Motors Limited", + "industry": "2/3 Wheelers", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE066A01021", + "open": 4890, + "high": 4904.95, + "low": 4832.3, + "close": 4850, + "totTradedVol": 242799, + "totTradedVal": 1182637509.15, + "prevClose": 4876.9, + "chg": -26.9, + "pChg": -0.55, + "yearHigh": 5105, + "yearLow": 3562.45, + "pChg30d": 0.93, + "pChg365d": 17.7, + "ffmc": 666322791516.98 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:41+00:00", + "indexName": "NIFTY 50", + "symbol": "BHARTIARTL", + "name": "Bharti Airtel Limited", + "industry": "Telecom - Cellular & Fixed line services", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE397D01024", + "open": 1605, + "high": 1613.05, + "low": 1581.1, + "close": 1590.65, + "totTradedVol": 4438130, + "totTradedVal": 7089380099.400001, + "prevClose": 1599.85, + "chg": -9.2, + "pChg": -0.58, + "yearHigh": 1779, + "yearLow": 1007, + "pChg30d": -1.68, + "pChg365d": 54.99, + "ffmc": 4259567924870.06 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:28:53+00:00", + "indexName": "NIFTY 50", + "symbol": "TATACONSUM", + "name": "TATA CONSUMER PRODUCTS LIMITED", + "industry": "Tea & Coffee", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE192A01025", + "open": 907.95, + "high": 912, + "low": 898.7, + "close": 902.05, + "totTradedVol": 1830048, + "totTradedVal": 1655388218.8799999, + "prevClose": 907.95, + "chg": -5.9, + "pChg": -0.65, + "yearHigh": 1256.44, + "yearLow": 882.9, + "pChg30d": -5.29, + "pChg365d": -16.46, + "ffmc": 585986286612.29 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:06+00:00", + "indexName": "NIFTY 50", + "symbol": "AXISBANK", + "name": "Axis Bank Limited", + "industry": "Private Sector Bank", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE238A01034", + "open": 1074.1, + "high": 1096.5, + "low": 1063.95, + "close": 1070, + "totTradedVol": 9452155, + "totTradedVal": 10162484448.25, + "prevClose": 1077.45, + "chg": -7.45, + "pChg": -0.69, + "yearHigh": 1339.65, + "yearLow": 995.7, + "pChg30d": -5.18, + "pChg365d": -2.25, + "ffmc": 3047275962316.77 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:46+00:00", + "indexName": "NIFTY 50", + "symbol": "HDFCLIFE", + "name": "HDFC Life Insurance Company Limited", + "industry": "Life Insurance", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE795G01014", + "open": 620.35, + "high": 623.9, + "low": 614.35, + "close": 617.3, + "totTradedVol": 1564417, + "totTradedVal": 967279031.0999999, + "prevClose": 621.9, + "chg": -4.6, + "pChg": -0.74, + "yearHigh": 761.2, + "yearLow": 511.4, + "pChg30d": -5.45, + "pChg365d": -3.83, + "ffmc": 658039892243.26 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:36+00:00", + "indexName": "NIFTY 50", + "symbol": "DRREDDY", + "name": "Dr. Reddy's Laboratories Limited", + "industry": "Pharmaceuticals", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE089A01031", + "open": 1389.6, + "high": 1392, + "low": 1372.1, + "close": 1379, + "totTradedVol": 2462657, + "totTradedVal": 3399106950.82, + "prevClose": 1389.45, + "chg": -10.45, + "pChg": -0.75, + "yearHigh": 1421.49, + "yearLow": 1104.13, + "pChg30d": 15.57, + "pChg365d": -76.04, + "ffmc": 839775543074 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:56+00:00", + "indexName": "NIFTY 50", + "symbol": "RELIANCE", + "name": "Reliance Industries Limited", + "industry": "Refineries & Marketing", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE002A01018", + "open": 1216.4, + "high": 1223.2, + "low": 1208.1, + "close": 1211.5, + "totTradedVol": 8818766, + "totTradedVal": 10712155060.2, + "prevClose": 1221.05, + "chg": -9.55, + "pChg": -0.78, + "yearHigh": 1608.8, + "yearLow": 1201.5, + "pChg30d": -5.51, + "pChg365d": -52.76, + "ffmc": 8205333751027.87 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:50+00:00", + "indexName": "NIFTY 50", + "symbol": "HDFCBANK", + "name": "HDFC Bank Limited", + "industry": "Private Sector Bank", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE040A01034", + "open": 1792.2, + "high": 1815, + "low": 1771, + "close": 1784, + "totTradedVol": 11111109, + "totTradedVal": 19835551786.8, + "prevClose": 1798.25, + "chg": -14.25, + "pChg": -0.79, + "yearHigh": 1880, + "yearLow": 1363.55, + "pChg30d": 0.12, + "pChg365d": 5.21, + "ffmc": 13547468011749.11 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:54+00:00", + "indexName": "NIFTY 50", + "symbol": "SBIN", + "name": "State Bank of India", + "industry": "Public Sector Bank", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE062A01020", + "open": 802, + "high": 807.95, + "low": 785, + "close": 793.3, + "totTradedVol": 21515438, + "totTradedVal": 17069487891.68, + "prevClose": 799.65, + "chg": -6.35, + "pChg": -0.79, + "yearHigh": 912, + "yearLow": 600.65, + "pChg30d": -4.68, + "pChg365d": 24.55, + "ffmc": 3047854932508.09 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:42+00:00", + "indexName": "NIFTY 50", + "symbol": "NTPC", + "name": "NTPC Limited", + "industry": "Power Generation", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE733E01010", + "open": 335, + "high": 336.8, + "low": 327.4, + "close": 332, + "totTradedVol": 36657549, + "totTradedVal": 12159675578.789999, + "prevClose": 335, + "chg": -3, + "pChg": -0.9, + "yearHigh": 448.45, + "yearLow": 296.55, + "pChg30d": -7.88, + "pChg365d": 7.67, + "ffmc": 1569991325142.38 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:37+00:00", + "indexName": "NIFTY 50", + "symbol": "BAJAJ-AUTO", + "name": "Bajaj Auto Limited", + "industry": "2/3 Wheelers", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE917I01010", + "open": 8928, + "high": 8962.45, + "low": 8737.55, + "close": 8845, + "totTradedVol": 1065253, + "totTradedVal": 9371893495.93, + "prevClose": 8928.3, + "chg": -83.3, + "pChg": -0.93, + "yearHigh": 12774, + "yearLow": 6560.95, + "pChg30d": -1.17, + "pChg365d": 31.35, + "ffmc": 979830195976.84 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:28:48+00:00", + "indexName": "NIFTY 50", + "symbol": "INFY", + "name": "Infosys Limited", + "industry": "Computers - Software & Consulting", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE009A01021", + "open": 1915.7, + "high": 1916, + "low": 1886.5, + "close": 1898.45, + "totTradedVol": 7789055, + "totTradedVal": 14824674709.85, + "prevClose": 1916.75, + "chg": -18.3, + "pChg": -0.95, + "yearHigh": 2006.45, + "yearLow": 1358.35, + "pChg30d": 3.17, + "pChg365d": 24.23, + "ffmc": 6823282981805.28 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:57+00:00", + "indexName": "NIFTY 50", + "symbol": "TATASTEEL", + "name": "Tata Steel Limited", + "industry": "Iron & Steel", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE081A01020", + "open": 138.91, + "high": 139.25, + "low": 136.09, + "close": 137.5, + "totTradedVol": 32555723, + "totTradedVal": 4484876400.48, + "prevClose": 138.91, + "chg": -1.41, + "pChg": -1.02, + "yearHigh": 184.6, + "yearLow": 128.2, + "pChg30d": -3.9, + "pChg365d": -0.49, + "ffmc": 1137887077472.45 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:59+00:00", + "indexName": "NIFTY 50", + "symbol": "ONGC", + "name": "Oil & Natural Gas Corporation Limited", + "industry": "Oil Exploration & Production", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE213A01029", + "open": 236.05, + "high": 237, + "low": 231.15, + "close": 234.4, + "totTradedVol": 19401112, + "totTradedVal": 4527443496.320001, + "prevClose": 236.9, + "chg": -2.5, + "pChg": -1.06, + "yearHigh": 345, + "yearLow": 203.65, + "pChg30d": -7.71, + "pChg365d": 15.53, + "ffmc": 908073588373.49 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:29+00:00", + "indexName": "NIFTY 50", + "symbol": "KOTAKBANK", + "name": "Kotak Mahindra Bank Limited", + "industry": "Private Sector Bank", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE237A01028", + "open": 1765, + "high": 1781, + "low": 1733.5, + "close": 1741.2, + "totTradedVol": 5502772, + "totTradedVal": 9632382275.12, + "prevClose": 1759.9, + "chg": -18.7, + "pChg": -1.06, + "yearHigh": 1942, + "yearLow": 1543.85, + "pChg30d": -0.3, + "pChg365d": -7.77, + "ffmc": 2553218407521.43 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:42+00:00", + "indexName": "NIFTY 50", + "symbol": "ICICIBANK", + "name": "ICICI Bank Limited", + "industry": "Private Sector Bank", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE090A01021", + "open": 1304.95, + "high": 1326.5, + "low": 1289.45, + "close": 1293.45, + "totTradedVol": 14207425, + "totTradedVal": 18522077898.25, + "prevClose": 1307.55, + "chg": -14.1, + "pChg": -1.08, + "yearHigh": 1362.35, + "yearLow": 970.15, + "pChg30d": 0.57, + "pChg365d": 31.2, + "ffmc": 9116975183140.55 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:29+00:00", + "indexName": "NIFTY 50", + "symbol": "M&M", + "name": "Mahindra & Mahindra Limited", + "industry": "Passenger Cars & Utility Vehicles", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE101A01026", + "open": 3028.05, + "high": 3044.6, + "low": 2991.05, + "close": 3015, + "totTradedVol": 2336275, + "totTradedVal": 7057886775, + "prevClose": 3049.45, + "chg": -34.45, + "pChg": -1.13, + "yearHigh": 3222.1, + "yearLow": 1575, + "pChg30d": 2.81, + "pChg365d": 76.33, + "ffmc": 2682674539905.84 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:59+00:00", + "indexName": "NIFTY 50", + "symbol": "JSWSTEEL", + "name": "JSW Steel Limited", + "industry": "Iron & Steel", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE019A01038", + "open": 913.3, + "high": 916.7, + "low": 895.6, + "close": 901.9, + "totTradedVol": 1959379, + "totTradedVal": 1772904900.5700002, + "prevClose": 913.3, + "chg": -11.4, + "pChg": -1.25, + "yearHigh": 1063, + "yearLow": 761.75, + "pChg30d": -5.46, + "pChg365d": 3.75, + "ffmc": 863801177982.64 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:54+00:00", + "indexName": "NIFTY 50", + "symbol": "MARUTI", + "name": "Maruti Suzuki India Limited", + "industry": "Passenger Cars & Utility Vehicles", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE585B01010", + "open": 10941.05, + "high": 10950, + "low": 10750.1, + "close": 10804.25, + "totTradedVol": 335481, + "totTradedVal": 3637123971.1200004, + "prevClose": 10941.05, + "chg": -136.8, + "pChg": -1.25, + "yearHigh": 13680, + "yearLow": 9737.65, + "pChg30d": -1.2, + "pChg365d": 6.2, + "ffmc": 1419914500658.36 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:59+00:00", + "indexName": "NIFTY 50", + "symbol": "HEROMOTOCO", + "name": "Hero MotoCorp Limited", + "industry": "2/3 Wheelers", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE158A01026", + "open": 4252.75, + "high": 4274, + "low": 4168.25, + "close": 4178.2, + "totTradedVol": 1819173, + "totTradedVal": 7635978667.5, + "prevClose": 4237.95, + "chg": -59.75, + "pChg": -1.41, + "yearHigh": 6246.25, + "yearLow": 3929.85, + "pChg30d": -11, + "pChg365d": 2.38, + "ffmc": 540874242406.93 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:12+00:00", + "indexName": "NIFTY 50", + "symbol": "GRASIM", + "name": "Grasim Industries Limited", + "industry": "Cement & Cement Products", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE047A01021", + "open": 2489, + "high": 2490, + "low": 2436, + "close": 2445, + "totTradedVol": 763318, + "totTradedVal": 1878540864.36, + "prevClose": 2480.3, + "chg": -35.3, + "pChg": -1.42, + "yearHigh": 2877.75, + "yearLow": 2016.55, + "pChg30d": -4.83, + "pChg365d": 16.18, + "ffmc": 908472563197.89 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:49+00:00", + "indexName": "NIFTY 50", + "symbol": "TITAN", + "name": "Titan Company Limited", + "industry": "Gems Jewellery And Watches", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE280A01028", + "open": 3309.95, + "high": 3317.95, + "low": 3247.45, + "close": 3257, + "totTradedVol": 941859, + "totTradedVal": 3082855204.44, + "prevClose": 3309.2, + "chg": -52.2, + "pChg": -1.58, + "yearHigh": 3886.95, + "yearLow": 3055.65, + "pChg30d": 1.85, + "pChg365d": -9.96, + "ffmc": 1345747884294.33 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:13+00:00", + "indexName": "NIFTY 50", + "symbol": "WIPRO", + "name": "Wipro Limited", + "industry": "Computers - Software & Consulting", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE075A01022", + "open": 309.1, + "high": 309.4, + "low": 302.65, + "close": 304, + "totTradedVol": 13709891, + "totTradedVal": 4173565018.2200003, + "prevClose": 309.1, + "chg": -5.1, + "pChg": -1.65, + "yearHigh": 320, + "yearLow": 208.5, + "pChg30d": -46.51, + "pChg365d": -34.42, + "ffmc": 858974239350.78 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:52+00:00", + "indexName": "NIFTY 50", + "symbol": "BEL", + "name": "Bharat Electronics Limited", + "industry": "Aerospace & Defense", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE263A01024", + "open": 292.05, + "high": 292.5, + "low": 282.85, + "close": 286.2, + "totTradedVol": 25876258, + "totTradedVal": 7417170593.12, + "prevClose": 292.05, + "chg": -5.85, + "pChg": -2, + "yearHigh": 340.5, + "yearLow": 171.75, + "pChg30d": -5.18, + "pChg365d": 58.55, + "ffmc": 1022240550942.42 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:27:05+00:00", + "indexName": "NIFTY 50", + "symbol": "TRENT", + "name": "Trent Limited", + "industry": "Speciality Retail", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE849A01020", + "open": 7139.3, + "high": 7145.05, + "low": 6915.25, + "close": 6975, + "totTradedVol": 960856, + "totTradedVal": 6721773842.16, + "prevClose": 7118.3, + "chg": -143.3, + "pChg": -2.01, + "yearHigh": 8345, + "yearLow": 2940.75, + "pChg30d": 4.75, + "pChg365d": 133.01, + "ffmc": 1547414548684.52 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:55+00:00", + "indexName": "NIFTY 50", + "symbol": "TATAMOTORS", + "name": "Tata Motors Limited", + "industry": "Passenger Cars & Utility Vehicles", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE155A01022", + "open": 753.9, + "high": 754.9, + "low": 730.7, + "close": 735.25, + "totTradedVol": 17441198, + "totTradedVal": 12874743539.64, + "prevClose": 750.5, + "chg": -15.25, + "pChg": -2.03, + "yearHigh": 1179, + "yearLow": 717.7, + "pChg30d": -4.57, + "pChg365d": -3.78, + "ffmc": 1558497472216.62 + }, + { + "scrapeTs": "2024-12-30T11:24:12.863061+00:00", + "ts": "2024-12-30 10:29:38+00:00", + "indexName": "NIFTY 50", + "symbol": "HINDALCO", + "name": "Hindalco Industries Limited", + "industry": "Aluminium", + "isFNOSec": true, + "isSuspended": false, + "isin": "INE038A01020", + "open": 615.4, + "high": 620.3, + "low": 599.15, + "close": 603.1, + "totTradedVol": 8023050, + "totTradedVal": 4877051634, + "prevClose": 617.4, + "chg": -14.3, + "pChg": -2.32, + "yearHigh": 772.65, + "yearLow": 496.35, + "pChg30d": -5.91, + "pChg365d": 0.41, + "ffmc": 876345254050.95 + } +] \ No newline at end of file diff --git a/nse/controllers/indices/examples/20241216_raw_nse_index_constituent.json b/nse/controllers/indices/examples/20241216_raw_nse_index_constituent.json new file mode 100644 index 0000000..56fd936 --- /dev/null +++ b/nse/controllers/indices/examples/20241216_raw_nse_index_constituent.json @@ -0,0 +1,2963 @@ +{ + "name": "NIFTY 50", + "advance": { + "declines": "40", + "advances": "9", + "unchanged": "1" + }, + "timestamp": "16-Dec-2024 16:00:00", + "data": [ + { + "priority": 1, + "symbol": "NIFTY 50", + "identifier": "NIFTY 50", + "open": 24753.4, + "dayHigh": 24781.25, + "dayLow": 24601.75, + "lastPrice": 24668.25, + "previousClose": 24768.3, + "change": -100.04999999999927, + "pChange": -0.4, + "ffmc": 1105225400.94, + "yearHigh": 26277.35, + "yearLow": 21137.2, + "totalTradedVolume": 187551629, + "stockIndClosePrice": 0, + "totalTradedValue": 186081425661.93, + "lastUpdateTime": "16-Dec-2024 16:00:00", + "nearWKH": 6.123524632430586, + "nearWKL": -16.70538198058399, + "perChange365d": 14.97, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NIFTY-50.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 4.83, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NIFTY-50.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NIFTY-50.svg" + }, + { + "priority": 0, + "symbol": "DRREDDY", + "identifier": "DRREDDYEQN", + "series": "EQ", + "open": 1246.35, + "dayHigh": 1274.15, + "dayLow": 1245.2, + "lastPrice": 1268, + "previousClose": 1246.35, + "change": 21.65, + "pChange": 1.74, + "totalTradedVolume": 1920945, + "stockIndClosePrice": 0, + "totalTradedValue": 2424290218.35, + "lastUpdateTime": "16-Dec-2024 15:59:54", + "yearHigh": 1421.49, + "ffmc": 772167292825.97, + "yearLow": 1094.24, + "nearWKH": 10.797824817620947, + "nearWKL": -15.87951454891066, + "perChange365d": -77.28, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/DRREDDY-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 3.53, + "chart30dPath": "https://nsearchives.nseindia.com/30d/DRREDDY-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/DRREDDYEQN.svg", + "meta": { + "symbol": "DRREDDY", + "companyName": "Dr. Reddy's Laboratories Limited", + "industry": "Pharmaceuticals", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "N1" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE089A01031", + "slb_isin": "INE089A01031", + "listingDate": "2003-05-30", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "INDUSINDBK", + "identifier": "INDUSINDBKEQN", + "series": "EQ", + "open": 987.9, + "dayHigh": 1007.95, + "dayLow": 985.55, + "lastPrice": 998.2, + "previousClose": 986.65, + "change": 11.55, + "pChange": 1.17, + "totalTradedVolume": 3058066, + "stockIndClosePrice": 0, + "totalTradedValue": 3053662384.96, + "lastUpdateTime": "16-Dec-2024 15:59:34", + "yearHigh": 1694.5, + "ffmc": 658454799836.62, + "yearLow": 965.55, + "nearWKH": 41.091767483033344, + "nearWKL": -3.381492413650261, + "perChange365d": -36.38, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/INDUSINDBK-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -1.75, + "chart30dPath": "https://nsearchives.nseindia.com/30d/INDUSINDBK-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/INDUSINDBKEQN.svg", + "meta": { + "symbol": "INDUSINDBK", + "companyName": "IndusInd Bank Limited", + "industry": "Private Sector Bank", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE095A01012", + "slb_isin": "INE095A01012", + "listingDate": "1998-01-28", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "HDFCLIFE", + "identifier": "HDFCLIFEEQN", + "series": "EQ", + "open": 632.55, + "dayHigh": 636.4, + "dayLow": 628.55, + "lastPrice": 635.45, + "previousClose": 632.55, + "change": 2.9, + "pChange": 0.46, + "totalTradedVolume": 2175242, + "stockIndClosePrice": 0, + "totalTradedValue": 1377863540.06, + "lastUpdateTime": "16-Dec-2024 15:58:33", + "yearHigh": 761.2, + "ffmc": 677305606771.03, + "yearLow": 511.4, + "nearWKH": 16.519968470835522, + "nearWKL": -24.256941728588206, + "perChange365d": -5.67, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/HDFCLIFE-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -8.51, + "chart30dPath": "https://nsearchives.nseindia.com/30d/HDFCLIFE-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/HDFCLIFEEQN.svg", + "meta": { + "symbol": "HDFCLIFE", + "companyName": "HDFC Life Insurance Company Limited", + "industry": "Life Insurance", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE795G01014", + "slb_isin": "INE795G01014", + "listingDate": "2017-11-17", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "POWERGRID", + "identifier": "POWERGRIDEQN", + "series": "EQ", + "open": 333.85, + "dayHigh": 336.25, + "dayLow": 331.6, + "lastPrice": 334.75, + "previousClose": 333.85, + "change": 0.9, + "pChange": 0.27, + "totalTradedVolume": 12695136, + "stockIndClosePrice": 0, + "totalTradedValue": 4243730062.0799994, + "lastUpdateTime": "16-Dec-2024 15:59:49", + "yearHigh": 366.25, + "ffmc": 1514380882407.16, + "yearLow": 222.7, + "nearWKH": 8.600682593856655, + "nearWKL": -50.31432420296364, + "perChange365d": 41.14, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/POWERGRID-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 7.34, + "chart30dPath": "https://nsearchives.nseindia.com/30d/POWERGRID-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/POWERGRIDEQN.svg", + "meta": { + "symbol": "POWERGRID", + "companyName": "Power Grid Corporation of India Limited", + "industry": "Power - Transmission", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": true, + "isSuspended": false, + "tempSuspendedSeries": [ + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE752E01010", + "slb_isin": "INE752E01010", + "listingDate": "2007-10-05", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "BAJFINANCE", + "identifier": "BAJFINANCEEQN", + "series": "EQ", + "open": 7182.8, + "dayHigh": 7248, + "dayLow": 7156.1, + "lastPrice": 7200, + "previousClose": 7182.8, + "change": 17.2, + "pChange": 0.24, + "totalTradedVolume": 796074, + "stockIndClosePrice": 0, + "totalTradedValue": 5740210988.099999, + "lastUpdateTime": "16-Dec-2024 15:59:54", + "yearHigh": 7830, + "ffmc": 2011409221377.96, + "yearLow": 6187.8, + "nearWKH": 8.045977011494253, + "nearWKL": -16.357994763890233, + "perChange365d": -4.08, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/BAJFINANCE-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 10.07, + "chart30dPath": "https://nsearchives.nseindia.com/30d/BAJFINANCE-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BAJFINANCEEQN.svg", + "meta": { + "symbol": "BAJFINANCE", + "companyName": "Bajaj Finance Limited", + "industry": "Non Banking Financial Company (NBFC)", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "W1", + "N1" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE296A01024", + "slb_isin": "INE296A01024", + "listingDate": "2003-04-01", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "CIPLA", + "identifier": "CIPLAEQN", + "series": "EQ", + "open": 1448, + "dayHigh": 1457.55, + "dayLow": 1436.1, + "lastPrice": 1450.5, + "previousClose": 1447.3, + "change": 3.2, + "pChange": 0.22, + "totalTradedVolume": 2076469, + "stockIndClosePrice": 0, + "totalTradedValue": 3004110761.06, + "lastUpdateTime": "16-Dec-2024 15:59:09", + "yearHigh": 1702.05, + "ffmc": 795355338768.3, + "yearLow": 1192.1, + "nearWKH": 14.77923680267912, + "nearWKL": -21.676033889774356, + "perChange365d": 19.99, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/CIPLA-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -3.42, + "chart30dPath": "https://nsearchives.nseindia.com/30d/CIPLA-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/CIPLAEQN.svg", + "meta": { + "symbol": "CIPLA", + "companyName": "Cipla Limited", + "industry": "Pharmaceuticals", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE059A01026", + "slb_isin": "INE059A01026", + "listingDate": "1995-02-08", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "BEL", + "identifier": "BELEQN", + "series": "EQ", + "open": 315.8, + "dayHigh": 317.35, + "dayLow": 314, + "lastPrice": 316, + "previousClose": 315.65, + "change": 0.35, + "pChange": 0.11, + "totalTradedVolume": 10543307, + "stockIndClosePrice": 0, + "totalTradedValue": 3326518791.5699997, + "lastUpdateTime": "16-Dec-2024 15:59:49", + "yearHigh": 340.5, + "ffmc": 1128679294541.6, + "yearLow": 162.6, + "nearWKH": 7.195301027900147, + "nearWKL": -94.3419434194342, + "perChange365d": 87.05, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/BEL-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 12.55, + "chart30dPath": "https://nsearchives.nseindia.com/30d/BEL-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BELEQN.svg", + "meta": { + "symbol": "BEL", + "companyName": "Bharat Electronics Limited", + "industry": "Aerospace & Defense", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE263A01024", + "slb_isin": "INE263A01024", + "listingDate": "2000-07-19", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "M&M", + "identifier": "M&MEQN", + "series": "EQ", + "open": 3089.4, + "dayHigh": 3092.15, + "dayLow": 3040, + "lastPrice": 3083.3, + "previousClose": 3081.4, + "change": 1.9, + "pChange": 0.06, + "totalTradedVolume": 2300493, + "stockIndClosePrice": 0, + "totalTradedValue": 7058671686.69, + "lastUpdateTime": "16-Dec-2024 15:59:22", + "yearHigh": 3222.1, + "ffmc": 2743446238438.37, + "yearLow": 1575, + "nearWKH": 4.307749604295327, + "nearWKL": -95.76507936507939, + "perChange365d": 78.84, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/M&M-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 9.89, + "chart30dPath": "https://nsearchives.nseindia.com/30d/M&M-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/M&MEQN.svg", + "meta": { + "symbol": "M&M", + "companyName": "Mahindra & Mahindra Limited", + "industry": "Passenger Cars & Utility Vehicles", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE101A01026", + "slb_isin": "INE101A01026", + "listingDate": "1996-01-03", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "COALINDIA", + "identifier": "COALINDIAEQN", + "series": "EQ", + "open": 410.5, + "dayHigh": 412.85, + "dayLow": 406.5, + "lastPrice": 410.5, + "previousClose": 410.3, + "change": 0.2, + "pChange": 0.05, + "totalTradedVolume": 5434635, + "stockIndClosePrice": 0, + "totalTradedValue": 2224015681.05, + "lastUpdateTime": "16-Dec-2024 15:59:44", + "yearHigh": 543.55, + "ffmc": 929827981999.72, + "yearLow": 342.3, + "nearWKH": 24.477968908104124, + "nearWKL": -19.924043236926668, + "perChange365d": 17.27, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/COALINDIA-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 0.17, + "chart30dPath": "https://nsearchives.nseindia.com/30d/COALINDIA-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/COALINDIAEQN.svg", + "meta": { + "symbol": "COALINDIA", + "companyName": "Coal India Limited", + "industry": "Coal", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE522F01014", + "slb_isin": "INE522F01014", + "listingDate": "2010-11-04", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "ITC", + "identifier": "ITCEQN", + "series": "EQ", + "open": 470.25, + "dayHigh": 474.4, + "dayLow": 468, + "lastPrice": 470, + "previousClose": 470, + "change": 0, + "pChange": 0, + "totalTradedVolume": 9007264, + "stockIndClosePrice": 0, + "totalTradedValue": 4234404879.04, + "lastUpdateTime": "16-Dec-2024 15:59:58", + "yearHigh": 528.5, + "ffmc": 4367018980734.38, + "yearLow": 399.35, + "nearWKH": 11.069063386944181, + "nearWKL": -17.69124827845248, + "perChange365d": 2.6, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/ITC-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 0.89, + "chart30dPath": "https://nsearchives.nseindia.com/30d/ITC-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/ITCEQN.svg", + "meta": { + "symbol": "ITC", + "companyName": "ITC Limited", + "industry": "Diversified FMCG", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE154A01025", + "slb_isin": "INE154A01025", + "listingDate": "1995-08-23", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "AXISBANK", + "identifier": "AXISBANKEQN", + "series": "EQ", + "open": 1146.5, + "dayHigh": 1155, + "dayLow": 1141.75, + "lastPrice": 1148, + "previousClose": 1148.15, + "change": -0.15, + "pChange": -0.01, + "totalTradedVolume": 3975202, + "stockIndClosePrice": 0, + "totalTradedValue": 4567586602.04, + "lastUpdateTime": "16-Dec-2024 16:00:00", + "yearHigh": 1339.65, + "ffmc": 3269249272419.84, + "yearLow": 995.7, + "nearWKH": 14.305975441346625, + "nearWKL": -15.295771818820926, + "perChange365d": 2.73, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/AXISBANK-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 0.89, + "chart30dPath": "https://nsearchives.nseindia.com/30d/AXISBANK-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/AXISBANKEQN.svg", + "meta": { + "symbol": "AXISBANK", + "companyName": "Axis Bank Limited", + "industry": "Private Sector Bank", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": true, + "isSuspended": false, + "tempSuspendedSeries": [ + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE238A01034", + "slb_isin": "INE238A01034", + "listingDate": "1998-11-16", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "TRENT", + "identifier": "TRENTEQN", + "series": "EQ", + "open": 7000, + "dayHigh": 7035, + "dayLow": 6942.75, + "lastPrice": 6998, + "previousClose": 7000.25, + "change": -2.25, + "pChange": -0.03, + "totalTradedVolume": 497823, + "stockIndClosePrice": 0, + "totalTradedValue": 3478349039.7599998, + "lastUpdateTime": "16-Dec-2024 15:57:49", + "yearHigh": 8345, + "ffmc": 1552517134293.08, + "yearLow": 2879.5, + "nearWKH": 16.141402037147994, + "nearWKL": -143.02830352491753, + "perChange365d": 134.14, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/TRENT-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 8.31, + "chart30dPath": "https://nsearchives.nseindia.com/30d/TRENT-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/TRENTEQN.svg", + "meta": { + "symbol": "TRENT", + "companyName": "Trent Limited", + "industry": "Speciality Retail", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "Q1", + "N1", + "W1", + "Q2", + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE849A01020", + "slb_isin": "INE849A01020", + "listingDate": "2004-06-07", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "EICHERMOT", + "identifier": "EICHERMOTEQN", + "series": "EQ", + "open": 4820, + "dayHigh": 4865, + "dayLow": 4800, + "lastPrice": 4822, + "previousClose": 4825.9, + "change": -3.9, + "pChange": -0.08, + "totalTradedVolume": 404180, + "stockIndClosePrice": 0, + "totalTradedValue": 1951344663.8, + "lastUpdateTime": "16-Dec-2024 15:48:55", + "yearHigh": 5105, + "ffmc": 662475979524.71, + "yearLow": 3562.45, + "nearWKH": 5.5435847208619, + "nearWKL": -35.35628570225548, + "perChange365d": 19.18, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/EICHERMOT-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -0.93, + "chart30dPath": "https://nsearchives.nseindia.com/30d/EICHERMOT-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/EICHERMOTEQN.svg", + "meta": { + "symbol": "EICHERMOT", + "companyName": "Eicher Motors Limited", + "industry": "2/3 Wheelers", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE066A01021", + "slb_isin": "INE066A01021", + "listingDate": "2004-09-07", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "MARUTI", + "identifier": "MARUTIEQN", + "series": "EQ", + "open": 11255.55, + "dayHigh": 11329.45, + "dayLow": 11205, + "lastPrice": 11262.35, + "previousClose": 11272.55, + "change": -10.2, + "pChange": -0.09, + "totalTradedVolume": 223389, + "stockIndClosePrice": 0, + "totalTradedValue": 2516269333.23, + "lastUpdateTime": "16-Dec-2024 15:57:06", + "yearHigh": 13680, + "ffmc": 1480118849201.91, + "yearLow": 9737.65, + "nearWKH": 17.672880116959064, + "nearWKL": -15.657781908365989, + "perChange365d": 9.63, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/MARUTI-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 2.46, + "chart30dPath": "https://nsearchives.nseindia.com/30d/MARUTI-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/MARUTIEQN.svg", + "meta": { + "symbol": "MARUTI", + "companyName": "Maruti Suzuki India Limited", + "industry": "Passenger Cars & Utility Vehicles", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE585B01010", + "slb_isin": "INE585B01010", + "listingDate": "2003-07-09", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "ICICIBANK", + "identifier": "ICICIBANKEQN", + "series": "EQ", + "open": 1344.9, + "dayHigh": 1350.45, + "dayLow": 1340.05, + "lastPrice": 1343.6, + "previousClose": 1344.9, + "change": -1.3, + "pChange": -0.1, + "totalTradedVolume": 9071006, + "stockIndClosePrice": 0, + "totalTradedValue": 12205219993.119999, + "lastUpdateTime": "16-Dec-2024 15:59:27", + "yearHigh": 1362.35, + "ffmc": 9468614070243.97, + "yearLow": 970.15, + "nearWKH": 1.3762983080706133, + "nearWKL": -38.49404731227129, + "perChange365d": 29.76, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/ICICIBANK-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 7.09, + "chart30dPath": "https://nsearchives.nseindia.com/30d/ICICIBANK-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/ICICIBANKEQN.svg", + "meta": { + "symbol": "ICICIBANK", + "companyName": "ICICI Bank Limited", + "industry": "Private Sector Bank", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "E2", + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE090A01021", + "slb_isin": "INE090A01021", + "listingDate": "1997-09-17", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "SBIN", + "identifier": "SBINEQN", + "series": "EQ", + "open": 859.8, + "dayHigh": 866.4, + "dayLow": 857.8, + "lastPrice": 860.65, + "previousClose": 861.55, + "change": -0.9, + "pChange": -0.1, + "totalTradedVolume": 6432713, + "stockIndClosePrice": 0, + "totalTradedValue": 5541460613.85, + "lastUpdateTime": "16-Dec-2024 15:59:50", + "yearHigh": 912, + "ffmc": 3306613321143.44, + "yearLow": 600.65, + "nearWKH": 5.630482456140353, + "nearWKL": -43.28643969033547, + "perChange365d": 32.81, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/SBIN-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 7.05, + "chart30dPath": "https://nsearchives.nseindia.com/30d/SBIN-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/SBINEQN.svg", + "meta": { + "symbol": "SBIN", + "companyName": "State Bank of India", + "industry": "Public Sector Bank", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "N3", + "N4", + "N1", + "IL", + "N5", + "N6", + "N2" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE062A01020", + "slb_isin": "INE062A01020", + "listingDate": "1995-03-01", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "SUNPHARMA", + "identifier": "SUNPHARMAEQN", + "series": "EQ", + "open": 1818.7, + "dayHigh": 1822.5, + "dayLow": 1792.35, + "lastPrice": 1810.5, + "previousClose": 1813.45, + "change": -2.95, + "pChange": -0.16, + "totalTradedVolume": 1483330, + "stockIndClosePrice": 0, + "totalTradedValue": 2678730813.7000003, + "lastUpdateTime": "16-Dec-2024 15:54:24", + "yearHigh": 1960.35, + "ffmc": 1951735666279.2, + "yearLow": 1208.55, + "nearWKH": 7.644043155558952, + "nearWKL": -49.80762070249473, + "perChange365d": 46.45, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/SUNPHARMA-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 2.35, + "chart30dPath": "https://nsearchives.nseindia.com/30d/SUNPHARMA-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/SUNPHARMAEQN.svg", + "meta": { + "symbol": "SUNPHARMA", + "companyName": "Sun Pharmaceutical Industries Limited", + "industry": "Pharmaceuticals", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "P1" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE044A01036", + "slb_isin": "INE044A01036", + "listingDate": "1995-02-08", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "APOLLOHOSP", + "identifier": "APOLLOHOSPEQN", + "series": "EQ", + "open": 7251.65, + "dayHigh": 7270.1, + "dayLow": 7166.05, + "lastPrice": 7243.45, + "previousClose": 7259.45, + "change": -16, + "pChange": -0.22, + "totalTradedVolume": 219812, + "stockIndClosePrice": 0, + "totalTradedValue": 1589009957.3999999, + "lastUpdateTime": "16-Dec-2024 15:50:51", + "yearHigh": 7545, + "ffmc": 733733846880.21, + "yearLow": 5284.85, + "nearWKH": 3.996686547382375, + "nearWKL": -37.06065451242702, + "perChange365d": 30.77, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/APOLLOHOSP-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 5.81, + "chart30dPath": "https://nsearchives.nseindia.com/30d/APOLLOHOSP-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/APOLLOHOSPEQN.svg", + "meta": { + "symbol": "APOLLOHOSP", + "companyName": "Apollo Hospitals Enterprise Limited", + "industry": "Hospital", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE437A01024", + "slb_isin": "INE437A01024", + "listingDate": "1996-01-10", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "KOTAKBANK", + "identifier": "KOTAKBANKEQN", + "series": "EQ", + "open": 1803, + "dayHigh": 1813, + "dayLow": 1793.85, + "lastPrice": 1800, + "previousClose": 1805.65, + "change": -5.65, + "pChange": -0.31, + "totalTradedVolume": 2989393, + "stockIndClosePrice": 0, + "totalTradedValue": 5385122444.13, + "lastUpdateTime": "16-Dec-2024 15:59:10", + "yearHigh": 1942, + "ffmc": 2639427478248.33, + "yearLow": 1543.85, + "nearWKH": 7.312049433573636, + "nearWKL": -16.591637788645276, + "perChange365d": -2.49, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/KOTAKBANK-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 5.65, + "chart30dPath": "https://nsearchives.nseindia.com/30d/KOTAKBANK-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/KOTAKBANKEQN.svg", + "meta": { + "symbol": "KOTAKBANK", + "companyName": "Kotak Mahindra Bank Limited", + "industry": "Private Sector Bank", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE237A01028", + "slb_isin": "INE237A01028", + "listingDate": "1995-12-20", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "RELIANCE", + "identifier": "RELIANCEEQN", + "series": "EQ", + "open": 1275, + "dayHigh": 1281, + "dayLow": 1266.55, + "lastPrice": 1268.4, + "previousClose": 1272.85, + "change": -4.45, + "pChange": -0.35, + "totalTradedVolume": 9486781, + "stockIndClosePrice": 0, + "totalTradedValue": 12066616225.140001, + "lastUpdateTime": "16-Dec-2024 15:59:55", + "yearHigh": 1608.8, + "ffmc": 8590655285745.81, + "yearLow": 1217.25, + "nearWKH": 21.158627548483334, + "nearWKL": -4.202094886013563, + "perChange365d": -49.18, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/RELIANCE-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 0.06, + "chart30dPath": "https://nsearchives.nseindia.com/30d/RELIANCE-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/RELIANCEEQN.svg", + "meta": { + "symbol": "RELIANCE", + "companyName": "Reliance Industries Limited", + "industry": "Refineries & Marketing", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE002A01018", + "slb_isin": "INE002A01018", + "listingDate": "1995-11-29", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "BAJAJ-AUTO", + "identifier": "BAJAJ-AUTOEQN", + "series": "EQ", + "open": 9064, + "dayHigh": 9078.75, + "dayLow": 8970, + "lastPrice": 8989.8, + "previousClose": 9021.4, + "change": -31.6, + "pChange": -0.35, + "totalTradedVolume": 228470, + "stockIndClosePrice": 0, + "totalTradedValue": 2056442477.1000001, + "lastUpdateTime": "16-Dec-2024 15:57:25", + "yearHigh": 12774, + "ffmc": 995870830502.27, + "yearLow": 6232, + "nearWKH": 29.624236730859565, + "nearWKL": -44.25224646983311, + "perChange365d": 43.4, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/BAJAJ-AUTO-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -5.11, + "chart30dPath": "https://nsearchives.nseindia.com/30d/BAJAJ-AUTO-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BAJAJ-AUTOEQN.svg", + "meta": { + "symbol": "BAJAJ-AUTO", + "companyName": "Bajaj Auto Limited", + "industry": "2/3 Wheelers", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE917I01010", + "slb_isin": "INE917I01010", + "listingDate": "2008-05-26", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "BRITANNIA", + "identifier": "BRITANNIAEQN", + "series": "EQ", + "open": 4869, + "dayHigh": 4869, + "dayLow": 4790, + "lastPrice": 4833, + "previousClose": 4850.1, + "change": -17.1, + "pChange": -0.35, + "totalTradedVolume": 208757, + "stockIndClosePrice": 0, + "totalTradedValue": 1007920547.4, + "lastUpdateTime": "16-Dec-2024 15:59:58", + "yearHigh": 6469.9, + "ffmc": 568832710016.43, + "yearLow": 4641, + "nearWKH": 25.30023647969829, + "nearWKL": -4.137039431157079, + "perChange365d": -1.37, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/BRITANNIA-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -1.41, + "chart30dPath": "https://nsearchives.nseindia.com/30d/BRITANNIA-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BRITANNIAEQN.svg", + "meta": { + "symbol": "BRITANNIA", + "companyName": "Britannia Industries Limited", + "industry": "Packaged Foods", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "N1", + "N2" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE216A01030", + "slb_isin": "INE216A01030", + "listingDate": "1998-11-05", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "BAJAJFINSV", + "identifier": "BAJAJFINSVEQN", + "series": "EQ", + "open": 1675, + "dayHigh": 1683.95, + "dayLow": 1660.4, + "lastPrice": 1673.4, + "previousClose": 1679.7, + "change": -6.3, + "pChange": -0.38, + "totalTradedVolume": 797240, + "stockIndClosePrice": 0, + "totalTradedValue": 1332873666.3999999, + "lastUpdateTime": "16-Dec-2024 15:59:52", + "yearHigh": 2029.9, + "ffmc": 912595900997.25, + "yearLow": 1419.05, + "nearWKH": 17.562441499581258, + "nearWKL": -17.92396321482683, + "perChange365d": -3.43, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/BAJAJFINSV-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 2.06, + "chart30dPath": "https://nsearchives.nseindia.com/30d/BAJAJFINSV-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BAJAJFINSVEQN.svg", + "meta": { + "symbol": "BAJAJFINSV", + "companyName": "Bajaj Finserv Limited", + "industry": "Holding Company", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE918I01026", + "slb_isin": "INE918I01026", + "listingDate": "2008-05-26", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "LT", + "identifier": "LTEQN", + "series": "EQ", + "open": 3882, + "dayHigh": 3914.4, + "dayLow": 3857.25, + "lastPrice": 3872.3, + "previousClose": 3887, + "change": -14.7, + "pChange": -0.38, + "totalTradedVolume": 918660, + "stockIndClosePrice": 0, + "totalTradedValue": 3562388934.6, + "lastUpdateTime": "16-Dec-2024 15:58:30", + "yearHigh": 3963.5, + "ffmc": 4552586874360.8, + "yearLow": 3175.05, + "nearWKH": 2.300996593919511, + "nearWKL": -21.96028409001433, + "perChange365d": 11.18, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/LT-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 9.97, + "chart30dPath": "https://nsearchives.nseindia.com/30d/LT-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/LTEQN.svg", + "meta": { + "symbol": "LT", + "companyName": "Larsen & Toubro Limited", + "industry": "Civil Construction", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE018A01030", + "slb_isin": "INE018A01030", + "listingDate": "2004-06-23", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "WIPRO", + "identifier": "WIPROEQN", + "series": "EQ", + "open": 310, + "dayHigh": 311.4, + "dayLow": 307.1, + "lastPrice": 308.7, + "previousClose": 309.95, + "change": -1.25, + "pChange": -0.4, + "totalTradedVolume": 7221189, + "stockIndClosePrice": 0, + "totalTradedValue": 2229036620.52, + "lastUpdateTime": "16-Dec-2024 15:59:46", + "yearHigh": 313.8, + "ffmc": 872017188794.62, + "yearLow": 208.5, + "nearWKH": 1.6252390057361448, + "nearWKL": -48.057553956834525, + "perChange365d": -30.76, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/WIPRO-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -45.44, + "chart30dPath": "https://nsearchives.nseindia.com/30d/WIPRO-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/WIPROEQN.svg", + "meta": { + "symbol": "WIPRO", + "companyName": "Wipro Limited", + "industry": "Computers - Software & Consulting", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE075A01022", + "slb_isin": "INE075A01022", + "listingDate": "1995-11-08", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "NESTLEIND", + "identifier": "NESTLEINDEQN", + "series": "EQ", + "open": 2253.5, + "dayHigh": 2257.5, + "dayLow": 2228.55, + "lastPrice": 2243.4, + "previousClose": 2253.5, + "change": -10.1, + "pChange": -0.45, + "totalTradedVolume": 665686, + "stockIndClosePrice": 0, + "totalTradedValue": 1488067827.54, + "lastUpdateTime": "16-Dec-2024 15:58:56", + "yearHigh": 2778, + "ffmc": 802545058744.07, + "yearLow": 2168.7, + "nearWKH": 19.244060475161984, + "nearWKL": -3.444459814635509, + "perChange365d": -90.81, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NESTLEIND-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 2.56, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NESTLEIND-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NESTLEINDEQN.svg", + "meta": { + "symbol": "NESTLEIND", + "companyName": "Nestle India Limited", + "industry": "Packaged Foods", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE239A01024", + "slb_isin": "INE239A01024", + "listingDate": "2023-08-01", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "GRASIM", + "identifier": "GRASIMEQN", + "series": "EQ", + "open": 2680.1, + "dayHigh": 2718, + "dayLow": 2672.25, + "lastPrice": 2680, + "previousClose": 2692.7, + "change": -12.7, + "pChange": -0.47, + "totalTradedVolume": 329525, + "stockIndClosePrice": 0, + "totalTradedValue": 885351293.75, + "lastUpdateTime": "16-Dec-2024 15:59:58", + "yearHigh": 2877.75, + "ffmc": 995789967022.64, + "yearLow": 2016.55, + "nearWKH": 6.871687950655894, + "nearWKL": -32.900250427710695, + "perChange365d": 26.2, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/GRASIM-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 6.39, + "chart30dPath": "https://nsearchives.nseindia.com/30d/GRASIM-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/GRASIMEQN.svg", + "meta": { + "symbol": "GRASIM", + "companyName": "Grasim Industries Limited", + "industry": "Cement & Cement Products", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE047A01021", + "slb_isin": "INE047A01021", + "listingDate": "1995-05-10", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "ASIANPAINT", + "identifier": "ASIANPAINTEQN", + "series": "EQ", + "open": 2419.95, + "dayHigh": 2419.95, + "dayLow": 2386.15, + "lastPrice": 2396, + "previousClose": 2407.65, + "change": -11.65, + "pChange": -0.48, + "totalTradedVolume": 987790, + "stockIndClosePrice": 0, + "totalTradedValue": 2368384571.3999996, + "lastUpdateTime": "16-Dec-2024 16:00:00", + "yearHigh": 3422.95, + "ffmc": 1082373527187.64, + "yearLow": 2354, + "nearWKH": 30.00189894681488, + "nearWKL": -1.784197111299915, + "perChange365d": -27.51, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/ASIANPAINT-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -3.26, + "chart30dPath": "https://nsearchives.nseindia.com/30d/ASIANPAINT-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/ASIANPAINTEQN.svg", + "meta": { + "symbol": "ASIANPAINT", + "companyName": "Asian Paints Limited", + "industry": "Paints", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE021A01026", + "slb_isin": "INE021A01026", + "listingDate": "1995-05-31", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "HDFCBANK", + "identifier": "HDFCBANKEQN", + "series": "EQ", + "open": 1865.1, + "dayHigh": 1869.95, + "dayLow": 1855.25, + "lastPrice": 1862, + "previousClose": 1871.75, + "change": -9.75, + "pChange": -0.52, + "totalTradedVolume": 6553541, + "stockIndClosePrice": 0, + "totalTradedValue": 12211671693.17, + "lastUpdateTime": "16-Dec-2024 15:59:50", + "yearHigh": 1880, + "ffmc": 14134522749301.82, + "yearLow": 1363.55, + "nearWKH": 0.9574468085106383, + "nearWKL": -36.55531516996077, + "perChange365d": 12.6, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/HDFCBANK-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 10.19, + "chart30dPath": "https://nsearchives.nseindia.com/30d/HDFCBANK-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/HDFCBANKEQN.svg", + "meta": { + "symbol": "HDFCBANK", + "companyName": "HDFC Bank Limited", + "industry": "Private Sector Bank", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": true, + "isSuspended": false, + "tempSuspendedSeries": [ + "W3", + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE040A01034", + "slb_isin": "INE040A01034", + "listingDate": "1995-11-08", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "SBILIFE", + "identifier": "SBILIFEEQN", + "series": "EQ", + "open": 1428.8, + "dayHigh": 1436.95, + "dayLow": 1415.65, + "lastPrice": 1420, + "previousClose": 1428.8, + "change": -8.8, + "pChange": -0.62, + "totalTradedVolume": 1601339, + "stockIndClosePrice": 0, + "totalTradedValue": 2279570120.06, + "lastUpdateTime": "16-Dec-2024 15:59:47", + "yearHigh": 1936, + "ffmc": 634334848855.07, + "yearLow": 1307.7, + "nearWKH": 26.65289256198347, + "nearWKL": -8.58759654354974, + "perChange365d": -2.12, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/SBILIFE-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -9, + "chart30dPath": "https://nsearchives.nseindia.com/30d/SBILIFE-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/SBILIFEEQN.svg", + "meta": { + "symbol": "SBILIFE", + "companyName": "SBI Life Insurance Company Limited", + "industry": "Life Insurance", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE123W01016", + "slb_isin": "INE123W01016", + "listingDate": "2017-10-03", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "TATAMOTORS", + "identifier": "TATAMOTORSEQN", + "series": "EQ", + "open": 791.4, + "dayHigh": 793.95, + "dayLow": 783, + "lastPrice": 785.3, + "previousClose": 790.3, + "change": -5, + "pChange": -0.63, + "totalTradedVolume": 10015361, + "stockIndClosePrice": 0, + "totalTradedValue": 7875779429.57, + "lastUpdateTime": "16-Dec-2024 15:59:54", + "yearHigh": 1179, + "ffmc": 1664587643565.74, + "yearLow": 696.25, + "nearWKH": 33.39270568278202, + "nearWKL": -12.789946140035902, + "perChange365d": 7.15, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/TATAMOTORS-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 1.36, + "chart30dPath": "https://nsearchives.nseindia.com/30d/TATAMOTORS-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/TATAMOTORSEQN.svg", + "meta": { + "symbol": "TATAMOTORS", + "companyName": "Tata Motors Limited", + "industry": "Passenger Cars & Utility Vehicles", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE155A01022", + "slb_isin": "INE155A01022", + "listingDate": "1998-07-22", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "HCLTECH", + "identifier": "HCLTECHEQN", + "series": "EQ", + "open": 1970.85, + "dayHigh": 1980, + "dayLow": 1950.25, + "lastPrice": 1954.25, + "previousClose": 1968.8, + "change": -14.55, + "pChange": -0.74, + "totalTradedVolume": 1371189, + "stockIndClosePrice": 0, + "totalTradedValue": 2685693046.7400002, + "lastUpdateTime": "16-Dec-2024 15:59:21", + "yearHigh": 1980, + "ffmc": 2061144550546.08, + "yearLow": 1235, + "nearWKH": 1.3005050505050506, + "nearWKL": -58.23886639676113, + "perChange365d": 31.05, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/HCLTECH-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 5.13, + "chart30dPath": "https://nsearchives.nseindia.com/30d/HCLTECH-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/HCLTECHEQN.svg", + "meta": { + "symbol": "HCLTECH", + "companyName": "HCL Technologies Limited", + "industry": "Computers - Software & Consulting", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE860A01027", + "slb_isin": "INE860A01027", + "listingDate": "2000-01-06", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "TATASTEEL", + "identifier": "TATASTEELEQN", + "series": "EQ", + "open": 148.94, + "dayHigh": 149.8, + "dayLow": 147.1, + "lastPrice": 147.8, + "previousClose": 148.95, + "change": -1.15, + "pChange": -0.77, + "totalTradedVolume": 22634773, + "stockIndClosePrice": 0, + "totalTradedValue": 3350625447.19, + "lastUpdateTime": "16-Dec-2024 15:59:57", + "yearHigh": 184.6, + "ffmc": 1223125164003.11, + "yearLow": 127.85, + "nearWKH": 19.9349945828819, + "nearWKL": -15.60422369964804, + "perChange365d": 8.31, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/TATASTEEL-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 7.11, + "chart30dPath": "https://nsearchives.nseindia.com/30d/TATASTEEL-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/TATASTEELEQN.svg", + "meta": { + "symbol": "TATASTEEL", + "companyName": "Tata Steel Limited", + "industry": "Iron & Steel", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "E1", + "B1", + "Q1", + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE081A01020", + "slb_isin": "INE081A01020", + "listingDate": "1998-11-18", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "HEROMOTOCO", + "identifier": "HEROMOTOCOEQN", + "series": "EQ", + "open": 4590, + "dayHigh": 4590, + "dayLow": 4515.7, + "lastPrice": 4540, + "previousClose": 4575.45, + "change": -35.45, + "pChange": -0.77, + "totalTradedVolume": 835965, + "stockIndClosePrice": 0, + "totalTradedValue": 3789763730.9999995, + "lastUpdateTime": "16-Dec-2024 15:59:22", + "yearHigh": 6246.25, + "ffmc": 587709793817.3, + "yearLow": 3752.05, + "nearWKH": 27.31638983390034, + "nearWKL": -21.000519715888643, + "perChange365d": 16.49, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/HEROMOTOCO-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -1.41, + "chart30dPath": "https://nsearchives.nseindia.com/30d/HEROMOTOCO-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/HEROMOTOCOEQN.svg", + "meta": { + "symbol": "HEROMOTOCO", + "companyName": "Hero MotoCorp Limited", + "industry": "2/3 Wheelers", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE158A01026", + "slb_isin": "INE158A01026", + "listingDate": "2003-04-11", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "ADANIENT", + "identifier": "ADANIENTEQN", + "series": "EQ", + "open": 2530, + "dayHigh": 2537.5, + "dayLow": 2503, + "lastPrice": 2507, + "previousClose": 2527.55, + "change": -20.55, + "pChange": -0.81, + "totalTradedVolume": 654321, + "stockIndClosePrice": 0, + "totalTradedValue": 1647606450.84, + "lastUpdateTime": "16-Dec-2024 15:59:36", + "yearHigh": 3743.9, + "ffmc": 596492753116.1, + "yearLow": 2025, + "nearWKH": 33.0377413926654, + "nearWKL": -23.80246913580247, + "perChange365d": -16.02, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/ADANIENT-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -11.12, + "chart30dPath": "https://nsearchives.nseindia.com/30d/ADANIENT-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/ADANIENTEQN.svg", + "meta": { + "symbol": "ADANIENT", + "companyName": "Adani Enterprises Limited", + "industry": "Trading - Minerals", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": true, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE423A01024", + "slb_isin": "INE423A01024", + "listingDate": "1997-06-04", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "JSWSTEEL", + "identifier": "JSWSTEELEQN", + "series": "EQ", + "open": 1004, + "dayHigh": 1006.3, + "dayLow": 984, + "lastPrice": 990.8, + "previousClose": 999.85, + "change": -9.05, + "pChange": -0.91, + "totalTradedVolume": 1220082, + "stockIndClosePrice": 0, + "totalTradedValue": 1206673298.82, + "lastUpdateTime": "16-Dec-2024 15:59:20", + "yearHigh": 1063, + "ffmc": 948945789051.11, + "yearLow": 761.75, + "nearWKH": 6.792097836312328, + "nearWKL": -30.06892024942566, + "perChange365d": 14.2, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/JSWSTEEL-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 5.46, + "chart30dPath": "https://nsearchives.nseindia.com/30d/JSWSTEEL-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/JSWSTEELEQN.svg", + "meta": { + "symbol": "JSWSTEEL", + "companyName": "JSW Steel Limited", + "industry": "Iron & Steel", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "P2", + "P1" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE019A01038", + "slb_isin": "INE019A01038", + "listingDate": "2005-03-23", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "INFY", + "identifier": "INFYEQN", + "series": "EQ", + "open": 1995.45, + "dayHigh": 1999.6, + "dayLow": 1977.6, + "lastPrice": 1979.2, + "previousClose": 1999.7, + "change": -20.5, + "pChange": -1.03, + "totalTradedVolume": 3119221, + "stockIndClosePrice": 0, + "totalTradedValue": 6192807796.7699995, + "lastUpdateTime": "16-Dec-2024 15:59:15", + "yearHigh": 2006.45, + "ffmc": 7113471113117.03, + "yearLow": 1358.35, + "nearWKH": 1.358120062797478, + "nearWKL": -45.70618765413923, + "perChange365d": 25.45, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/INFY-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 6.19, + "chart30dPath": "https://nsearchives.nseindia.com/30d/INFY-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/INFYEQN.svg", + "meta": { + "symbol": "INFY", + "companyName": "Infosys Limited", + "industry": "Computers - Software & Consulting", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE009A01021", + "slb_isin": "INE009A01021", + "listingDate": "1995-02-08", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "SHRIRAMFIN", + "identifier": "SHRIRAMFINEQN", + "series": "EQ", + "open": 3174, + "dayHigh": 3197, + "dayLow": 3127, + "lastPrice": 3130.05, + "previousClose": 3162.55, + "change": -32.5, + "pChange": -1.03, + "totalTradedVolume": 588661, + "stockIndClosePrice": 0, + "totalTradedValue": 1858349797.51, + "lastUpdateTime": "16-Dec-2024 15:53:25", + "yearHigh": 3652.25, + "ffmc": 873673897602.53, + "yearLow": 1972, + "nearWKH": 14.29803545759463, + "nearWKL": -58.72464503042597, + "perChange365d": 51.01, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/SHRIRAMFIN-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 11.15, + "chart30dPath": "https://nsearchives.nseindia.com/30d/SHRIRAMFIN-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/SHRIRAMFINEQN.svg", + "meta": { + "symbol": "SHRIRAMFIN", + "companyName": "Shriram Finance Limited", + "industry": "Non Banking Financial Company (NBFC)", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": true, + "isSuspended": false, + "tempSuspendedSeries": [ + "NK", + "NL", + "NM", + "NN", + "NO", + "NP", + "NQ", + "NR", + "NS", + "NT", + "NU", + "NV", + "NW", + "NX", + "NY", + "NZ", + "Y1", + "Y2", + "Y3", + "Y4", + "Y5", + "Y6", + "Y7", + "Y8", + "Y9", + "YA", + "YB", + "YC", + "YD", + "YG", + "YH", + "YJ", + "YK", + "YM", + "YN", + "YO", + "YQ", + "YR", + "YT", + "YU", + "YV", + "YX", + "YY", + "Z1", + "Z2", + "Z3", + "Z6", + "Z7", + "ZA", + "ZD", + "ZG", + "ZJ", + "N1", + "N2", + "N3", + "N4", + "N5", + "N6", + "N7", + "N8", + "N9", + "NA", + "NB", + "NC", + "ND", + "NE", + "NF", + "NG", + "NH", + "NI", + "NJ" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE721A01013", + "slb_isin": "INE721A01013", + "listingDate": "1996-12-11", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "TATACONSUM", + "identifier": "TATACONSUMEQN", + "series": "EQ", + "open": 929.7, + "dayHigh": 934.65, + "dayLow": 917, + "lastPrice": 920, + "previousClose": 929.7, + "change": -9.7, + "pChange": -1.04, + "totalTradedVolume": 848667, + "stockIndClosePrice": 0, + "totalTradedValue": 783192340.95, + "lastUpdateTime": "16-Dec-2024 15:59:36", + "yearHigh": 1256.44, + "ffmc": 597646897271, + "yearLow": 900.5, + "nearWKH": 26.777243640762794, + "nearWKL": -2.1654636313159354, + "perChange365d": -3.6, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/TATACONSUM-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -0.5, + "chart30dPath": "https://nsearchives.nseindia.com/30d/TATACONSUM-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/TATACONSUMEQN.svg", + "meta": { + "symbol": "TATACONSUM", + "companyName": "TATA CONSUMER PRODUCTS LIMITED", + "industry": "Tea & Coffee", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE192A01025", + "slb_isin": "INE192A01025", + "listingDate": "1998-11-18", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "ONGC", + "identifier": "ONGCEQN", + "series": "EQ", + "open": 254, + "dayHigh": 256.3, + "dayLow": 251.2, + "lastPrice": 251.5, + "previousClose": 254.25, + "change": -2.75, + "pChange": -1.08, + "totalTradedVolume": 7283872, + "stockIndClosePrice": 0, + "totalTradedValue": 1837211034.56, + "lastUpdateTime": "16-Dec-2024 15:59:56", + "yearHigh": 345, + "ffmc": 974319571143.06, + "yearLow": 193.25, + "nearWKH": 27.10144927536232, + "nearWKL": -30.142302716688228, + "perChange365d": 25.24, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/ONGC-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 0.4, + "chart30dPath": "https://nsearchives.nseindia.com/30d/ONGC-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/ONGCEQN.svg", + "meta": { + "symbol": "ONGC", + "companyName": "Oil & Natural Gas Corporation Limited", + "industry": "Oil Exploration & Production", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE213A01029", + "slb_isin": "INE213A01029", + "listingDate": "1995-07-19", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "HINDUNILVR", + "identifier": "HINDUNILVREQN", + "series": "EQ", + "open": 2390.3, + "dayHigh": 2393, + "dayLow": 2363, + "lastPrice": 2364, + "previousClose": 2390.1, + "change": -26.1, + "pChange": -1.09, + "totalTradedVolume": 1247552, + "stockIndClosePrice": 0, + "totalTradedValue": 2956885372.8, + "lastUpdateTime": "16-Dec-2024 15:59:47", + "yearHigh": 3035, + "ffmc": 2101986579237.73, + "yearLow": 2172.05, + "nearWKH": 22.108731466227347, + "nearWKL": -8.837273543426708, + "perChange365d": -6.21, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/HINDUNILVR-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -0.96, + "chart30dPath": "https://nsearchives.nseindia.com/30d/HINDUNILVR-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/HINDUNILVREQN.svg", + "meta": { + "symbol": "HINDUNILVR", + "companyName": "Hindustan Unilever Limited", + "industry": "Diversified FMCG", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE030A01027", + "slb_isin": "INE030A01027", + "listingDate": "1995-07-06", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "BHARTIARTL", + "identifier": "BHARTIARTLEQN", + "series": "EQ", + "open": 1681.75, + "dayHigh": 1687, + "dayLow": 1660.15, + "lastPrice": 1663, + "previousClose": 1681.75, + "change": -18.75, + "pChange": -1.11, + "totalTradedVolume": 4375126, + "stockIndClosePrice": 0, + "totalTradedValue": 7293553798.3, + "lastUpdateTime": "16-Dec-2024 15:58:08", + "yearHigh": 1779, + "ffmc": 4452530402746.07, + "yearLow": 960, + "nearWKH": 6.520517144463182, + "nearWKL": -73.22916666666667, + "perChange365d": 67.5, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/BHARTIARTL-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 7.23, + "chart30dPath": "https://nsearchives.nseindia.com/30d/BHARTIARTL-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BHARTIARTLEQN.svg", + "meta": { + "symbol": "BHARTIARTL", + "companyName": "Bharti Airtel Limited", + "industry": "Telecom - Cellular & Fixed line services", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE397D01024", + "slb_isin": "INE397D01024", + "listingDate": "2002-02-15", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "NTPC", + "identifier": "NTPCEQN", + "series": "EQ", + "open": 357.15, + "dayHigh": 358.9, + "dayLow": 351.7, + "lastPrice": 352.9, + "previousClose": 357.15, + "change": -4.25, + "pChange": -1.19, + "totalTradedVolume": 12168143, + "stockIndClosePrice": 0, + "totalTradedValue": 4299735010.4800005, + "lastUpdateTime": "16-Dec-2024 15:59:59", + "yearHigh": 448.45, + "ffmc": 1668825116393.81, + "yearLow": 293.2, + "nearWKH": 21.306723157542653, + "nearWKL": -20.361527967257842, + "perChange365d": 15.67, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/NTPC-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -5.26, + "chart30dPath": "https://nsearchives.nseindia.com/30d/NTPC-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/NTPCEQN.svg", + "meta": { + "symbol": "NTPC", + "companyName": "NTPC Limited", + "industry": "Power Generation", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": true, + "isSuspended": false, + "tempSuspendedSeries": [ + "N1", + "N4", + "U4", + "U1" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE733E01010", + "slb_isin": "INE733E01010", + "listingDate": "2004-11-05", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "ULTRACEMCO", + "identifier": "ULTRACEMCOEQN", + "series": "EQ", + "open": 12050, + "dayHigh": 12145.35, + "dayLow": 11871, + "lastPrice": 11939.95, + "previousClose": 12083.9, + "change": -143.95, + "pChange": -1.19, + "totalTradedVolume": 214946, + "stockIndClosePrice": 0, + "totalTradedValue": 2574603842.86, + "lastUpdateTime": "16-Dec-2024 15:58:23", + "yearHigh": 12145.35, + "ffmc": 1360894997551.42, + "yearLow": 9250, + "nearWKH": 1.6911822220026564, + "nearWKL": -29.080540540540547, + "perChange365d": 19.07, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/ULTRACEMCO-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 11.32, + "chart30dPath": "https://nsearchives.nseindia.com/30d/ULTRACEMCO-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/ULTRACEMCOEQN.svg", + "meta": { + "symbol": "ULTRACEMCO", + "companyName": "UltraTech Cement Limited", + "industry": "Cement & Cement Products", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE481G01011", + "slb_isin": "INE481G01011", + "listingDate": "2004-08-24", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "BPCL", + "identifier": "BPCLEQN", + "series": "EQ", + "open": 300.95, + "dayHigh": 301.7, + "dayLow": 295.8, + "lastPrice": 298, + "previousClose": 301.7, + "change": -3.7, + "pChange": -1.23, + "totalTradedVolume": 8696443, + "stockIndClosePrice": 0, + "totalTradedValue": 2590670369.7, + "lastUpdateTime": "16-Dec-2024 15:59:44", + "yearHigh": 376, + "ffmc": 576020900693.63, + "yearLow": 216.23, + "nearWKH": 20.74468085106383, + "nearWKL": -37.81621421634372, + "perChange365d": -33.64, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/BPCL-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -0.08, + "chart30dPath": "https://nsearchives.nseindia.com/30d/BPCL-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/BPCLEQN.svg", + "meta": { + "symbol": "BPCL", + "companyName": "Bharat Petroleum Corporation Limited", + "industry": "Refineries & Marketing", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE029A01011", + "slb_isin": "INE029A01011", + "listingDate": "1995-09-13", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "TECHM", + "identifier": "TECHMEQN", + "series": "EQ", + "open": 1793.5, + "dayHigh": 1793.5, + "dayLow": 1766, + "lastPrice": 1774.15, + "previousClose": 1796.4, + "change": -22.25, + "pChange": -1.24, + "totalTradedVolume": 1075193, + "stockIndClosePrice": 0, + "totalTradedValue": 1911123301.71, + "lastUpdateTime": "16-Dec-2024 15:59:50", + "yearHigh": 1807.7, + "ffmc": 1124582169229.16, + "yearLow": 1162.95, + "nearWKH": 1.8559495491508522, + "nearWKL": -52.555999828023566, + "perChange365d": 35.94, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/TECHM-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 5.22, + "chart30dPath": "https://nsearchives.nseindia.com/30d/TECHM-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/TECHMEQN.svg", + "meta": { + "symbol": "TECHM", + "companyName": "Tech Mahindra Limited", + "industry": "Computers - Software & Consulting", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE669C01036", + "slb_isin": "INE669C01036", + "listingDate": "2006-08-28", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "TCS", + "identifier": "TCSEQN", + "series": "EQ", + "open": 4459, + "dayHigh": 4475, + "dayLow": 4397, + "lastPrice": 4416, + "previousClose": 4473.9, + "change": -57.9, + "pChange": -1.29, + "totalTradedVolume": 1646224, + "stockIndClosePrice": 0, + "totalTradedValue": 7284837520.320001, + "lastUpdateTime": "16-Dec-2024 15:59:36", + "yearHigh": 4592.25, + "ffmc": 4507245550663.56, + "yearLow": 3591.5, + "nearWKH": 3.8379879144210354, + "nearWKL": -22.95698176249478, + "perChange365d": 14.35, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/TCS-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 6.5, + "chart30dPath": "https://nsearchives.nseindia.com/30d/TCS-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/TCSEQN.svg", + "meta": { + "symbol": "TCS", + "companyName": "Tata Consultancy Services Limited", + "industry": "Computers - Software & Consulting", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE467B01029", + "slb_isin": "INE467B01029", + "listingDate": "2004-08-25", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "ADANIPORTS", + "identifier": "ADANIPORTSEQN", + "series": "EQ", + "open": 1258, + "dayHigh": 1261.85, + "dayLow": 1240.95, + "lastPrice": 1242.5, + "previousClose": 1259.95, + "change": -17.45, + "pChange": -1.38, + "totalTradedVolume": 1337624, + "stockIndClosePrice": 0, + "totalTradedValue": 1668017128, + "lastUpdateTime": "16-Dec-2024 15:59:44", + "yearHigh": 1621.4, + "ffmc": 914611988302.13, + "yearLow": 989.25, + "nearWKH": 23.36869372147527, + "nearWKL": -25.60020217336366, + "perChange365d": 15.26, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/ADANIPORTS-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": -1.69, + "chart30dPath": "https://nsearchives.nseindia.com/30d/ADANIPORTS-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/ADANIPORTSEQN.svg", + "meta": { + "symbol": "ADANIPORTS", + "companyName": "Adani Ports and Special Economic Zone Limited", + "industry": "Port & Port services", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [], + "isETFSec": false, + "isDelisted": false, + "isin": "INE742F01042", + "slb_isin": "INE742F01042", + "listingDate": "2007-11-27", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "HINDALCO", + "identifier": "HINDALCOEQN", + "series": "EQ", + "open": 661.3, + "dayHigh": 666.6, + "dayLow": 652.05, + "lastPrice": 652.9, + "previousClose": 662.1, + "change": -9.2, + "pChange": -1.39, + "totalTradedVolume": 2619582, + "stockIndClosePrice": 0, + "totalTradedValue": 1718602966.9199998, + "lastUpdateTime": "16-Dec-2024 15:59:36", + "yearHigh": 772.65, + "ffmc": 948708035764.99, + "yearLow": 496.35, + "nearWKH": 15.498608684397851, + "nearWKL": -31.540243779591005, + "perChange365d": 17.27, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/HINDALCO-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 4.17, + "chart30dPath": "https://nsearchives.nseindia.com/30d/HINDALCO-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/HINDALCOEQN.svg", + "meta": { + "symbol": "HINDALCO", + "companyName": "Hindalco Industries Limited", + "industry": "Aluminium", + "activeSeries": [ + "EQ", + "T0" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "E2", + "E1", + "P1" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE038A01020", + "slb_isin": "INE038A01020", + "listingDate": "1997-01-08", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + }, + { + "priority": 0, + "symbol": "TITAN", + "identifier": "TITANEQN", + "series": "EQ", + "open": 3505, + "dayHigh": 3511, + "dayLow": 3429, + "lastPrice": 3440, + "previousClose": 3508.85, + "change": -68.85, + "pChange": -1.96, + "totalTradedVolume": 1295227, + "stockIndClosePrice": 0, + "totalTradedValue": 4466797545.82, + "lastUpdateTime": "16-Dec-2024 15:59:51", + "yearHigh": 3886.95, + "ffmc": 1421360983104.84, + "yearLow": 3055.65, + "nearWKH": 11.498732939708509, + "nearWKL": -12.578338487719467, + "perChange365d": -4.51, + "date365dAgo": "15-Dec-2023", + "chart365dPath": "https://nsearchives.nseindia.com/365d/TITAN-EQ.svg", + "date30dAgo": "14-Nov-2024", + "perChange30d": 7.99, + "chart30dPath": "https://nsearchives.nseindia.com/30d/TITAN-EQ.svg", + "chartTodayPath": "https://nsearchives.nseindia.com/today/TITANEQN.svg", + "meta": { + "symbol": "TITAN", + "companyName": "Titan Company Limited", + "industry": "Gems Jewellery And Watches", + "activeSeries": [ + "EQ" + ], + "debtSeries": [], + "isFNOSec": true, + "isCASec": false, + "isSLBSec": true, + "isDebtSec": false, + "isSuspended": false, + "tempSuspendedSeries": [ + "N1", + "IL" + ], + "isETFSec": false, + "isDelisted": false, + "isin": "INE280A01028", + "slb_isin": "INE280A01028", + "listingDate": "2004-09-24", + "isMunicipalBond": false, + "quotepreopenstatus": { + "equityTime": "16-Dec-2024 16:00:00", + "preOpenTime": "16-Dec-2024 09:07:34", + "QuotePreOpenFlag": false + } + } + } + ], + "metadata": { + "indexName": "NIFTY 50", + "open": 24753.4, + "high": 24781.25, + "low": 24601.75, + "previousClose": 24768.3, + "last": 24668.25, + "percChange": -0.4, + "change": -100.04999999999927, + "timeVal": "16-Dec-2024 21:00:30", + "yearHigh": 26277.35, + "yearLow": 21137.2, + "indicativeClose": 0, + "totalTradedVolume": 187551629, + "totalTradedValue": 186081425661.93, + "ffmc_sum": 1105225400.94 + }, + "marketStatus": { + "market": "Capital Market", + "marketStatus": "Closed", + "tradeDate": "16-Dec-2024 15:30", + "index": "NIFTY 50", + "last": 24668.25, + "variation": -100.04999999999927, + "percentChange": -0.4, + "marketStatusMessage": "Normal Market has Closed" + }, + "date30dAgo": "14-Nov-2024", + "date365dAgo": "15-Dec-2023" +} \ No newline at end of file diff --git a/nse/controllers/indices/master.py b/nse/controllers/indices/master.py new file mode 100644 index 0000000..2e01f4b --- /dev/null +++ b/nse/controllers/indices/master.py @@ -0,0 +1,284 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 28th Nov., 2024 + + OBJECTIVE: + + The "Index Master" contains information about just the indices, and not the component symbols of those indices. + This script provides a way to get the data that is available on the screen on the following URL: + https://www.nseindia.com/market-data/live-market-indices + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse +from utils_v2.nse.models.indices import NSEIndexInfo + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEIndexMaster(AsyncNSEBase): + + # Index Types: + INDEX_TYPE_BROAD_MARKET = "BROAD MARKET INDICES" + INDEX_TYPE_SECTORAL = "SECTORAL INDICES" + INDEX_TYPE_STRATEGY = "STRATEGY INDICES" + INDEX_TYPE_THEMATIC = "THEMATIC INDICES" + INDEX_TYPE_FIXED_INCOME = "FIXED INCOME INDICES" + + def __init__( + self, + http_client: httpx.AsyncClient, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (IdxMstr) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/market-data/live-market-indices", + data_url = r"https://www.nseindia.com/api/allIndices", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the corporate event calendar. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Make the API call: + api_response = await self.get( + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + @staticmethod + def parse_float(value: str | float | int) -> float | None: + + """ + Parses a value as a floating point figure. + :param value: Any input value. + :return: A floating point value if parsed successfully, else None. + """ + + if value is None: return None + if isinstance(value, float): return value + if isinstance(value, int): return float(value) + if isinstance(value, str): + value = regex.find_first(text = value.strip(), pattern = r"[\d,]+\.?[\d,]*") + if value: return float(value.replace(",", "")) + else: return None + + def format_data( + self, + raw_json: dict, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[NSEIndexInfo] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Format the data: + formatted_data = [ + NSEIndexInfo( + scrapeTs = timestamp, + kind = idx["key"], + name = idx["index"], + symbol = idx["indexSymbol"], + open = self.parse_float(idx["open"]), + high = self.parse_float(idx["high"]), + low = self.parse_float(idx["low"]), + close = self.parse_float(idx["last"]), + prevClose = self.parse_float(idx["previousClose"]), + pChg = self.parse_float(idx["percentChange"]), + yearHigh = self.parse_float(idx["yearHigh"]), + yearLow = self.parse_float(idx["yearLow"]), + advances = self.parse_float(idx.get("advances")), + declines = self.parse_float(idx.get("declines")), + unchanged = self.parse_float(idx.get("unchanged")), + pChg30d = self.parse_float(idx["perChange30d"]), + pChg365d = self.parse_float(idx["perChange365d"]) + ) for idx in raw_json["data"] + ] + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an HTTP client: + test_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 2.5, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 2.5 # ....... Time to wait for receiving data. + ) + ) + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSEIndexMaster(http_client = test_client) + + # Get and show the data: + api_response = await my_nse.get_data(return_raw = False) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("INDEX MASTER:", json.to_string(api_response.data, default = str)) + + asyncio.run(main()) diff --git a/nse/controllers/ipo/__init__.py b/nse/controllers/ipo/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/controllers/ipo/current.py b/nse/controllers/ipo/current.py new file mode 100644 index 0000000..2c5b781 --- /dev/null +++ b/nse/controllers/ipo/current.py @@ -0,0 +1,252 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 10th Jan., 2025 + + OBJECTIVE: + + To provide a way to retrieve dates and summaries of currently running IPO offers. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# Data models: +from utils_v2.nse.models.ipo import NSEIPO + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSECurrentIPO(AsyncNSEBase): + + def __init__( + self, + http_client: httpx.AsyncClient = None, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (Curr. IPO) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/market-data/all-upcoming-issues-ipo", + data_url = r"https://www.nseindia.com/api/ipo-current-issue", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the currently running IPOs. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Make the API call: + api_response = await self.get( + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + def format_data( + self, + raw_json: List[dict], + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[NSEIPO] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Format the data: + formatted_data = [ + NSEIPO( + scrapeTs = timestamp, + symbol = ipo["symbol"], + name = ipo["companyName"], + issueStartTs = self.parse_datetime_string( + dt_str = ipo["issueStartDate"], + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ), + issueEndTs = self.parse_datetime_string( + dt_str = ipo["issueEndDate"], + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ), + status = ipo["status"], + kind = ipo["series"], + offerQty = float((ipo["noOfSharesOffered"])), + bidQty = int(float(ipo["noOfsharesBid"])), + bidFactor = float(ipo["noOfTime"]), + ) for ipo in raw_json + ] + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an instance of the scraper: + my_nse = NSECurrentIPO(debug_only_errors = False) + + # Get and show the data: + api_response = await my_nse.get_data( + return_raw = False, + retry_count = 3 + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("CURRENT IPO:", json.to_string(api_response.data, default = str)) + print("COOKIES:", my_nse.cookies) + + asyncio.run(main()) diff --git a/nse/controllers/ipo/past.py b/nse/controllers/ipo/past.py new file mode 100644 index 0000000..21cb052 --- /dev/null +++ b/nse/controllers/ipo/past.py @@ -0,0 +1,311 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 10th Jan., 2025 + + OBJECTIVE: + + To provide a way to retrieve dates and summaries of IPOs offered in the past. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# Data models: +from utils_v2.nse.models.ipo import NSEIPO + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEPastIPO(AsyncNSEBase): + + def __init__( + self, + http_client: httpx.AsyncClient = None, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (Past IPO) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/market-data/all-upcoming-issues-ipo", + data_url = r"https://www.nseindia.com/api/public-past-issues", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + from_date: datetime.datetime = None, + to_date: datetime.datetime = None, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the currently running IPOs. + :param from_date: The starting date (inclusive) from which the events must be fetched. + :param to_date: The ending date (inclusive) till which the events must be fetched. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Prepare the inputs: + now = date_time.get_current_utc_date_time(as_string = False) + one_year_ago = now - datetime.timedelta(days = 365) + from_date = date_time.to_timezone(from_date or one_year_ago, timezone = date_time.TIMEZONE_IST).strftime("%d-%m-%Y") + to_date = date_time.to_timezone(to_date or now, timezone = date_time.TIMEZONE_IST).strftime("%d-%m-%Y") + + # Make the API call: + api_response = await self.get( + params = { + "from_date": from_date, + "to_date": to_date + }, + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + @staticmethod + def get_band_prices(price_band: str) -> (float, float): + + # Find all the matches: + matches = regex.find( + text = str(price_band), + pattern = r"[\d,]+\.?[\d,]*" + ) + + # Remove the commas if any creep in: + matches = [regex.replace(text = m, pattern = r"[ ,]*", substitute_text = "") for m in matches] + + # Parse the matches: + match len(matches): + case 1: upper_band, lower_band = float(matches[0]), None + case 2: upper_band, lower_band = float(matches[0]), float(matches[1]) + case _: upper_band, lower_band = None, None + + # Done here: + return upper_band, lower_band + + def format_data( + self, + raw_json: List[dict], + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[NSEIPO] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Format the data: + formatted_data = [] + for ipo in raw_json: + issue_price = regex.find_first(text = str(ipo.get("issuePrice")), pattern = r"[\d,]+\.?[\d,]*") + upper_band, lower_band = self.get_band_prices(ipo.get("priceRange")) + this_entry = NSEIPO( + scrapeTs = timestamp, + symbol = ipo["symbol"], + name = ipo.get("company", ipo.get("companyName")), + issueStartTs = self.parse_datetime_string( + dt_str = ipo.get("ipoStartDate", ipo.get("issueStartDate")), + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ), + issueEndTs = self.parse_datetime_string( + dt_str = ipo.get("ipoEndDate", ipo.get("issueEndDate")), + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ), + kind = ipo.get("securityType"), + issuePrice = float(issue_price) if issue_price else None, + upperBand = upper_band, + lowerBand = lower_band, + listingTs = self.parse_datetime_string( + dt_str = ipo.get("listingDate"), + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ) + ) + formatted_data.append(this_entry) + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an instance of the scraper: + my_nse = NSEPastIPO(debug_only_errors = False) + + # for p in [ + # "Rs.1000", + # "140", + # "70", + # "Rs.397 to Rs.418", + # "Rs.397.10 to Rs.4,180.25", + # ]: + # my_nse.get_band_prices(p) + + # Get and show the data: + now = date_time.get_current_utc_date_time(as_string = False) + api_response = await my_nse.get_data( + from_date = now - datetime.timedelta(days = 365), + to_date = now, + return_raw = False, + retry_count = 3, + backoff_seconds = 1.0, + refresh_cookies = True, + force_refresh_cookies = False + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("PAST IPO:", json.to_string(api_response.data, default = str)) + print("COOKIES:", my_nse.cookies) + + asyncio.run(main()) diff --git a/nse/controllers/ipo/upcoming.py b/nse/controllers/ipo/upcoming.py new file mode 100644 index 0000000..e113417 --- /dev/null +++ b/nse/controllers/ipo/upcoming.py @@ -0,0 +1,275 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 10th Jan., 2025 + + OBJECTIVE: + + To provide a way to retrieve dates and summaries of upcoming IPO offers. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# Data models: +from utils_v2.nse.models.ipo import NSEIPO + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEUpcomingIPO(AsyncNSEBase): + + def __init__( + self, + http_client: httpx.AsyncClient = None, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (Curr. IPO) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/market-data/all-upcoming-issues-ipo", + data_url = r"https://www.nseindia.com/api/all-upcoming-issues?category=ipo", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the currently running IPOs. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Make the API call: + api_response = await self.get( + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + @staticmethod + def get_band_prices(price_band: str) -> (float, float): + + # Find all the matches: + matches = regex.find( + text = str(price_band), + pattern = r"[\d,]+\.?[\d,]*" + ) + + # Remove the commas if any creep in: + matches = [regex.replace(text = m, pattern = r"[ ,]*", substitute_text = "") for m in matches] + + # Parse the matches: + match len(matches): + case 1: upper_band, lower_band = float(matches[0]), None + case 2: upper_band, lower_band = float(matches[0]), float(matches[1]) + case _: upper_band, lower_band = None, None + + # Done here: + return upper_band, lower_band + + def format_data( + self, + raw_json: List[dict], + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[NSEIPO] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Format the data: + formatted_data = [] + for ipo in raw_json: + issue_size = regex.find_first(text = str(ipo.get("issueSize")), pattern = r"[\d,]+\.?[\d,]*") + upper_band, lower_band = self.get_band_prices(ipo.get("priceRange")) + formatted_data.append(NSEIPO( + scrapeTs = timestamp, + symbol = ipo["symbol"], + name = ipo["companyName"], + issueStartTs = self.parse_datetime_string( + dt_str = ipo["issueStartDate"], + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ), + issueEndTs = self.parse_datetime_string( + dt_str = ipo["issueEndDate"], + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ), + status = ipo["status"], + kind = ipo["series"], + offerQty = int(float(issue_size)) if issue_size else None, + upperBand = upper_band, + lowerBand = lower_band, + )) + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an instance of the scraper: + my_nse = NSEUpcomingIPO(debug_only_errors = False) + + # Get and show the data: + api_response = await my_nse.get_data( + return_raw = False, + retry_count = 3 + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("UPCOMING IPO:", json.to_string(api_response.data, default = str)) + + asyncio.run(main()) diff --git a/nse/controllers/market/__init__.py b/nse/controllers/market/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/controllers/market/examples/20241205_formatted_nse_pre_market_data.json b/nse/controllers/market/examples/20241205_formatted_nse_pre_market_data.json new file mode 100644 index 0000000..887e5d0 --- /dev/null +++ b/nse/controllers/market/examples/20241205_formatted_nse_pre_market_data.json @@ -0,0 +1,3134 @@ +{ + "scrapeTs": "2024-12-30T11:20:22.445634+00:00", + "ts": "2024-12-30 03:37:09+00:00", + "advances": 108, + "declines": 74, + "unchanged": 41, + "totalMarketCap": 160117209089913.3, + "totalTradedValue": 1423545618, + "totalTradedVolume": 12384603, + "data": [ + { + "symbol": "IDEA", + "ffmc": 176279606610.49, + "trigger": null, + "yearHigh": 19.18, + "yearLow": 6.61, + "prevClose": 7.47, + "premarketPrice": 7.99, + "chg": 0.52, + "pChg": 6.96, + "totalTradedVolume": 10098553, + "totalBuyVolume": 12814865, + "totalSellVolume": 17470857 + }, + { + "symbol": "JSWENERGY", + "ffmc": 335286994702.46, + "trigger": null, + "yearHigh": 804.9, + "yearLow": 404.15, + "prevClose": 625.8, + "premarketPrice": 651.95, + "chg": 26.15, + "pChg": 4.18, + "totalTradedVolume": 54323, + "totalBuyVolume": 342767, + "totalSellVolume": 24995 + }, + { + "symbol": "CHOLAFIN", + "ffmc": 499142963497.72, + "trigger": null, + "yearHigh": 1652, + "yearLow": 1011.2, + "prevClose": 1193.85, + "premarketPrice": 1217, + "chg": 23.15, + "pChg": 1.94, + "totalTradedVolume": 17432, + "totalBuyVolume": 13011, + "totalSellVolume": 14278 + }, + { + "symbol": "IPCALAB", + "ffmc": 221982828151.57, + "trigger": null, + "yearHigh": 1708.65, + "yearLow": 1052, + "prevClose": 1632.65, + "premarketPrice": 1647.7, + "chg": 15.05, + "pChg": 0.92, + "totalTradedVolume": 5626, + "totalBuyVolume": 31692, + "totalSellVolume": 8291 + }, + { + "symbol": "OBEROIRLTY", + "ffmc": 272432822256.71, + "trigger": null, + "yearHigh": 2343.65, + "yearLow": 1268.15, + "prevClose": 2315.8, + "premarketPrice": 2335, + "chg": 19.2, + "pChg": 0.83, + "totalTradedVolume": 899, + "totalBuyVolume": 2026, + "totalSellVolume": 4244 + }, + { + "symbol": "ALKEM", + "ffmc": 287646530918.4, + "trigger": null, + "yearHigh": 6439.9, + "yearLow": 4407.05, + "prevClose": 5482.7, + "premarketPrice": 5522.85, + "chg": 40.15, + "pChg": 0.73, + "totalTradedVolume": 420, + "totalBuyVolume": 1278, + "totalSellVolume": 3162 + }, + { + "symbol": "KEI", + "ffmc": 257149631783.07, + "trigger": null, + "yearHigh": 5039.7, + "yearLow": 2822.45, + "prevClose": 4343.45, + "premarketPrice": 4375.3, + "chg": 31.85, + "pChg": 0.73, + "totalTradedVolume": 758, + "totalBuyVolume": 2040, + "totalSellVolume": 4096 + }, + { + "symbol": "LAURUSLABS", + "ffmc": 230597832474.9, + "trigger": null, + "yearHigh": 593, + "yearLow": 360.85, + "prevClose": 586.7, + "premarketPrice": 591, + "chg": 4.3, + "pChg": 0.73, + "totalTradedVolume": 10230, + "totalBuyVolume": 41696, + "totalSellVolume": 58824 + }, + { + "symbol": "INDUSTOWER", + "ffmc": 408836417498.96, + "trigger": null, + "yearHigh": 460.35, + "yearLow": 182.5, + "prevClose": 329.55, + "premarketPrice": 331.9, + "chg": 2.35, + "pChg": 0.71, + "totalTradedVolume": 21238, + "totalBuyVolume": 34790, + "totalSellVolume": 73828 + }, + { + "symbol": "BIOCON", + "ffmc": 158311186115.04, + "trigger": null, + "yearHigh": 395.8, + "yearLow": 244.55, + "prevClose": 352.55, + "premarketPrice": 355, + "chg": 2.45, + "pChg": 0.69, + "totalTradedVolume": 9772, + "totalBuyVolume": 16199, + "totalSellVolume": 65587 + }, + { + "symbol": "IRB", + "ffmc": 109330320206.25, + "trigger": null, + "yearHigh": 78.15, + "yearLow": 40.8, + "prevClose": 55.23, + "premarketPrice": 55.61, + "chg": 0.38, + "pChg": 0.69, + "totalTradedVolume": 49000, + "totalBuyVolume": 887180, + "totalSellVolume": 437709 + }, + { + "symbol": "ASTRAL", + "ffmc": 204264494132.5, + "trigger": null, + "yearHigh": 2454, + "yearLow": 1650, + "prevClose": 1654.1, + "premarketPrice": 1665, + "chg": 10.9, + "pChg": 0.66, + "totalTradedVolume": 306, + "totalBuyVolume": 8009, + "totalSellVolume": 5893 + }, + { + "symbol": "ADANIENT", + "ffmc": 575792765273.61, + "trigger": null, + "yearHigh": 3743.9, + "yearLow": 2025, + "prevClose": 2409.95, + "premarketPrice": 2425, + "chg": 15.05, + "pChg": 0.62, + "totalTradedVolume": 2639, + "totalBuyVolume": 6387, + "totalSellVolume": 18579 + }, + { + "symbol": "PAGEIND", + "ffmc": 287463664182.46, + "trigger": null, + "yearHigh": 49849.95, + "yearLow": 33070.05, + "prevClose": 46933.55, + "premarketPrice": 47220, + "chg": 286.45, + "pChg": 0.61, + "totalTradedVolume": 17, + "totalBuyVolume": 219, + "totalSellVolume": 211 + }, + { + "symbol": "ADANIGREEN", + "ffmc": 378656542198.23, + "trigger": null, + "yearHigh": 2174.1, + "yearLow": 870.25, + "prevClose": 1054, + "premarketPrice": 1060, + "chg": 6, + "pChg": 0.57, + "totalTradedVolume": 6104, + "totalBuyVolume": 17072, + "totalSellVolume": 30465 + }, + { + "symbol": "LICI", + "ffmc": 196348484881.57, + "trigger": null, + "yearHigh": 1222, + "yearLow": 784.05, + "prevClose": 887, + "premarketPrice": 891.75, + "chg": 4.75, + "pChg": 0.54, + "totalTradedVolume": 4668, + "totalBuyVolume": 24565, + "totalSellVolume": 36171 + }, + { + "symbol": "RBLBANK", + "ffmc": 95588077978.07, + "trigger": null, + "yearHigh": 300.7, + "yearLow": 147.5, + "prevClose": 159.86, + "premarketPrice": 160.69, + "chg": 0.83, + "pChg": 0.52, + "totalTradedVolume": 16627, + "totalBuyVolume": 104559, + "totalSellVolume": 125745 + }, + { + "symbol": "SIEMENS", + "ffmc": 578377728448.13, + "trigger": null, + "yearHigh": 8129.9, + "yearLow": 3945.25, + "prevClose": 6546, + "premarketPrice": 6580, + "chg": 34, + "pChg": 0.52, + "totalTradedVolume": 659, + "totalBuyVolume": 4874, + "totalSellVolume": 7391 + }, + { + "symbol": "BSOFT", + "ffmc": 93833191060.39, + "trigger": null, + "yearHigh": 861.85, + "yearLow": 536.3, + "prevClose": 576.05, + "premarketPrice": 578.95, + "chg": 2.9, + "pChg": 0.5, + "totalTradedVolume": 2023, + "totalBuyVolume": 19890, + "totalSellVolume": 29469 + }, + { + "symbol": "POLYCAB", + "ffmc": 336865749505.63, + "trigger": null, + "yearHigh": 7605, + "yearLow": 3801, + "prevClose": 7149.25, + "premarketPrice": 7185, + "chg": 35.75, + "pChg": 0.5, + "totalTradedVolume": 148, + "totalBuyVolume": 742, + "totalSellVolume": 4141 + }, + { + "symbol": "SHRIRAMFIN", + "ffmc": 815099140896.76, + "trigger": null, + "yearHigh": 3652.25, + "yearLow": 2016, + "prevClose": 2898.9, + "premarketPrice": 2912.8, + "chg": 13.9, + "pChg": 0.48, + "totalTradedVolume": 808, + "totalBuyVolume": 6004, + "totalSellVolume": 10167 + }, + { + "symbol": "ITC", + "ffmc": 4457466936364.49, + "trigger": null, + "yearHigh": 528.5, + "yearLow": 399.35, + "prevClose": 478.6, + "premarketPrice": 480.75, + "chg": 2.15, + "pChg": 0.45, + "totalTradedVolume": 37592, + "totalBuyVolume": 190464, + "totalSellVolume": 179700 + }, + { + "symbol": "TATAMOTORS", + "ffmc": 1598241542402.36, + "trigger": null, + "yearHigh": 1179, + "yearLow": 717.7, + "prevClose": 750.5, + "premarketPrice": 753.9, + "chg": 3.4, + "pChg": 0.45, + "totalTradedVolume": 35762, + "totalBuyVolume": 145443, + "totalSellVolume": 177780 + }, + { + "symbol": "RAMCOCEM", + "ffmc": 122663608061.31, + "trigger": null, + "yearHigh": 1060, + "yearLow": 700, + "prevClose": 965.75, + "premarketPrice": 970, + "chg": 4.25, + "pChg": 0.44, + "totalTradedVolume": 1218, + "totalBuyVolume": 11038, + "totalSellVolume": 5780 + }, + { + "symbol": "MANAPPURAM", + "ffmc": 99732540934.1, + "trigger": null, + "yearHigh": 230.4, + "yearLow": 138.35, + "prevClose": 183.62, + "premarketPrice": 184.4, + "chg": 0.78, + "pChg": 0.42, + "totalTradedVolume": 18165, + "totalBuyVolume": 97421, + "totalSellVolume": 278772 + }, + { + "symbol": "NHPC", + "ffmc": 252348102547.51, + "trigger": null, + "yearHigh": 118.4, + "yearLow": 63.5, + "prevClose": 80.33, + "premarketPrice": 80.67, + "chg": 0.34, + "pChg": 0.42, + "totalTradedVolume": 55161, + "totalBuyVolume": 172725, + "totalSellVolume": 423960 + }, + { + "symbol": "PFC", + "ffmc": 658723106088.89, + "trigger": null, + "yearHigh": 580, + "yearLow": 351.7, + "prevClose": 452.05, + "premarketPrice": 453.95, + "chg": 1.9, + "pChg": 0.42, + "totalTradedVolume": 9243, + "totalBuyVolume": 43252, + "totalSellVolume": 93656 + }, + { + "symbol": "CYIENT", + "ffmc": 161957256995.1, + "trigger": null, + "yearHigh": 2379.95, + "yearLow": 1651.5, + "prevClose": 1930.8, + "premarketPrice": 1938.8, + "chg": 8, + "pChg": 0.41, + "totalTradedVolume": 565, + "totalBuyVolume": 2346, + "totalSellVolume": 6488 + }, + { + "symbol": "ABCAPITAL", + "ffmc": 130065526406.38, + "trigger": null, + "yearHigh": 246.9, + "yearLow": 160.65, + "prevClose": 183.24, + "premarketPrice": 183.98, + "chg": 0.74, + "pChg": 0.4, + "totalTradedVolume": 7463, + "totalBuyVolume": 40515, + "totalSellVolume": 44554 + }, + { + "symbol": "ASIANPAINT", + "ffmc": 1027148083239.94, + "trigger": null, + "yearHigh": 3422.95, + "yearLow": 2256.5, + "prevClose": 2271.4, + "premarketPrice": 2280.25, + "chg": 8.85, + "pChg": 0.39, + "totalTradedVolume": 3359, + "totalBuyVolume": 25180, + "totalSellVolume": 15928 + }, + { + "symbol": "FEDERALBNK", + "ffmc": 481042710408.62, + "trigger": null, + "yearHigh": 217, + "yearLow": 139.4, + "prevClose": 196.73, + "premarketPrice": 197.5, + "chg": 0.77, + "pChg": 0.39, + "totalTradedVolume": 10324, + "totalBuyVolume": 103840, + "totalSellVolume": 65604 + }, + { + "symbol": "NESTLEIND", + "ffmc": 774999382750.8, + "trigger": null, + "yearHigh": 2778, + "yearLow": 2145.4, + "prevClose": 2165.6, + "premarketPrice": 2174, + "chg": 8.4, + "pChg": 0.39, + "totalTradedVolume": 1096, + "totalBuyVolume": 14566, + "totalSellVolume": 9651 + }, + { + "symbol": "GRANULES", + "ffmc": 84691723364.45, + "trigger": null, + "yearHigh": 721, + "yearLow": 389.35, + "prevClose": 585.85, + "premarketPrice": 588, + "chg": 2.15, + "pChg": 0.37, + "totalTradedVolume": 781, + "totalBuyVolume": 72673, + "totalSellVolume": 29844 + }, + { + "symbol": "DIXON", + "ffmc": 681361222918.49, + "trigger": null, + "yearHigh": 19148.9, + "yearLow": 5782.85, + "prevClose": 17972.3, + "premarketPrice": 18035, + "chg": 62.7, + "pChg": 0.35, + "totalTradedVolume": 329, + "totalBuyVolume": 1101, + "totalSellVolume": 6118 + }, + { + "symbol": "GRASIM", + "ffmc": 924784197359.19, + "trigger": null, + "yearHigh": 2877.75, + "yearLow": 2016.55, + "prevClose": 2480.3, + "premarketPrice": 2489, + "chg": 8.7, + "pChg": 0.35, + "totalTradedVolume": 221, + "totalBuyVolume": 1788, + "totalSellVolume": 5415 + }, + { + "symbol": "HEROMOTOCO", + "ffmc": 549087939855.76, + "trigger": null, + "yearHigh": 6246.25, + "yearLow": 3929.85, + "prevClose": 4237.95, + "premarketPrice": 4252.75, + "chg": 14.8, + "pChg": 0.35, + "totalTradedVolume": 1614, + "totalBuyVolume": 8357, + "totalSellVolume": 7314 + }, + { + "symbol": "IDFCFIRSTB", + "ffmc": 410839407770.37, + "trigger": null, + "yearHigh": 89.9, + "yearLow": 59.3, + "prevClose": 62.52, + "premarketPrice": 62.74, + "chg": 0.22, + "pChg": 0.35, + "totalTradedVolume": 61228, + "totalBuyVolume": 343294, + "totalSellVolume": 543081 + }, + { + "symbol": "ADANIENSOL", + "ffmc": 293458980958.98, + "trigger": null, + "yearHigh": 1348, + "yearLow": 588, + "prevClose": 805.95, + "premarketPrice": 808.55, + "chg": 2.6, + "pChg": 0.32, + "totalTradedVolume": 2118, + "totalBuyVolume": 8644, + "totalSellVolume": 32580 + }, + { + "symbol": "BHARTIARTL", + "ffmc": 4299468319099.19, + "trigger": null, + "yearHigh": 1779, + "yearLow": 998, + "prevClose": 1599.85, + "premarketPrice": 1605, + "chg": 5.15, + "pChg": 0.32, + "totalTradedVolume": 9445, + "totalBuyVolume": 202448, + "totalSellVolume": 39726 + }, + { + "symbol": "TRENT", + "ffmc": 1580692280914.29, + "trigger": null, + "yearHigh": 8345, + "yearLow": 2940.75, + "prevClose": 7118.3, + "premarketPrice": 7139.3, + "chg": 21, + "pChg": 0.3, + "totalTradedVolume": 620, + "totalBuyVolume": 2309, + "totalSellVolume": 9087 + }, + { + "symbol": "UNITDSPR", + "ffmc": 464861953589.21, + "trigger": null, + "yearHigh": 1647.5, + "yearLow": 1054.7, + "prevClose": 1579.4, + "premarketPrice": 1584.15, + "chg": 4.75, + "pChg": 0.3, + "totalTradedVolume": 394, + "totalBuyVolume": 3547, + "totalSellVolume": 21964 + }, + { + "symbol": "KALYANKJIL", + "ffmc": 224943436655.55, + "trigger": null, + "yearHigh": 786.25, + "yearLow": 321.95, + "prevClose": 721.65, + "premarketPrice": 723.75, + "chg": 2.1, + "pChg": 0.29, + "totalTradedVolume": 1621, + "totalBuyVolume": 11163, + "totalSellVolume": 90891 + }, + { + "symbol": "KOTAKBANK", + "ffmc": 2580859210979.83, + "trigger": null, + "yearHigh": 1942, + "yearLow": 1543.85, + "prevClose": 1759.9, + "premarketPrice": 1765, + "chg": 5.1, + "pChg": 0.29, + "totalTradedVolume": 1760, + "totalBuyVolume": 16218, + "totalSellVolume": 26439 + }, + { + "symbol": "RECLTD", + "ffmc": 633343665030.57, + "trigger": null, + "yearHigh": 654, + "yearLow": 406.2, + "prevClose": 507.45, + "premarketPrice": 508.9, + "chg": 1.45, + "pChg": 0.29, + "totalTradedVolume": 7217, + "totalBuyVolume": 47595, + "totalSellVolume": 71399 + }, + { + "symbol": "SBIN", + "ffmc": 3076861997603.82, + "trigger": null, + "yearHigh": 912, + "yearLow": 600.65, + "prevClose": 799.65, + "premarketPrice": 802, + "chg": 2.35, + "pChg": 0.29, + "totalTradedVolume": 22400, + "totalBuyVolume": 80544, + "totalSellVolume": 146574 + }, + { + "symbol": "EICHERMOT", + "ffmc": 669620058938.92, + "trigger": null, + "yearHigh": 5105, + "yearLow": 3562.45, + "prevClose": 4876.9, + "premarketPrice": 4890, + "chg": 13.1, + "pChg": 0.27, + "totalTradedVolume": 329, + "totalBuyVolume": 1672, + "totalSellVolume": 4496 + }, + { + "symbol": "PAYTM", + "ffmc": 341710483652.46, + "trigger": null, + "yearHigh": 1062.95, + "yearLow": 310, + "prevClose": 1014.25, + "premarketPrice": 1017, + "chg": 2.75, + "pChg": 0.27, + "totalTradedVolume": 7543, + "totalBuyVolume": 79550, + "totalSellVolume": 151618 + }, + { + "symbol": "TATACHEM", + "ffmc": 163291023696.8, + "trigger": null, + "yearHigh": 1349, + "yearLow": 933, + "prevClose": 1046.35, + "premarketPrice": 1049.2, + "chg": 2.85, + "pChg": 0.27, + "totalTradedVolume": 625, + "totalBuyVolume": 6936, + "totalSellVolume": 15107 + }, + { + "symbol": "GAIL", + "ffmc": 519980461875.51, + "trigger": null, + "yearHigh": 246.3, + "yearLow": 150.75, + "prevClose": 192.5, + "premarketPrice": 193, + "chg": 0.5, + "pChg": 0.26, + "totalTradedVolume": 14147, + "totalBuyVolume": 82337, + "totalSellVolume": 148037 + }, + { + "symbol": "PERSISTENT", + "ffmc": 677900997289.98, + "trigger": null, + "yearHigh": 6788.9, + "yearLow": 1790.09, + "prevClose": 6393.6, + "premarketPrice": 6410.05, + "chg": 16.45, + "pChg": 0.26, + "totalTradedVolume": 216, + "totalBuyVolume": 1420, + "totalSellVolume": 5249 + }, + { + "symbol": "ADANIPORTS", + "ffmc": 907287731333.43, + "trigger": null, + "yearHigh": 1621.4, + "yearLow": 995.65, + "prevClose": 1230.7, + "premarketPrice": 1233.75, + "chg": 3.05, + "pChg": 0.25, + "totalTradedVolume": 2085, + "totalBuyVolume": 12107, + "totalSellVolume": 24419 + }, + { + "symbol": "INDIAMART", + "ffmc": 68596310027.82, + "trigger": null, + "yearHigh": 3198.4, + "yearLow": 2199.9, + "prevClose": 2256.35, + "premarketPrice": 2262, + "chg": 5.65, + "pChg": 0.25, + "totalTradedVolume": 114, + "totalBuyVolume": 3544, + "totalSellVolume": 2407 + }, + { + "symbol": "AUROPHARMA", + "ffmc": 354440968390.69, + "trigger": null, + "yearHigh": 1592, + "yearLow": 958.5, + "prevClose": 1269.95, + "premarketPrice": 1273, + "chg": 3.05, + "pChg": 0.24, + "totalTradedVolume": 1674, + "totalBuyVolume": 9354, + "totalSellVolume": 10294 + }, + { + "symbol": "GMRAIRPORT", + "ffmc": 282566390240.86, + "trigger": null, + "yearHigh": 103.75, + "yearLow": 70.65, + "prevClose": 79.05, + "premarketPrice": 79.24, + "chg": 0.19, + "pChg": 0.24, + "totalTradedVolume": 29475, + "totalBuyVolume": 131154, + "totalSellVolume": 244821 + }, + { + "symbol": "UBL", + "ffmc": 152556583555.5, + "trigger": null, + "yearHigh": 2204.9, + "yearLow": 1647.25, + "prevClose": 2030.15, + "premarketPrice": 2035, + "chg": 4.85, + "pChg": 0.24, + "totalTradedVolume": 46, + "totalBuyVolume": 1909, + "totalSellVolume": 3132 + }, + { + "symbol": "BALKRISIND", + "ffmc": 229460710590.67, + "trigger": null, + "yearHigh": 3375, + "yearLow": 2193.8, + "prevClose": 2863.5, + "premarketPrice": 2869.95, + "chg": 6.45, + "pChg": 0.23, + "totalTradedVolume": 147, + "totalBuyVolume": 1134, + "totalSellVolume": 4750 + }, + { + "symbol": "CESC", + "ffmc": 116357067743.43, + "trigger": null, + "yearHigh": 212.49, + "yearLow": 109.75, + "prevClose": 184.59, + "premarketPrice": 185, + "chg": 0.41, + "pChg": 0.22, + "totalTradedVolume": 4426, + "totalBuyVolume": 32675, + "totalSellVolume": 87264 + }, + { + "symbol": "HFCL", + "ffmc": 101079057306.18, + "trigger": null, + "yearHigh": 171, + "yearLow": 80.25, + "prevClose": 112.99, + "premarketPrice": 113.24, + "chg": 0.25, + "pChg": 0.22, + "totalTradedVolume": 29221, + "totalBuyVolume": 176325, + "totalSellVolume": 555756 + }, + { + "symbol": "GLENMARK", + "ffmc": 238951718485.56, + "trigger": null, + "yearHigh": 1830.95, + "yearLow": 771, + "prevClose": 1585.95, + "premarketPrice": 1589.35, + "chg": 3.4, + "pChg": 0.21, + "totalTradedVolume": 880, + "totalBuyVolume": 2743, + "totalSellVolume": 14752 + }, + { + "symbol": "GODREJCP", + "ffmc": 401782571332.4, + "trigger": null, + "yearHigh": 1541.85, + "yearLow": 1060, + "prevClose": 1067.8, + "premarketPrice": 1069.95, + "chg": 2.15, + "pChg": 0.2, + "totalTradedVolume": 438, + "totalBuyVolume": 10676, + "totalSellVolume": 15033 + }, + { + "symbol": "PNB", + "ffmc": 313840831359.12, + "trigger": null, + "yearHigh": 142.9, + "yearLow": 89.05, + "prevClose": 101.44, + "premarketPrice": 101.64, + "chg": 0.2, + "pChg": 0.2, + "totalTradedVolume": 55910, + "totalBuyVolume": 262853, + "totalSellVolume": 461502 + }, + { + "symbol": "TECHM", + "ffmc": 1083384193538.35, + "trigger": null, + "yearHigh": 1807.7, + "yearLow": 1162.95, + "prevClose": 1711.65, + "premarketPrice": 1715, + "chg": 3.35, + "pChg": 0.2, + "totalTradedVolume": 1393, + "totalBuyVolume": 5114, + "totalSellVolume": 8696 + }, + { + "symbol": "BERGEPAINT", + "ffmc": 125607515590.38, + "trigger": null, + "yearHigh": 629.5, + "yearLow": 437.75, + "prevClose": 442.3, + "premarketPrice": 443.15, + "chg": 0.85, + "pChg": 0.19, + "totalTradedVolume": 565, + "totalBuyVolume": 14207, + "totalSellVolume": 9663 + }, + { + "symbol": "HINDCOPPER", + "ffmc": 83604811334.47, + "trigger": null, + "yearHigh": 415.8, + "yearLow": 229, + "prevClose": 256.5, + "premarketPrice": 257, + "chg": 0.5, + "pChg": 0.19, + "totalTradedVolume": 12905, + "totalBuyVolume": 67433, + "totalSellVolume": 225300 + }, + { + "symbol": "NMDC", + "ffmc": 239376991969.1, + "trigger": null, + "yearHigh": 95.45, + "yearLow": 63.45, + "prevClose": 69.32, + "premarketPrice": 69.45, + "chg": 0.13, + "pChg": 0.19, + "totalTradedVolume": 93354, + "totalBuyVolume": 372171, + "totalSellVolume": 496970 + }, + { + "symbol": "PIDILITIND", + "ffmc": 445739257199.75, + "trigger": null, + "yearHigh": 3415, + "yearLow": 2488.1, + "prevClose": 2914.4, + "premarketPrice": 2919.95, + "chg": 5.55, + "pChg": 0.19, + "totalTradedVolume": 476, + "totalBuyVolume": 2383, + "totalSellVolume": 2371 + }, + { + "symbol": "CIPLA", + "ffmc": 826471496712.24, + "trigger": null, + "yearHigh": 1702.05, + "yearLow": 1236.7, + "prevClose": 1506.6, + "premarketPrice": 1509, + "chg": 2.4, + "pChg": 0.16, + "totalTradedVolume": 4464, + "totalBuyVolume": 6991, + "totalSellVolume": 29926 + }, + { + "symbol": "LTTS", + "ffmc": 128319596022.38, + "trigger": null, + "yearHigh": 6000, + "yearLow": 4200, + "prevClose": 4692.3, + "premarketPrice": 4700, + "chg": 7.7, + "pChg": 0.16, + "totalTradedVolume": 183, + "totalBuyVolume": 2258, + "totalSellVolume": 2002 + }, + { + "symbol": "ANGELONE", + "ffmc": 166928584106.08, + "trigger": null, + "yearHigh": 3896, + "yearLow": 2025, + "prevClose": 2884.75, + "premarketPrice": 2889.05, + "chg": 4.3, + "pChg": 0.15, + "totalTradedVolume": 1196, + "totalBuyVolume": 7913, + "totalSellVolume": 12405 + }, + { + "symbol": "OIL", + "ffmc": 230792329746.82, + "trigger": null, + "yearHigh": 767.9, + "yearLow": 241.6, + "prevClose": 425.15, + "premarketPrice": 425.8, + "chg": 0.65, + "pChg": 0.15, + "totalTradedVolume": 4203, + "totalBuyVolume": 18038, + "totalSellVolume": 28432 + }, + { + "symbol": "TATAPOWER", + "ffmc": 673649683817.95, + "trigger": null, + "yearHigh": 494.85, + "yearLow": 319.6, + "prevClose": 399, + "premarketPrice": 399.6, + "chg": 0.6, + "pChg": 0.15, + "totalTradedVolume": 18083, + "totalBuyVolume": 134619, + "totalSellVolume": 147391 + }, + { + "symbol": "HAL", + "ffmc": 804585560215.5, + "trigger": null, + "yearHigh": 5674.75, + "yearLow": 2748.45, + "prevClose": 4233.35, + "premarketPrice": 4239, + "chg": 5.65, + "pChg": 0.13, + "totalTradedVolume": 2595, + "totalBuyVolume": 11293, + "totalSellVolume": 31124 + }, + { + "symbol": "CONCOR", + "ffmc": 215079883666.67, + "trigger": null, + "yearHigh": 1180, + "yearLow": 757.25, + "prevClose": 784.15, + "premarketPrice": 785.1, + "chg": 0.95, + "pChg": 0.12, + "totalTradedVolume": 1141, + "totalBuyVolume": 10647, + "totalSellVolume": 11165 + }, + { + "symbol": "BHEL", + "ffmc": 302383954248.01, + "trigger": null, + "yearHigh": 335.35, + "yearLow": 180, + "prevClose": 235.4, + "premarketPrice": 235.65, + "chg": 0.25, + "pChg": 0.11, + "totalTradedVolume": 15769, + "totalBuyVolume": 66543, + "totalSellVolume": 194336 + }, + { + "symbol": "OFSS", + "ffmc": 297387443050.42, + "trigger": null, + "yearHigh": 12983.55, + "yearLow": 4157.5, + "prevClose": 12646.6, + "premarketPrice": 12659.95, + "chg": 13.35, + "pChg": 0.11, + "totalTradedVolume": 260, + "totalBuyVolume": 545, + "totalSellVolume": 2843 + }, + { + "symbol": "ULTRACEMCO", + "ffmc": 1301529408962.3, + "trigger": null, + "yearHigh": 12145.35, + "yearLow": 9250, + "prevClose": 11406.55, + "premarketPrice": 11419.45, + "chg": 12.9, + "pChg": 0.11, + "totalTradedVolume": 181, + "totalBuyVolume": 1277, + "totalSellVolume": 1023 + }, + { + "symbol": "CANFINHOME", + "ffmc": 63168931539.44, + "trigger": null, + "yearHigh": 951.75, + "yearLow": 680, + "prevClose": 750.55, + "premarketPrice": 751.25, + "chg": 0.7, + "pChg": 0.09, + "totalTradedVolume": 3083, + "totalBuyVolume": 12450, + "totalSellVolume": 16413 + }, + { + "symbol": "MGL", + "ffmc": 70086553462.12, + "trigger": null, + "yearHigh": 1988, + "yearLow": 1075.25, + "prevClose": 1238.3, + "premarketPrice": 1239.4, + "chg": 1.1, + "pChg": 0.09, + "totalTradedVolume": 293, + "totalBuyVolume": 14278, + "totalSellVolume": 17561 + }, + { + "symbol": "CDSL", + "ffmc": 316047447370.6, + "trigger": null, + "yearHigh": 1989.8, + "yearLow": 811, + "prevClose": 1777.55, + "premarketPrice": 1779, + "chg": 1.45, + "pChg": 0.08, + "totalTradedVolume": 14304, + "totalBuyVolume": 24653, + "totalSellVolume": 57188 + }, + { + "symbol": "ZYDUSLIFE", + "ffmc": 242889783374.72, + "trigger": null, + "yearHigh": 1324.3, + "yearLow": 666.75, + "prevClose": 972.4, + "premarketPrice": 973.2, + "chg": 0.8, + "pChg": 0.08, + "totalTradedVolume": 441, + "totalBuyVolume": 7751, + "totalSellVolume": 14921 + }, + { + "symbol": "GNFC", + "ffmc": 47653064732.17, + "trigger": null, + "yearHigh": 814.9, + "yearLow": 524, + "prevClose": 571.55, + "premarketPrice": 571.95, + "chg": 0.4, + "pChg": 0.07, + "totalTradedVolume": 515, + "totalBuyVolume": 7981, + "totalSellVolume": 9338 + }, + { + "symbol": "AARTIIND", + "ffmc": 82921277098.28, + "trigger": null, + "yearHigh": 769.25, + "yearLow": 402.1, + "prevClose": 411.25, + "premarketPrice": 411.45, + "chg": 0.2, + "pChg": 0.05, + "totalTradedVolume": 1571, + "totalBuyVolume": 35390, + "totalSellVolume": 36153 + }, + { + "symbol": "DMART", + "ffmc": 527142309073.56, + "trigger": null, + "yearHigh": 5484.85, + "yearLow": 3399, + "prevClose": 3568.35, + "premarketPrice": 3570, + "chg": 1.65, + "pChg": 0.05, + "totalTradedVolume": 756, + "totalBuyVolume": 6593, + "totalSellVolume": 11421 + }, + { + "symbol": "JUBLFOOD", + "ffmc": 269533963203.12, + "trigger": null, + "yearHigh": 724.9, + "yearLow": 421.05, + "prevClose": 708.1, + "premarketPrice": 708.45, + "chg": 0.35, + "pChg": 0.05, + "totalTradedVolume": 3540, + "totalBuyVolume": 15840, + "totalSellVolume": 55773 + }, + { + "symbol": "POONAWALLA", + "ffmc": 92370603558.03, + "trigger": null, + "yearHigh": 519.7, + "yearLow": 270.05, + "prevClose": 320.65, + "premarketPrice": 320.8, + "chg": 0.15, + "pChg": 0.05, + "totalTradedVolume": 3507, + "totalBuyVolume": 28788, + "totalSellVolume": 68061 + }, + { + "symbol": "YESBANK", + "ffmc": 372763467133.43, + "trigger": null, + "yearHigh": 32.85, + "yearLow": 19.02, + "prevClose": 19.82, + "premarketPrice": 19.83, + "chg": 0.01, + "pChg": 0.05, + "totalTradedVolume": 259089, + "totalBuyVolume": 1364834, + "totalSellVolume": 2725181 + }, + { + "symbol": "BAJAJFINSV", + "ffmc": 861114454209.78, + "trigger": null, + "yearHigh": 2029.9, + "yearLow": 1419.05, + "prevClose": 1579.3, + "premarketPrice": 1580, + "chg": 0.7, + "pChg": 0.04, + "totalTradedVolume": 809, + "totalBuyVolume": 5515, + "totalSellVolume": 11123 + }, + { + "symbol": "LTIM", + "ffmc": 524157307960.18, + "trigger": null, + "yearHigh": 6767.95, + "yearLow": 4513.55, + "prevClose": 5678, + "premarketPrice": 5680.45, + "chg": 2.45, + "pChg": 0.04, + "totalTradedVolume": 370, + "totalBuyVolume": 1841, + "totalSellVolume": 12339 + }, + { + "symbol": "MPHASIS", + "ffmc": 326609777197.81, + "trigger": null, + "yearHigh": 3237.95, + "yearLow": 2187, + "prevClose": 2883.95, + "premarketPrice": 2885.05, + "chg": 1.1, + "pChg": 0.04, + "totalTradedVolume": 326, + "totalBuyVolume": 1098, + "totalSellVolume": 2367 + }, + { + "symbol": "SJVN", + "ffmc": 76609799165.82, + "trigger": null, + "yearHigh": 170.5, + "yearLow": 88.85, + "prevClose": 107.46, + "premarketPrice": 107.5, + "chg": 0.04, + "pChg": 0.04, + "totalTradedVolume": 5382, + "totalBuyVolume": 71428, + "totalSellVolume": 219364 + }, + { + "symbol": "SUNPHARMA", + "ffmc": 2010002063828.16, + "trigger": null, + "yearHigh": 1960.35, + "yearLow": 1241.25, + "prevClose": 1861.25, + "premarketPrice": 1862.05, + "chg": 0.8, + "pChg": 0.04, + "totalTradedVolume": 2140, + "totalBuyVolume": 5695, + "totalSellVolume": 13789 + }, + { + "symbol": "IGL", + "ffmc": 136478380935.11, + "trigger": null, + "yearHigh": 570.35, + "yearLow": 306.1, + "prevClose": 390.1, + "premarketPrice": 390.2, + "chg": 0.1, + "pChg": 0.03, + "totalTradedVolume": 2410, + "totalBuyVolume": 32640, + "totalSellVolume": 54266 + }, + { + "symbol": "KPITTECH", + "ffmc": 237552319575.84, + "trigger": null, + "yearHigh": 1928.7, + "yearLow": 1283.25, + "prevClose": 1460.6, + "premarketPrice": 1461, + "chg": 0.4, + "pChg": 0.03, + "totalTradedVolume": 1081, + "totalBuyVolume": 6249, + "totalSellVolume": 20638 + }, + { + "symbol": "ESCORTS", + "ffmc": 109446996331.6, + "trigger": null, + "yearHigh": 4420, + "yearLow": 2648.4, + "prevClose": 3258.4, + "premarketPrice": 3259.1, + "chg": 0.7, + "pChg": 0.02, + "totalTradedVolume": 810, + "totalBuyVolume": 3218, + "totalSellVolume": 12599 + }, + { + "symbol": "JIOFIN", + "ffmc": 999909022490.86, + "trigger": null, + "yearHigh": 394.7, + "yearLow": 232, + "prevClose": 304.95, + "premarketPrice": 305, + "chg": 0.05, + "pChg": 0.02, + "totalTradedVolume": 26677, + "totalBuyVolume": 197027, + "totalSellVolume": 313657 + }, + { + "symbol": "LTF", + "ffmc": 110511009426.84, + "trigger": null, + "yearHigh": 194.25, + "yearLow": 134.1, + "prevClose": 137.97, + "premarketPrice": 138, + "chg": 0.03, + "pChg": 0.02, + "totalTradedVolume": 6791, + "totalBuyVolume": 92920, + "totalSellVolume": 86428 + }, + { + "symbol": "PIIND", + "ffmc": 302886351523.36, + "trigger": null, + "yearHigh": 4804.05, + "yearLow": 3220, + "prevClose": 3744.25, + "premarketPrice": 3744.9, + "chg": 0.65, + "pChg": 0.02, + "totalTradedVolume": 513, + "totalBuyVolume": 2565, + "totalSellVolume": 2215 + }, + { + "symbol": "SONACOMS", + "ffmc": 268249428095.46, + "trigger": null, + "yearHigh": 768.65, + "yearLow": 562.1, + "prevClose": 600.35, + "premarketPrice": 600.5, + "chg": 0.15, + "pChg": 0.02, + "totalTradedVolume": 1780, + "totalBuyVolume": 14632, + "totalSellVolume": 22799 + }, + { + "symbol": "SRF", + "ffmc": 327082373703.01, + "trigger": null, + "yearHigh": 2693.95, + "yearLow": 2089.1, + "prevClose": 2264.45, + "premarketPrice": 2265, + "chg": 0.55, + "pChg": 0.02, + "totalTradedVolume": 53, + "totalBuyVolume": 2270, + "totalSellVolume": 5220 + }, + { + "symbol": "SYNGENE", + "ffmc": 153229251187.48, + "trigger": null, + "yearHigh": 960.6, + "yearLow": 607.65, + "prevClose": 850.35, + "premarketPrice": 850.5, + "chg": 0.15, + "pChg": 0.02, + "totalTradedVolume": 138, + "totalBuyVolume": 2286, + "totalSellVolume": 4359 + }, + { + "symbol": "TITAN", + "ffmc": 1367646759906.12, + "trigger": null, + "yearHigh": 3886.95, + "yearLow": 3055.65, + "prevClose": 3309.2, + "premarketPrice": 3309.95, + "chg": 0.75, + "pChg": 0.02, + "totalTradedVolume": 526, + "totalBuyVolume": 4410, + "totalSellVolume": 10379 + }, + { + "symbol": "AMBUJACEM", + "ffmc": 330299509727.17, + "trigger": null, + "yearHigh": 706.95, + "yearLow": 453.05, + "prevClose": 547.95, + "premarketPrice": 548, + "chg": 0.05, + "pChg": 0.01, + "totalTradedVolume": 1518, + "totalBuyVolume": 19222, + "totalSellVolume": 19399 + }, + { + "symbol": "CGPOWER", + "ffmc": 475419317382, + "trigger": null, + "yearHigh": 874.7, + "yearLow": 414.3, + "prevClose": 748.25, + "premarketPrice": 748.3, + "chg": 0.05, + "pChg": 0.01, + "totalTradedVolume": 5081, + "totalBuyVolume": 14470, + "totalSellVolume": 66801 + }, + { + "symbol": "DRREDDY", + "ffmc": 847692208817.27, + "trigger": null, + "yearHigh": 1421.49, + "yearLow": 1104.13, + "prevClose": 1389.45, + "premarketPrice": 1389.6, + "chg": 0.15, + "pChg": 0.01, + "totalTradedVolume": 5777, + "totalBuyVolume": 18114, + "totalSellVolume": 35158 + }, + { + "symbol": "HINDUNILVR", + "ffmc": 2084203274844.85, + "trigger": null, + "yearHigh": 3035, + "yearLow": 2172.05, + "prevClose": 2341.25, + "premarketPrice": 2341.5, + "chg": 0.25, + "pChg": 0.01, + "totalTradedVolume": 1669, + "totalBuyVolume": 17652, + "totalSellVolume": 12898 + }, + { + "symbol": "IEX", + "ffmc": 136211350111.17, + "trigger": null, + "yearHigh": 244.4, + "yearLow": 130.2, + "prevClose": 180.62, + "premarketPrice": 180.63, + "chg": 0.01, + "pChg": 0.01, + "totalTradedVolume": 7069, + "totalBuyVolume": 34763, + "totalSellVolume": 87940 + }, + { + "symbol": "SBICARD", + "ffmc": 202023077002.56, + "trigger": null, + "yearHigh": 817.4, + "yearLow": 647.95, + "prevClose": 675.3, + "premarketPrice": 675.35, + "chg": 0.05, + "pChg": 0.01, + "totalTradedVolume": 1885, + "totalBuyVolume": 15756, + "totalSellVolume": 10598 + }, + { + "symbol": "VEDL", + "ffmc": 763584661683.54, + "trigger": null, + "yearHigh": 526.95, + "yearLow": 249.5, + "prevClose": 451.1, + "premarketPrice": 451.15, + "chg": 0.05, + "pChg": 0.01, + "totalTradedVolume": 11863, + "totalBuyVolume": 79137, + "totalSellVolume": 185964 + }, + { + "symbol": "ACC", + "ffmc": 140252159330.86, + "trigger": null, + "yearHigh": 2844, + "yearLow": 1868.2, + "prevClose": 2065.6, + "premarketPrice": 2065.6, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 351, + "totalBuyVolume": 3007, + "totalSellVolume": 2338 + }, + { + "symbol": "ASHOKLEY", + "ffmc": 315332064190.88, + "trigger": null, + "yearHigh": 264.65, + "yearLow": 157.55, + "prevClose": 220.51, + "premarketPrice": 220.5, + "chg": -0.01, + "pChg": 0, + "totalTradedVolume": 4107, + "totalBuyVolume": 37000, + "totalSellVolume": 98425 + }, + { + "symbol": "BAJAJ-AUTO", + "ffmc": 991794205153.26, + "trigger": null, + "yearHigh": 12774, + "yearLow": 6465.2, + "prevClose": 8928.3, + "premarketPrice": 8928, + "chg": -0.3, + "pChg": 0, + "totalTradedVolume": 593, + "totalBuyVolume": 1494, + "totalSellVolume": 3855 + }, + { + "symbol": "BANDHANBNK", + "ffmc": 133221148891.5, + "trigger": null, + "yearHigh": 263.1, + "yearLow": 157.01, + "prevClose": 160.79, + "premarketPrice": 160.79, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 23716, + "totalBuyVolume": 116787, + "totalSellVolume": 251770 + }, + { + "symbol": "BATAINDIA", + "ffmc": 88068388702.13, + "trigger": null, + "yearHigh": 1660.25, + "yearLow": 1269, + "prevClose": 1381.3, + "premarketPrice": 1381.3, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 895, + "totalBuyVolume": 4110, + "totalSellVolume": 8357 + }, + { + "symbol": "BEL", + "ffmc": 1043671170459.04, + "trigger": null, + "yearHigh": 340.5, + "yearLow": 171.75, + "prevClose": 292.05, + "premarketPrice": 292.05, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 38153, + "totalBuyVolume": 113612, + "totalSellVolume": 443478 + }, + { + "symbol": "BPCL", + "ffmc": 567515894106.21, + "trigger": null, + "yearHigh": 376, + "yearLow": 222.55, + "prevClose": 293.55, + "premarketPrice": 293.55, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 5883, + "totalBuyVolume": 73119, + "totalSellVolume": 174268 + }, + { + "symbol": "CANBK", + "ffmc": 338057369511.06, + "trigger": null, + "yearHigh": 128.9, + "yearLow": 85.3, + "prevClose": 100.36, + "premarketPrice": 100.36, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 57409, + "totalBuyVolume": 200784, + "totalSellVolume": 503497 + }, + { + "symbol": "CHAMBLFERT", + "ffmc": 75396702830.06, + "trigger": null, + "yearHigh": 574.35, + "yearLow": 332.05, + "prevClose": 499.6, + "premarketPrice": 499.6, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 1819, + "totalBuyVolume": 6714, + "totalSellVolume": 16237 + }, + { + "symbol": "COALINDIA", + "ffmc": 863460235659.67, + "trigger": null, + "yearHigh": 543.55, + "yearLow": 362.4, + "prevClose": 380.5, + "premarketPrice": 380.5, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 23921, + "totalBuyVolume": 115184, + "totalSellVolume": 187694 + }, + { + "symbol": "CROMPTON", + "ffmc": 254670522702.72, + "trigger": null, + "yearHigh": 484, + "yearLow": 261.25, + "prevClose": 396.35, + "premarketPrice": 396.35, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 1054, + "totalBuyVolume": 4217, + "totalSellVolume": 10957 + }, + { + "symbol": "CUB", + "ffmc": 124164892830.55, + "trigger": null, + "yearHigh": 187.9, + "yearLow": 125.4, + "prevClose": 172.65, + "premarketPrice": 172.65, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 3190, + "totalBuyVolume": 16232, + "totalSellVolume": 144613 + }, + { + "symbol": "DEEPAKNTR", + "ffmc": 177079137225.62, + "trigger": null, + "yearHigh": 3169, + "yearLow": 2021, + "prevClose": 2579.75, + "premarketPrice": 2579.75, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 168, + "totalBuyVolume": 1487, + "totalSellVolume": 1837 + }, + { + "symbol": "DIVISLAB", + "ffmc": 745534413596.68, + "trigger": null, + "yearHigh": 6285.45, + "yearLow": 3350, + "prevClose": 5881.05, + "premarketPrice": 5881.05, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 298, + "totalBuyVolume": 1793, + "totalSellVolume": 3494 + }, + { + "symbol": "EXIDEIND", + "ffmc": 189783495000, + "trigger": null, + "yearHigh": 620.35, + "yearLow": 290.35, + "prevClose": 418.4, + "premarketPrice": 418.4, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 3390, + "totalBuyVolume": 20397, + "totalSellVolume": 39218 + }, + { + "symbol": "ICICIGI", + "ffmc": 434566823043.97, + "trigger": null, + "yearHigh": 2301.9, + "yearLow": 1353.5, + "prevClose": 1832.45, + "premarketPrice": 1832.45, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 108, + "totalBuyVolume": 626, + "totalSellVolume": 1086 + }, + { + "symbol": "ICICIPRULI", + "ffmc": 253874819394.54, + "trigger": null, + "yearHigh": 796.8, + "yearLow": 463.45, + "prevClose": 656.15, + "premarketPrice": 656.15, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 499, + "totalBuyVolume": 2684, + "totalSellVolume": 8451 + }, + { + "symbol": "INDHOTEL", + "ffmc": 753468525933.76, + "trigger": null, + "yearHigh": 886.2, + "yearLow": 429.25, + "prevClose": 860.6, + "premarketPrice": 860.6, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 2413, + "totalBuyVolume": 10612, + "totalSellVolume": 22265 + }, + { + "symbol": "IOC", + "ffmc": 510293379144.75, + "trigger": null, + "yearHigh": 196.8, + "yearLow": 125.45, + "prevClose": 136.25, + "premarketPrice": 136.25, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 37957, + "totalBuyVolume": 271650, + "totalSellVolume": 326155 + }, + { + "symbol": "IRCTC", + "ffmc": 235063873600, + "trigger": null, + "yearHigh": 1138.9, + "yearLow": 777.2, + "prevClose": 779.25, + "premarketPrice": 779.25, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 4265, + "totalBuyVolume": 16148, + "totalSellVolume": 18414 + }, + { + "symbol": "JKCEMENT", + "ffmc": 190506010518.91, + "trigger": null, + "yearHigh": 4895.5, + "yearLow": 3642, + "prevClose": 4572.45, + "premarketPrice": 4572.45, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 8, + "totalBuyVolume": 66, + "totalSellVolume": 2130 + }, + { + "symbol": "JSWSTEEL", + "ffmc": 875390039556.63, + "trigger": null, + "yearHigh": 1063, + "yearLow": 761.75, + "prevClose": 913.3, + "premarketPrice": 913.3, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 3285, + "totalBuyVolume": 9032, + "totalSellVolume": 27500 + }, + { + "symbol": "LICHSGFIN", + "ffmc": 178992703972.4, + "trigger": null, + "yearHigh": 826.75, + "yearLow": 515.45, + "prevClose": 596.6, + "premarketPrice": 596.6, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 948, + "totalBuyVolume": 16439, + "totalSellVolume": 27550 + }, + { + "symbol": "LUPIN", + "ffmc": 536612949018.26, + "trigger": null, + "yearHigh": 2312, + "yearLow": 1280.7, + "prevClose": 2227.8, + "premarketPrice": 2227.8, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 7922, + "totalBuyVolume": 5281, + "totalSellVolume": 22754 + }, + { + "symbol": "M&MFIN", + "ffmc": 157511561503.92, + "trigger": null, + "yearHigh": 343, + "yearLow": 246.2, + "prevClose": 267, + "premarketPrice": 267, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 1930, + "totalBuyVolume": 13932, + "totalSellVolume": 34677 + }, + { + "symbol": "MARICO", + "ffmc": 333080905196.04, + "trigger": null, + "yearHigh": 719.85, + "yearLow": 486.3, + "prevClose": 632.6, + "premarketPrice": 632.6, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 540, + "totalBuyVolume": 9607, + "totalSellVolume": 10327 + }, + { + "symbol": "MARUTI", + "ffmc": 1440114038687.49, + "trigger": null, + "yearHigh": 13680, + "yearLow": 9737.65, + "prevClose": 10941.05, + "premarketPrice": 10941.05, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 333, + "totalBuyVolume": 1676, + "totalSellVolume": 6330 + }, + { + "symbol": "MCX", + "ffmc": 322864675455.85, + "trigger": null, + "yearHigh": 7048.6, + "yearLow": 2917.85, + "prevClose": 6341.2, + "premarketPrice": 6341.2, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 114, + "totalBuyVolume": 1389, + "totalSellVolume": 2206 + }, + { + "symbol": "METROPOLIS", + "ffmc": 53318965702.03, + "trigger": null, + "yearHigh": 2318.3, + "yearLow": 1450, + "prevClose": 2058.15, + "premarketPrice": 2058.15, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 58, + "totalBuyVolume": 503, + "totalSellVolume": 1207 + }, + { + "symbol": "MFSL", + "ffmc": 271427213908.14, + "trigger": null, + "yearHigh": 1306.45, + "yearLow": 854.25, + "prevClose": 1106.1, + "premarketPrice": 1106.1, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 321, + "totalBuyVolume": 1082, + "totalSellVolume": 681 + }, + { + "symbol": "MOTHERSON", + "ffmc": 437545598676.59, + "trigger": null, + "yearHigh": 216.99, + "yearLow": 95.3, + "prevClose": 157.02, + "premarketPrice": 157.02, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 8892, + "totalBuyVolume": 44365, + "totalSellVolume": 185026 + }, + { + "symbol": "NATIONALUM", + "ffmc": 191038817196.48, + "trigger": null, + "yearHigh": 262.99, + "yearLow": 115.7, + "prevClose": 213.59, + "premarketPrice": 213.59, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 26494, + "totalBuyVolume": 48465, + "totalSellVolume": 162373 + }, + { + "symbol": "NAUKRI", + "ffmc": 671036303922.52, + "trigger": null, + "yearHigh": 8947.45, + "yearLow": 4862.2, + "prevClose": 8637.45, + "premarketPrice": 8637.45, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 41, + "totalBuyVolume": 505, + "totalSellVolume": 1254 + }, + { + "symbol": "NAVINFLUOR", + "ffmc": 114445216552.59, + "trigger": null, + "yearHigh": 3897.4, + "yearLow": 2875.95, + "prevClose": 3312.65, + "premarketPrice": 3312.65, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 60, + "totalBuyVolume": 770, + "totalSellVolume": 1691 + }, + { + "symbol": "NTPC", + "ffmc": 1588433994323.27, + "trigger": null, + "yearHigh": 448.45, + "yearLow": 296.55, + "prevClose": 335, + "premarketPrice": 335, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 12593, + "totalBuyVolume": 68354, + "totalSellVolume": 95814 + }, + { + "symbol": "NYKAA", + "ffmc": 217136864148.96, + "trigger": null, + "yearHigh": 229.8, + "yearLow": 139.8, + "prevClose": 159.66, + "premarketPrice": 159.66, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 4254, + "totalBuyVolume": 43247, + "totalSellVolume": 95809 + }, + { + "symbol": "PEL", + "ffmc": 132637729761.55, + "trigger": null, + "yearHigh": 1275, + "yearLow": 736.6, + "prevClose": 1107, + "premarketPrice": 1107, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 274, + "totalBuyVolume": 4363, + "totalSellVolume": 7880 + }, + { + "symbol": "PVRINOX", + "ffmc": 94826593861.18, + "trigger": null, + "yearHigh": 1748, + "yearLow": 1204.2, + "prevClose": 1338.65, + "premarketPrice": 1338.65, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 931, + "totalBuyVolume": 3815, + "totalSellVolume": 8660 + }, + { + "symbol": "TATACOMM", + "ffmc": 200315008500.75, + "trigger": null, + "yearHigh": 2175, + "yearLow": 1585.55, + "prevClose": 1713.6, + "premarketPrice": 1713.6, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 25, + "totalBuyVolume": 1732, + "totalSellVolume": 6428 + }, + { + "symbol": "TATACONSUM", + "ffmc": 589136925146.81, + "trigger": null, + "yearHigh": 1256.44, + "yearLow": 882.9, + "prevClose": 907.95, + "premarketPrice": 907.95, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 1203, + "totalBuyVolume": 9090, + "totalSellVolume": 21134 + }, + { + "symbol": "TATASTEEL", + "ffmc": 1150052124773.43, + "trigger": null, + "yearHigh": 184.6, + "yearLow": 128.2, + "prevClose": 138.91, + "premarketPrice": 138.91, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 80681, + "totalBuyVolume": 277628, + "totalSellVolume": 451699 + }, + { + "symbol": "TORNTPHARM", + "ffmc": 314745336356.73, + "trigger": null, + "yearHigh": 3590.7, + "yearLow": 2248.05, + "prevClose": 3405.1, + "premarketPrice": 3405, + "chg": -0.1, + "pChg": 0, + "totalTradedVolume": 47, + "totalBuyVolume": 214, + "totalSellVolume": 970 + }, + { + "symbol": "WIPRO", + "ffmc": 874232334391.88, + "trigger": null, + "yearHigh": 320, + "yearLow": 208.5, + "prevClose": 309.1, + "premarketPrice": 309.1, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 20593, + "totalBuyVolume": 38205, + "totalSellVolume": 155155 + }, + { + "symbol": "ZOMATO", + "ffmc": 1844433350576.75, + "trigger": null, + "yearHigh": 304.7, + "yearLow": 120.6, + "prevClose": 271.25, + "premarketPrice": 271.25, + "chg": 0, + "pChg": 0, + "totalTradedVolume": 85002, + "totalBuyVolume": 187744, + "totalSellVolume": 562370 + }, + { + "symbol": "COLPAL", + "ffmc": 360565856532.22, + "trigger": null, + "yearHigh": 3890, + "yearLow": 2378.9, + "prevClose": 2726.45, + "premarketPrice": 2726.25, + "chg": -0.2, + "pChg": -0.01, + "totalTradedVolume": 193, + "totalBuyVolume": 3259, + "totalSellVolume": 2433 + }, + { + "symbol": "INDUSINDBK", + "ffmc": 629304917263.53, + "trigger": null, + "yearHigh": 1694.5, + "yearLow": 926.45, + "prevClose": 953.4, + "premarketPrice": 953.3, + "chg": -0.1, + "pChg": -0.01, + "totalTradedVolume": 8477, + "totalBuyVolume": 28890, + "totalSellVolume": 81096 + }, + { + "symbol": "JSL", + "ffmc": 239035521026.33, + "trigger": null, + "yearHigh": 848, + "yearLow": 513.5, + "prevClose": 736, + "premarketPrice": 735.95, + "chg": -0.05, + "pChg": -0.01, + "totalTradedVolume": 398, + "totalBuyVolume": 3732, + "totalSellVolume": 9914 + }, + { + "symbol": "LT", + "ffmc": 4244970120577.13, + "trigger": null, + "yearHigh": 3963.5, + "yearLow": 3175.05, + "prevClose": 3608.1, + "premarketPrice": 3607.9, + "chg": -0.2, + "pChg": -0.01, + "totalTradedVolume": 3642, + "totalBuyVolume": 9910, + "totalSellVolume": 18248 + }, + { + "symbol": "UPL", + "ffmc": 284524524819.33, + "trigger": null, + "yearHigh": 600.96, + "yearLow": 430.58, + "prevClose": 502.05, + "premarketPrice": 502, + "chg": -0.05, + "pChg": -0.01, + "totalTradedVolume": 2324, + "totalBuyVolume": 16706, + "totalSellVolume": 32214 + }, + { + "symbol": "DALBHARAT", + "ffmc": 138311798961.64, + "trigger": null, + "yearHigh": 2428.6, + "yearLow": 1651.4, + "prevClose": 1740.4, + "premarketPrice": 1740, + "chg": -0.4, + "pChg": -0.02, + "totalTradedVolume": 75, + "totalBuyVolume": 2438, + "totalSellVolume": 1906 + }, + { + "symbol": "GODREJPROP", + "ffmc": 354028010032.51, + "trigger": null, + "yearHigh": 3402.7, + "yearLow": 1981.05, + "prevClose": 2830.7, + "premarketPrice": 2830, + "chg": -0.7, + "pChg": -0.02, + "totalTradedVolume": 321, + "totalBuyVolume": 2615, + "totalSellVolume": 7461 + }, + { + "symbol": "NCC", + "ffmc": 136674369821.41, + "trigger": null, + "yearHigh": 364.5, + "yearLow": 164.35, + "prevClose": 279.15, + "premarketPrice": 279.1, + "chg": -0.05, + "pChg": -0.02, + "totalTradedVolume": 6256, + "totalBuyVolume": 28983, + "totalSellVolume": 84445 + }, + { + "symbol": "UNIONBANK", + "ffmc": 227105953845.59, + "trigger": null, + "yearHigh": 172.5, + "yearLow": 106.68, + "prevClose": 117.87, + "premarketPrice": 117.85, + "chg": -0.02, + "pChg": -0.02, + "totalTradedVolume": 11602, + "totalBuyVolume": 73988, + "totalSellVolume": 155549 + }, + { + "symbol": "DABUR", + "ffmc": 298797494551.89, + "trigger": null, + "yearHigh": 672, + "yearLow": 489.2, + "prevClose": 507.15, + "premarketPrice": 507, + "chg": -0.15, + "pChg": -0.03, + "totalTradedVolume": 918, + "totalBuyVolume": 51261, + "totalSellVolume": 23079 + }, + { + "symbol": "PRESTIGE", + "ffmc": 294080387325.59, + "trigger": null, + "yearHigh": 2074.8, + "yearLow": 967.3, + "prevClose": 1752.5, + "premarketPrice": 1751.9, + "chg": -0.6, + "pChg": -0.03, + "totalTradedVolume": 312, + "totalBuyVolume": 3693, + "totalSellVolume": 7699 + }, + { + "symbol": "SAIL", + "ffmc": 166622849306.93, + "trigger": null, + "yearHigh": 175.35, + "yearLow": 107.5, + "prevClose": 115.53, + "premarketPrice": 115.5, + "chg": -0.03, + "pChg": -0.03, + "totalTradedVolume": 44851, + "totalBuyVolume": 135788, + "totalSellVolume": 275441 + }, + { + "symbol": "APLAPOLLO", + "ffmc": 273362109051.6, + "trigger": null, + "yearHigh": 1728.95, + "yearLow": 1305, + "prevClose": 1514.95, + "premarketPrice": 1514.3, + "chg": -0.65, + "pChg": -0.04, + "totalTradedVolume": 311, + "totalBuyVolume": 2095, + "totalSellVolume": 23871 + }, + { + "symbol": "AUBANK", + "ffmc": 308779939146.46, + "trigger": null, + "yearHigh": 813.4, + "yearLow": 534.45, + "prevClose": 552.2, + "premarketPrice": 552, + "chg": -0.2, + "pChg": -0.04, + "totalTradedVolume": 2927, + "totalBuyVolume": 6803, + "totalSellVolume": 22098 + }, + { + "symbol": "INFY", + "ffmc": 6889954160562.95, + "trigger": null, + "yearHigh": 2006.45, + "yearLow": 1358.35, + "prevClose": 1916.75, + "premarketPrice": 1915.7, + "chg": -1.05, + "pChg": -0.05, + "totalTradedVolume": 9882, + "totalBuyVolume": 32272, + "totalSellVolume": 50177 + }, + { + "symbol": "INDIGO", + "ffmc": 807187904810.33, + "trigger": null, + "yearHigh": 5035, + "yearLow": 2847, + "prevClose": 4681.95, + "premarketPrice": 4678.85, + "chg": -3.1, + "pChg": -0.07, + "totalTradedVolume": 466, + "totalBuyVolume": 1366, + "totalSellVolume": 8402 + }, + { + "symbol": "TVSMOTOR", + "ffmc": 568355953853.62, + "trigger": null, + "yearHigh": 2958, + "yearLow": 1873, + "prevClose": 2420.45, + "premarketPrice": 2418.8, + "chg": -1.65, + "pChg": -0.07, + "totalTradedVolume": 256, + "totalBuyVolume": 1473, + "totalSellVolume": 3812 + }, + { + "symbol": "INDIANB", + "ffmc": 193116375710.48, + "trigger": null, + "yearHigh": 632.7, + "yearLow": 408.6, + "prevClose": 547.2, + "premarketPrice": 546.75, + "chg": -0.45, + "pChg": -0.08, + "totalTradedVolume": 2011, + "totalBuyVolume": 7917, + "totalSellVolume": 10416 + }, + { + "symbol": "TATAELXSI", + "ffmc": 237510411882.96, + "trigger": null, + "yearHigh": 9080, + "yearLow": 6286, + "prevClose": 6886.35, + "premarketPrice": 6881, + "chg": -5.35, + "pChg": -0.08, + "totalTradedVolume": 214, + "totalBuyVolume": 2728, + "totalSellVolume": 4308 + }, + { + "symbol": "APOLLOHOSP", + "ffmc": 733021047103.37, + "trigger": null, + "yearHigh": 7545, + "yearLow": 5615.6, + "prevClose": 7246.3, + "premarketPrice": 7240, + "chg": -6.3, + "pChg": -0.09, + "totalTradedVolume": 793, + "totalBuyVolume": 1155, + "totalSellVolume": 1894 + }, + { + "symbol": "BAJFINANCE", + "ffmc": 1927879866212.4, + "trigger": null, + "yearHigh": 7830, + "yearLow": 6187.8, + "prevClose": 6907.75, + "premarketPrice": 6900, + "chg": -7.75, + "pChg": -0.11, + "totalTradedVolume": 596, + "totalBuyVolume": 3815, + "totalSellVolume": 12684 + }, + { + "symbol": "IRFC", + "ffmc": 260268054195.87, + "trigger": null, + "yearHigh": 229, + "yearLow": 96.05, + "prevClose": 146.22, + "premarketPrice": 146.05, + "chg": -0.17, + "pChg": -0.12, + "totalTradedVolume": 46664, + "totalBuyVolume": 137038, + "totalSellVolume": 363534 + }, + { + "symbol": "POWERGRID", + "ffmc": 1400152003301.02, + "trigger": null, + "yearHigh": 366.25, + "yearLow": 226.05, + "prevClose": 309.4, + "premarketPrice": 309, + "chg": -0.4, + "pChg": -0.13, + "totalTradedVolume": 20906, + "totalBuyVolume": 73814, + "totalSellVolume": 97631 + }, + { + "symbol": "BANKINDIA", + "ffmc": 124754528318.18, + "trigger": null, + "yearHigh": 157.95, + "yearLow": 96, + "prevClose": 102.8, + "premarketPrice": 102.61, + "chg": -0.19, + "pChg": -0.18, + "totalTradedVolume": 10361, + "totalBuyVolume": 90579, + "totalSellVolume": 115703 + }, + { + "symbol": "PETRONET", + "ffmc": 255102134965.99, + "trigger": null, + "yearHigh": 384.2, + "yearLow": 215, + "prevClose": 340.65, + "premarketPrice": 340, + "chg": -0.65, + "pChg": -0.19, + "totalTradedVolume": 1470, + "totalBuyVolume": 12059, + "totalSellVolume": 48686 + }, + { + "symbol": "BRITANNIA", + "ffmc": 561417758489.22, + "trigger": null, + "yearHigh": 6469.9, + "yearLow": 4641, + "prevClose": 4769.3, + "premarketPrice": 4759.7, + "chg": -9.6, + "pChg": -0.2, + "totalTradedVolume": 251, + "totalBuyVolume": 2517, + "totalSellVolume": 3857 + }, + { + "symbol": "ICICIBANK", + "ffmc": 9216360045394.43, + "trigger": null, + "yearHigh": 1362.35, + "yearLow": 970.15, + "prevClose": 1307.55, + "premarketPrice": 1304.95, + "chg": -2.6, + "pChg": -0.2, + "totalTradedVolume": 123578, + "totalBuyVolume": 54961, + "totalSellVolume": 91748 + }, + { + "symbol": "ATUL", + "ffmc": 111977342177.77, + "trigger": null, + "yearHigh": 8180, + "yearLow": 5174.85, + "prevClose": 7065.1, + "premarketPrice": 7050, + "chg": -15.1, + "pChg": -0.21, + "totalTradedVolume": 18, + "totalBuyVolume": 195, + "totalSellVolume": 1229 + }, + { + "symbol": "HCLTECH", + "ffmc": 1994434870197.07, + "trigger": null, + "yearHigh": 1980, + "yearLow": 1235, + "prevClose": 1892, + "premarketPrice": 1888, + "chg": -4, + "pChg": -0.21, + "totalTradedVolume": 1365, + "totalBuyVolume": 4111, + "totalSellVolume": 16664 + }, + { + "symbol": "HAVELLS", + "ffmc": 416667669383.26, + "trigger": null, + "yearHigh": 2106, + "yearLow": 1280, + "prevClose": 1649.9, + "premarketPrice": 1646.25, + "chg": -3.65, + "pChg": -0.22, + "totalTradedVolume": 693, + "totalBuyVolume": 3571, + "totalSellVolume": 13715 + }, + { + "symbol": "SHREECEM", + "ffmc": 350024213635.27, + "trigger": null, + "yearHigh": 30737.75, + "yearLow": 23500, + "prevClose": 26049, + "premarketPrice": 25990, + "chg": -59, + "pChg": -0.23, + "totalTradedVolume": 25, + "totalBuyVolume": 198, + "totalSellVolume": 853 + }, + { + "symbol": "HDFCLIFE", + "ffmc": 661770881426.56, + "trigger": null, + "yearHigh": 761.2, + "yearLow": 511.4, + "prevClose": 621.9, + "premarketPrice": 620.35, + "chg": -1.55, + "pChg": -0.25, + "totalTradedVolume": 3930, + "totalBuyVolume": 16467, + "totalSellVolume": 31589 + }, + { + "symbol": "BOSCHLTD", + "ffmc": 295418492333.25, + "trigger": null, + "yearHigh": 39088.8, + "yearLow": 21781.15, + "prevClose": 34089.65, + "premarketPrice": 34000, + "chg": -89.65, + "pChg": -0.26, + "totalTradedVolume": 14, + "totalBuyVolume": 163, + "totalSellVolume": 350 + }, + { + "symbol": "AXISBANK", + "ffmc": 3070628918289.66, + "trigger": null, + "yearHigh": 1339.65, + "yearLow": 995.7, + "prevClose": 1077.45, + "premarketPrice": 1074.1, + "chg": -3.35, + "pChg": -0.31, + "totalTradedVolume": 14330, + "totalBuyVolume": 17999, + "totalSellVolume": 19623 + }, + { + "symbol": "JINDALSTEL", + "ffmc": 350561711274.67, + "trigger": null, + "yearHigh": 1097, + "yearLow": 687.8, + "prevClose": 923.55, + "premarketPrice": 920.7, + "chg": -2.85, + "pChg": -0.31, + "totalTradedVolume": 1093, + "totalBuyVolume": 4616, + "totalSellVolume": 13523 + }, + { + "symbol": "HINDALCO", + "ffmc": 897850659058.34, + "trigger": null, + "yearHigh": 772.65, + "yearLow": 496.35, + "prevClose": 617.4, + "premarketPrice": 615.4, + "chg": -2, + "pChg": -0.32, + "totalTradedVolume": 5672, + "totalBuyVolume": 29550, + "totalSellVolume": 40745 + }, + { + "symbol": "HDFCAMC", + "ffmc": 430225665256.75, + "trigger": null, + "yearHigh": 4864, + "yearLow": 3181.5, + "prevClose": 4263.1, + "premarketPrice": 4249, + "chg": -14.1, + "pChg": -0.33, + "totalTradedVolume": 299, + "totalBuyVolume": 2569, + "totalSellVolume": 2325 + }, + { + "symbol": "TCS", + "ffmc": 4242996032306.05, + "trigger": null, + "yearHigh": 4592.25, + "yearLow": 3591.5, + "prevClose": 4164.85, + "premarketPrice": 4151, + "chg": -13.85, + "pChg": -0.33, + "totalTradedVolume": 10490, + "totalBuyVolume": 11205, + "totalSellVolume": 18552 + }, + { + "symbol": "DLF", + "ffmc": 533218230387.44, + "trigger": null, + "yearHigh": 967.6, + "yearLow": 687.05, + "prevClose": 834.85, + "premarketPrice": 832, + "chg": -2.85, + "pChg": -0.34, + "totalTradedVolume": 2875, + "totalBuyVolume": 10330, + "totalSellVolume": 35545 + }, + { + "symbol": "HDFCBANK", + "ffmc": 13676563839215.33, + "trigger": null, + "yearHigh": 1880, + "yearLow": 1363.55, + "prevClose": 1798.25, + "premarketPrice": 1792.2, + "chg": -6.05, + "pChg": -0.34, + "totalTradedVolume": 80330, + "totalBuyVolume": 93675, + "totalSellVolume": 157827 + }, + { + "symbol": "SUNTV", + "ffmc": 58049528044.22, + "trigger": null, + "yearHigh": 921, + "yearLow": 567.6, + "prevClose": 686.45, + "premarketPrice": 684.05, + "chg": -2.4, + "pChg": -0.35, + "totalTradedVolume": 193, + "totalBuyVolume": 1858, + "totalSellVolume": 8725 + }, + { + "symbol": "ONGC", + "ffmc": 918533480389.73, + "trigger": null, + "yearHigh": 345, + "yearLow": 203.65, + "prevClose": 236.9, + "premarketPrice": 236.05, + "chg": -0.85, + "pChg": -0.36, + "totalTradedVolume": 35704, + "totalBuyVolume": 127570, + "totalSellVolume": 173227 + }, + { + "symbol": "RELIANCE", + "ffmc": 8273062465439.98, + "trigger": null, + "yearHigh": 1608.8, + "yearLow": 1201.5, + "prevClose": 1221.05, + "premarketPrice": 1216.4, + "chg": -4.65, + "pChg": -0.38, + "totalTradedVolume": 88797, + "totalBuyVolume": 141189, + "totalSellVolume": 199297 + }, + { + "symbol": "ABBOTINDIA", + "ffmc": 98425539896.15, + "trigger": null, + "yearHigh": 30521, + "yearLow": 22450, + "prevClose": 29263.5, + "premarketPrice": 29150, + "chg": -113.5, + "pChg": -0.39, + "totalTradedVolume": 56, + "totalBuyVolume": 85, + "totalSellVolume": 448 + }, + { + "symbol": "BANKBARODA", + "ffmc": 455268513580.7, + "trigger": null, + "yearHigh": 299.7, + "yearLow": 219.45, + "prevClose": 244.99, + "premarketPrice": 244, + "chg": -0.99, + "pChg": -0.4, + "totalTradedVolume": 13729, + "totalBuyVolume": 64723, + "totalSellVolume": 205071 + }, + { + "symbol": "TIINDIA", + "ffmc": 382002111379.88, + "trigger": null, + "yearHigh": 4810.8, + "yearLow": 3334.3, + "prevClose": 3589.5, + "premarketPrice": 3575, + "chg": -14.5, + "pChg": -0.4, + "totalTradedVolume": 226, + "totalBuyVolume": 1858, + "totalSellVolume": 3230 + }, + { + "symbol": "HINDPETRO", + "ffmc": 392506094832.51, + "trigger": null, + "yearHigh": 457.15, + "yearLow": 251.33, + "prevClose": 410.7, + "premarketPrice": 409, + "chg": -1.7, + "pChg": -0.41, + "totalTradedVolume": 4434, + "totalBuyVolume": 23912, + "totalSellVolume": 74161 + }, + { + "symbol": "HUDCO", + "ffmc": 113457682500, + "trigger": null, + "yearHigh": 353.7, + "yearLow": 106, + "prevClose": 226.94, + "premarketPrice": 226, + "chg": -0.94, + "pChg": -0.41, + "totalTradedVolume": 9872, + "totalBuyVolume": 37911, + "totalSellVolume": 112283 + }, + { + "symbol": "MRF", + "ffmc": 265464855730.2, + "trigger": null, + "yearHigh": 151445, + "yearLow": 116347.85, + "prevClose": 131553.8, + "premarketPrice": 130955, + "chg": -598.8, + "pChg": -0.46, + "totalTradedVolume": 23, + "totalBuyVolume": 115, + "totalSellVolume": 184 + }, + { + "symbol": "BHARATFORG", + "ffmc": 343047051505.9, + "trigger": null, + "yearHigh": 1804.5, + "yearLow": 1063, + "prevClose": 1314.85, + "premarketPrice": 1308.7, + "chg": -6.15, + "pChg": -0.47, + "totalTradedVolume": 848, + "totalBuyVolume": 3873, + "totalSellVolume": 18500 + }, + { + "symbol": "ATGL", + "ffmc": 187759897414.49, + "trigger": null, + "yearHigh": 1190, + "yearLow": 545.75, + "prevClose": 679.3, + "premarketPrice": 676, + "chg": -3.3, + "pChg": -0.49, + "totalTradedVolume": 1326, + "totalBuyVolume": 4239, + "totalSellVolume": 12178 + }, + { + "symbol": "APOLLOTYRE", + "ffmc": 178076586174.38, + "trigger": null, + "yearHigh": 584.9, + "yearLow": 429, + "prevClose": 540.7, + "premarketPrice": 538, + "chg": -2.7, + "pChg": -0.5, + "totalTradedVolume": 1322, + "totalBuyVolume": 5770, + "totalSellVolume": 20474 + }, + { + "symbol": "DELHIVERY", + "ffmc": 162453380538.65, + "trigger": null, + "yearHigh": 488, + "yearLow": 325.5, + "prevClose": 350.75, + "premarketPrice": 349, + "chg": -1.75, + "pChg": -0.5, + "totalTradedVolume": 3341, + "totalBuyVolume": 18506, + "totalSellVolume": 23984 + }, + { + "symbol": "VBL", + "ffmc": 784009458399.94, + "trigger": null, + "yearHigh": 681.12, + "yearLow": 478.56, + "prevClose": 624.3, + "premarketPrice": 621.15, + "chg": -3.15, + "pChg": -0.5, + "totalTradedVolume": 9759, + "totalBuyVolume": 40446, + "totalSellVolume": 121147 + }, + { + "symbol": "ABB", + "ffmc": 358261161418.97, + "trigger": null, + "yearHigh": 9149.95, + "yearLow": 4340.3, + "prevClose": 6846.9, + "premarketPrice": 6812, + "chg": -34.9, + "pChg": -0.51, + "totalTradedVolume": 309, + "totalBuyVolume": 1570, + "totalSellVolume": 2397 + }, + { + "symbol": "CAMS", + "ffmc": 240308610153.24, + "trigger": null, + "yearHigh": 5367.5, + "yearLow": 2643.3, + "prevClose": 5041.75, + "premarketPrice": 5016.15, + "chg": -25.6, + "pChg": -0.51, + "totalTradedVolume": 548, + "totalBuyVolume": 2898, + "totalSellVolume": 7776 + }, + { + "symbol": "BSE", + "ffmc": 714414403286.16, + "trigger": null, + "yearHigh": 5837.95, + "yearLow": 1941.05, + "prevClose": 5278.5, + "premarketPrice": 5250, + "chg": -28.5, + "pChg": -0.54, + "totalTradedVolume": 2818, + "totalBuyVolume": 6123, + "totalSellVolume": 25447 + }, + { + "symbol": "LALPATHLAB", + "ffmc": 108344737814.14, + "trigger": null, + "yearHigh": 3653.95, + "yearLow": 1943.7, + "prevClose": 2948.7, + "premarketPrice": 2932.65, + "chg": -16.05, + "pChg": -0.54, + "totalTradedVolume": 31, + "totalBuyVolume": 265, + "totalSellVolume": 1003 + }, + { + "symbol": "COROMANDEL", + "ffmc": 216227622192.09, + "trigger": null, + "yearHigh": 1888.95, + "yearLow": 1024.6, + "prevClose": 1846.15, + "premarketPrice": 1835.15, + "chg": -11, + "pChg": -0.6, + "totalTradedVolume": 452, + "totalBuyVolume": 1003, + "totalSellVolume": 4711 + }, + { + "symbol": "COFORGE", + "ffmc": 626259335462.44, + "trigger": null, + "yearHigh": 9797.1, + "yearLow": 4287.25, + "prevClose": 9451.1, + "premarketPrice": 9390.1, + "chg": -61, + "pChg": -0.65, + "totalTradedVolume": 2060, + "totalBuyVolume": 925, + "totalSellVolume": 5545 + }, + { + "symbol": "ABFRL", + "ffmc": 112396610934.68, + "trigger": null, + "yearHigh": 364.4, + "yearLow": 198.75, + "prevClose": 282, + "premarketPrice": 280.05, + "chg": -1.95, + "pChg": -0.69, + "totalTradedVolume": 6913, + "totalBuyVolume": 20390, + "totalSellVolume": 66160 + }, + { + "symbol": "CUMMINSIND", + "ffmc": 446870366712, + "trigger": null, + "yearHigh": 4171.9, + "yearLow": 1927, + "prevClose": 3297.65, + "premarketPrice": 3274.7, + "chg": -22.95, + "pChg": -0.7, + "totalTradedVolume": 633, + "totalBuyVolume": 2611, + "totalSellVolume": 7698 + }, + { + "symbol": "M&M", + "ffmc": 2706698491009.48, + "trigger": null, + "yearHigh": 3222.1, + "yearLow": 1575, + "prevClose": 3049.45, + "premarketPrice": 3028.05, + "chg": -21.4, + "pChg": -0.7, + "totalTradedVolume": 30905, + "totalBuyVolume": 21194, + "totalSellVolume": 24129 + }, + { + "symbol": "POLICYBZR", + "ffmc": 653365705988.08, + "trigger": null, + "yearHigh": 2210, + "yearLow": 763.1, + "prevClose": 2052.75, + "premarketPrice": 2035, + "chg": -17.75, + "pChg": -0.86, + "totalTradedVolume": 902, + "totalBuyVolume": 1751, + "totalSellVolume": 7046 + }, + { + "symbol": "VOLTAS", + "ffmc": 387929732083.75, + "trigger": null, + "yearHigh": 1944.9, + "yearLow": 965, + "prevClose": 1705.3, + "premarketPrice": 1690.05, + "chg": -15.25, + "pChg": -0.89, + "totalTradedVolume": 1410, + "totalBuyVolume": 1998, + "totalSellVolume": 4117 + }, + { + "symbol": "SUPREMEIND", + "ffmc": 306120624960.71, + "trigger": null, + "yearHigh": 6460, + "yearLow": 3601, + "prevClose": 4777.35, + "premarketPrice": 4733.9, + "chg": -43.45, + "pChg": -0.91, + "totalTradedVolume": 139, + "totalBuyVolume": 972, + "totalSellVolume": 1813 + }, + { + "symbol": "LODHA", + "ffmc": 392005200222.57, + "trigger": null, + "yearHigh": 1649.95, + "yearLow": 950, + "prevClose": 1408.35, + "premarketPrice": 1395.05, + "chg": -13.3, + "pChg": -0.94, + "totalTradedVolume": 2674, + "totalBuyVolume": 6804, + "totalSellVolume": 8010 + }, + { + "symbol": "MUTHOOTFIN", + "ffmc": 220389094789.75, + "trigger": null, + "yearHigh": 2154, + "yearLow": 1261.9, + "prevClose": 2069.6, + "premarketPrice": 2050, + "chg": -19.6, + "pChg": -0.95, + "totalTradedVolume": 118, + "totalBuyVolume": 1153, + "totalSellVolume": 12832 + }, + { + "symbol": "SBILIFE", + "ffmc": 625785382879.77, + "trigger": null, + "yearHigh": 1936, + "yearLow": 1307.7, + "prevClose": 1405.3, + "premarketPrice": 1391.25, + "chg": -14.05, + "pChg": -1, + "totalTradedVolume": 1253, + "totalBuyVolume": 3805, + "totalSellVolume": 10637 + }, + { + "symbol": "GUJGASLTD", + "ffmc": 86341816054.77, + "trigger": null, + "yearHigh": 689.95, + "yearLow": 442.5, + "prevClose": 502.8, + "premarketPrice": 496.3, + "chg": -6.5, + "pChg": -1.29, + "totalTradedVolume": 2297, + "totalBuyVolume": 6452, + "totalSellVolume": 13481 + }, + { + "symbol": "MAXHEALTH", + "ffmc": 835996566379.88, + "trigger": null, + "yearHigh": 1215.55, + "yearLow": 668.65, + "prevClose": 1126.4, + "premarketPrice": 1105, + "chg": -21.4, + "pChg": -1.9, + "totalTradedVolume": 5827, + "totalBuyVolume": 8206, + "totalSellVolume": 4595 + } + ] +} \ No newline at end of file diff --git a/nse/controllers/market/examples/20241205_raw_nse_pre_market_data.json b/nse/controllers/market/examples/20241205_raw_nse_pre_market_data.json new file mode 100644 index 0000000..e5ede46 --- /dev/null +++ b/nse/controllers/market/examples/20241205_raw_nse_pre_market_data.json @@ -0,0 +1,20309 @@ +{ + "declines": 29, + "unchanged": 12, + "data": [ + { + "metadata": { + "symbol": "INDUSTOWER", + "identifier": "INDUSTOWEREQN", + "purpose": "BUY BACK", + "lastPrice": 375, + "change": 17.80000000000001, + "pChange": 4.983202687569992, + "previousClose": 357.2, + "finalQuantity": 1150526, + "totalTurnover": 431447250, + "marketCap": 445338562399.2, + "yearHigh": 460.35, + "yearLow": 176.55, + "iep": 375, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_INDUSTOWEREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 374.05, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 374.1, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 374.2, + "buyQty": 180, + "sellQty": 0 + }, + { + "price": 374.5, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 374.9, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 375, + "buyQty": 0, + "sellQty": 133650, + "iep": true + }, + { + "price": 375.1, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 375.5, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 375.55, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 376, + "buyQty": 0, + "sellQty": 17915 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 375, + "totalTradedVolume": 1150526, + "finalPrice": 375, + "finalQuantity": 1150526, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 626214, + "totalBuyQuantity": 6530831, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 17.80000000000001, + "perChange": 4.983202687569992, + "prevClose": 357.2 + } + } + }, + { + "metadata": { + "symbol": "IDEA", + "identifier": "IDEAEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 8.79, + "change": 0.3699999999999992, + "pChange": 4.3942992874109175, + "previousClose": 8.42, + "finalQuantity": 11950720, + "totalTurnover": 105046828.8, + "marketCap": 201462407554.84, + "yearHigh": 19.18, + "yearLow": 6.61, + "iep": 8.79, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IDEAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 8.73, + "buyQty": 860, + "sellQty": 0 + }, + { + "price": 8.75, + "buyQty": 235491, + "sellQty": 0 + }, + { + "price": 8.76, + "buyQty": 11502, + "sellQty": 0 + }, + { + "price": 8.77, + "buyQty": 555, + "sellQty": 0 + }, + { + "price": 8.78, + "buyQty": 5000, + "sellQty": 0 + }, + { + "price": 8.79, + "buyQty": 0, + "sellQty": 205176, + "iep": true + }, + { + "price": 8.8, + "buyQty": 0, + "sellQty": 1593205 + }, + { + "price": 8.81, + "buyQty": 0, + "sellQty": 11010 + }, + { + "price": 8.82, + "buyQty": 0, + "sellQty": 26058 + }, + { + "price": 8.83, + "buyQty": 0, + "sellQty": 4985 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 8.79, + "totalTradedVolume": 11950720, + "finalPrice": 8.79, + "finalQuantity": 11950720, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 19672878, + "totalBuyQuantity": 18877319, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.3699999999999992, + "perChange": 4.3942992874109175, + "prevClose": 8.42 + } + } + }, + { + "metadata": { + "symbol": "IGL", + "identifier": "IGLEQN", + "purpose": "INTERIM DIVIDEND - RS 5.50 PER SHARE", + "lastPrice": 374, + "change": 13.75, + "pChange": 3.816793893129771, + "previousClose": 360.25, + "finalQuantity": 168562, + "totalTurnover": 63042188, + "marketCap": 125985424943.18, + "yearHigh": 570.35, + "yearLow": 306.1, + "iep": 374, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IGLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 372, + "buyQty": 1760, + "sellQty": 0 + }, + { + "price": 372.1, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 372.25, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 372.5, + "buyQty": 75, + "sellQty": 0 + }, + { + "price": 373, + "buyQty": 1300, + "sellQty": 0 + }, + { + "price": 374, + "buyQty": 0, + "sellQty": 37786, + "iep": true + }, + { + "price": 374.25, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 374.4, + "buyQty": 0, + "sellQty": 60 + }, + { + "price": 374.45, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 374.55, + "buyQty": 0, + "sellQty": 29 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 374, + "totalTradedVolume": 168562, + "finalPrice": 374, + "finalQuantity": 168562, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 126426, + "totalBuyQuantity": 269096, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 13.75, + "perChange": 3.816793893129771, + "prevClose": 360.25 + } + } + }, + { + "metadata": { + "symbol": "TORNTPHARM", + "identifier": "TORNTPHARMEQN", + "purpose": "DIVIDEND - RS 6 PER SHARE", + "lastPrice": 3450, + "change": 97.34999999999991, + "pChange": 2.9036732137264525, + "previousClose": 3352.65, + "finalQuantity": 3155, + "totalTurnover": 10884750, + "marketCap": 307959865932.19, + "yearHigh": 3590.7, + "yearLow": 2025.7, + "iep": 3450, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TORNTPHARMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3433, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 3435, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 3436.5, + "buyQty": 125, + "sellQty": 0 + }, + { + "price": 3442, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 3450, + "buyQty": 160, + "sellQty": 0, + "iep": true + }, + { + "price": 3452, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 3455, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 3463, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 3466.65, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 3469, + "buyQty": 0, + "sellQty": 21 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3450, + "totalTradedVolume": 3155, + "finalPrice": 3450, + "finalQuantity": 3155, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 1193, + "totalBuyQuantity": 5819, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 97.34999999999991, + "perChange": 2.9036732137264525, + "prevClose": 3352.65 + } + } + }, + { + "metadata": { + "symbol": "PERSISTENT", + "identifier": "PERSISTENTEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 10 PER SHARE", + "lastPrice": 6130.6, + "change": 119.25, + "pChange": 1.9837474111472464, + "previousClose": 6011.35, + "finalQuantity": 6481, + "totalTurnover": 39732418.6, + "marketCap": 638233701167.61, + "yearHigh": 6079.95, + "yearLow": 1567.7, + "iep": 6130.6, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PERSISTENTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 6121.6, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 6122, + "buyQty": 3000, + "sellQty": 0 + }, + { + "price": 6125, + "buyQty": 101, + "sellQty": 0 + }, + { + "price": 6130, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 6130.6, + "buyQty": 82, + "sellQty": 0, + "iep": true + }, + { + "price": 6133, + "buyQty": 0, + "sellQty": 9 + }, + { + "price": 6133.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 6139, + "buyQty": 0, + "sellQty": 75 + }, + { + "price": 6139.7, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 6140, + "buyQty": 0, + "sellQty": 536 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 6130.6, + "totalTradedVolume": 6481, + "finalPrice": 6130.6, + "finalQuantity": 6481, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 3997, + "totalBuyQuantity": 8196, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 119.25, + "perChange": 1.9837474111472464, + "prevClose": 6011.35 + } + } + }, + { + "metadata": { + "symbol": "ADANIENSOL", + "identifier": "ADANIENSOLEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 829.1, + "change": 15.649999999999977, + "pChange": 1.9239043579814343, + "previousClose": 813.45, + "finalQuantity": 13276, + "totalTurnover": 11007131.6, + "marketCap": 299868296018.2, + "yearHigh": 1348, + "yearLow": 588, + "iep": 829.1, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ADANIENSOLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 825.05, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 826, + "buyQty": 310, + "sellQty": 0 + }, + { + "price": 828, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 829, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 829.1, + "buyQty": 8932, + "sellQty": 0, + "iep": true + }, + { + "price": 829.4, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 829.5, + "buyQty": 0, + "sellQty": 300 + }, + { + "price": 829.8, + "buyQty": 0, + "sellQty": 118 + }, + { + "price": 829.9, + "buyQty": 0, + "sellQty": 120 + }, + { + "price": 829.95, + "buyQty": 0, + "sellQty": 25 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 829.1, + "totalTradedVolume": 13276, + "finalPrice": 829.1, + "finalQuantity": 13276, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 130414, + "totalBuyQuantity": 63235, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 15.649999999999977, + "perChange": 1.9239043579814343, + "prevClose": 813.45 + } + } + }, + { + "metadata": { + "symbol": "CDSL", + "identifier": "CDSLEQN", + "purpose": "BONUS 1:1", + "lastPrice": 1740, + "change": 21.40000000000009, + "pChange": 1.245199581054352, + "previousClose": 1718.6, + "finalQuantity": 47683, + "totalTurnover": 82968420, + "marketCap": 307156336842.3, + "yearHigh": 1731.2, + "yearLow": 811, + "iep": 1740, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CDSLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1738, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 1739, + "buyQty": 65, + "sellQty": 0 + }, + { + "price": 1739.2, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 1739.95, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1740, + "buyQty": 1116, + "sellQty": 0, + "iep": true + }, + { + "price": 1740.25, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1741, + "buyQty": 0, + "sellQty": 76 + }, + { + "price": 1741.2, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 1741.7, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1741.9, + "buyQty": 0, + "sellQty": 425 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1740, + "totalTradedVolume": 47683, + "finalPrice": 1740, + "finalQuantity": 47683, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 106602, + "totalBuyQuantity": 64898, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 21.40000000000009, + "perChange": 1.245199581054352, + "prevClose": 1718.6 + } + } + }, + { + "metadata": { + "symbol": "BHARATFORG", + "identifier": "BHARATFORGEQN", + "purpose": "DIVIDEND - RS 6.50 PER SHARE", + "lastPrice": 1394.95, + "change": 17.049999999999955, + "pChange": 1.2373902315117173, + "previousClose": 1377.9, + "finalQuantity": 14544, + "totalTurnover": 20288152.8, + "marketCap": 350603738410.38, + "yearHigh": 1804.5, + "yearLow": 1063, + "iep": 1394.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BHARATFORGEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1389, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 1390, + "buyQty": 510, + "sellQty": 0 + }, + { + "price": 1390.1, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 1391.65, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1392, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1394.95, + "buyQty": 0, + "sellQty": 2463, + "iep": true + }, + { + "price": 1395, + "buyQty": 0, + "sellQty": 1863 + }, + { + "price": 1396, + "buyQty": 0, + "sellQty": 8 + }, + { + "price": 1397, + "buyQty": 0, + "sellQty": 5541 + }, + { + "price": 1397.45, + "buyQty": 0, + "sellQty": 3 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1394.95, + "totalTradedVolume": 14544, + "finalPrice": 1394.95, + "finalQuantity": 14544, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 52591, + "totalBuyQuantity": 64026, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 17.049999999999955, + "perChange": 1.2373902315117173, + "prevClose": 1377.9 + } + } + }, + { + "metadata": { + "symbol": "MGL", + "identifier": "MGLEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 18 PER SHARE", + "lastPrice": 1275, + "change": 14.200000000000045, + "pChange": 1.1262690355329987, + "previousClose": 1260.8, + "finalQuantity": 1077, + "totalTurnover": 1373175, + "marketCap": 71563255561, + "yearHigh": 1988, + "yearLow": 1064, + "iep": 1275, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MGLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1264.3, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1265, + "buyQty": 352, + "sellQty": 0 + }, + { + "price": 1268, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 1270, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 1275, + "buyQty": 627, + "sellQty": 0, + "iep": true + }, + { + "price": 1276, + "buyQty": 0, + "sellQty": 51 + }, + { + "price": 1277, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1278, + "buyQty": 0, + "sellQty": 102 + }, + { + "price": 1279.8, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 1280, + "buyQty": 0, + "sellQty": 31 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1275, + "totalTradedVolume": 1077, + "finalPrice": 1275, + "finalQuantity": 1077, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 5751, + "totalBuyQuantity": 16664, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 14.200000000000045, + "perChange": 1.1262690355329987, + "prevClose": 1260.8 + } + } + }, + { + "metadata": { + "symbol": "CUMMINSIND", + "identifier": "CUMMINSINDEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 20 PER SHARE", + "lastPrice": 3584, + "change": 38.69999999999982, + "pChange": 1.0915860434941984, + "previousClose": 3545.3, + "finalQuantity": 835, + "totalTurnover": 2992640, + "marketCap": 478374389539.2, + "yearHigh": 4171.9, + "yearLow": 1835.55, + "iep": 3584, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CUMMINSINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3540, + "buyQty": 103, + "sellQty": 0 + }, + { + "price": 3545, + "buyQty": 35, + "sellQty": 0 + }, + { + "price": 3545.3, + "buyQty": 9, + "sellQty": 0 + }, + { + "price": 3546.5, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 3551, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3584, + "buyQty": 0, + "sellQty": 373, + "iep": true + }, + { + "price": 3585, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 3587.7, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 3588, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 3589, + "buyQty": 0, + "sellQty": 17 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3584, + "totalTradedVolume": 835, + "finalPrice": 3584, + "finalQuantity": 835, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 5368, + "totalBuyQuantity": 5752, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 38.69999999999982, + "perChange": 1.0915860434941984, + "prevClose": 3545.3 + } + } + }, + { + "metadata": { + "symbol": "ATGL", + "identifier": "ATGLEQN", + "purpose": "DIVIDEND - RE 0.25 PER SHARE", + "lastPrice": 754.7, + "change": 8.050000000000068, + "pChange": 1.0781490658273714, + "previousClose": 746.65, + "finalQuantity": 4906, + "totalTurnover": 3702558.2, + "marketCap": 206411451288.73, + "yearHigh": 1259.4, + "yearLow": 545.75, + "iep": 754.7, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ATGLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 748.95, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 749, + "buyQty": 480, + "sellQty": 0 + }, + { + "price": 750, + "buyQty": 295, + "sellQty": 0 + }, + { + "price": 751, + "buyQty": 55, + "sellQty": 0 + }, + { + "price": 752, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 754.7, + "buyQty": 0, + "sellQty": 973, + "iep": true + }, + { + "price": 754.8, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 754.95, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 755, + "buyQty": 0, + "sellQty": 2221 + }, + { + "price": 756, + "buyQty": 0, + "sellQty": 81 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 754.7, + "totalTradedVolume": 4906, + "finalPrice": 754.7, + "finalQuantity": 4906, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 54725, + "totalBuyQuantity": 24674, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 8.050000000000068, + "perChange": 1.0781490658273714, + "prevClose": 746.65 + } + } + }, + { + "metadata": { + "symbol": "TCS", + "identifier": "TCSEQN", + "purpose": "INTERIM DIVIDEND - RS 10 PER SHARE", + "lastPrice": 4400.8, + "change": 46.400000000000546, + "pChange": 1.0655888296895222, + "previousClose": 4354.4, + "finalQuantity": 36738, + "totalTurnover": 161676590.4, + "marketCap": 4431716526490.31, + "yearHigh": 4592.25, + "yearLow": 3498, + "iep": 4400.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TCSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4378.8, + "buyQty": 45, + "sellQty": 0 + }, + { + "price": 4381.4, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 4400, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 4400.35, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 4400.8, + "buyQty": 79, + "sellQty": 0, + "iep": true + }, + { + "price": 4400.95, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 4401, + "buyQty": 0, + "sellQty": 9 + }, + { + "price": 4402, + "buyQty": 0, + "sellQty": 6 + }, + { + "price": 4402.3, + "buyQty": 0, + "sellQty": 7 + }, + { + "price": 4403.9, + "buyQty": 0, + "sellQty": 20 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4400.8, + "totalTradedVolume": 36738, + "finalPrice": 4400.8, + "finalQuantity": 36738, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 29880, + "totalBuyQuantity": 8158, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 46.400000000000546, + "perChange": 1.0655888296895222, + "prevClose": 4354.4 + } + } + }, + { + "metadata": { + "symbol": "NYKAA", + "identifier": "NYKAAEQN", + "purpose": "BONUS 5:1", + "lastPrice": 170.84, + "change": 1.740000000000009, + "pChange": 1.0289769367238375, + "previousClose": 169.1, + "finalQuantity": 6710, + "totalTurnover": 1146336.4, + "marketCap": 229637248359.45, + "yearHigh": 229.8, + "yearLow": 139.8, + "iep": 170.84, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NYKAAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 169.9, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 170, + "buyQty": 1889, + "sellQty": 0 + }, + { + "price": 170.3, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 170.48, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 170.5, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 170.84, + "buyQty": 0, + "sellQty": 2220, + "iep": true + }, + { + "price": 170.95, + "buyQty": 0, + "sellQty": 46 + }, + { + "price": 171, + "buyQty": 0, + "sellQty": 5411 + }, + { + "price": 171.1, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 171.15, + "buyQty": 0, + "sellQty": 4 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 170.84, + "totalTradedVolume": 6710, + "finalPrice": 170.84, + "finalQuantity": 6710, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 159961, + "totalBuyQuantity": 83818, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.740000000000009, + "perChange": 1.0289769367238375, + "prevClose": 169.1 + } + } + }, + { + "metadata": { + "symbol": "BHARTIARTL", + "identifier": "BHARTIARTLEQN", + "purpose": "DIVIDEND - RS 8 PER SHARE", + "lastPrice": 1600, + "change": 15.900000000000091, + "pChange": 1.0037245123413985, + "previousClose": 1584.1, + "finalQuantity": 97187, + "totalTurnover": 155499200, + "marketCap": 4240078035062.42, + "yearHigh": 1779, + "yearLow": 960, + "iep": 1600, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BHARTIARTLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1595, + "buyQty": 601, + "sellQty": 0 + }, + { + "price": 1595.9, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1596.1, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 1599, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1599.95, + "buyQty": 3070, + "sellQty": 0 + }, + { + "price": 1600, + "buyQty": 0, + "sellQty": 571, + "iep": true + }, + { + "price": 1600.55, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 1601, + "buyQty": 0, + "sellQty": 150 + }, + { + "price": 1602, + "buyQty": 0, + "sellQty": 701 + }, + { + "price": 1602.1, + "buyQty": 0, + "sellQty": 15 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1600, + "totalTradedVolume": 97187, + "finalPrice": 1600, + "finalQuantity": 97187, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 58624, + "totalBuyQuantity": 499242, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 15.900000000000091, + "perChange": 1.0037245123413985, + "prevClose": 1584.1 + } + } + }, + { + "metadata": { + "symbol": "IPCALAB", + "identifier": "IPCALABEQN", + "purpose": "INTERIM DIVIDEND - RS 2 PER SHARE", + "lastPrice": 1503.5, + "change": 14.900000000000091, + "pChange": 1.000940480988855, + "previousClose": 1488.6, + "finalQuantity": 1555, + "totalTurnover": 2337942.5, + "marketCap": 201396257145.44, + "yearHigh": 1708.65, + "yearLow": 1041, + "iep": 1503.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IPCALABEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1488.8, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1490, + "buyQty": 196, + "sellQty": 0 + }, + { + "price": 1493.8, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1499.55, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1500, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1503.5, + "buyQty": 0, + "sellQty": 155, + "iep": true + }, + { + "price": 1505, + "buyQty": 0, + "sellQty": 42 + }, + { + "price": 1509, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 1510, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1515, + "buyQty": 0, + "sellQty": 15 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1503.5, + "totalTradedVolume": 1555, + "finalPrice": 1503.5, + "finalQuantity": 1555, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 9260, + "totalBuyQuantity": 2950, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 14.900000000000091, + "perChange": 1.000940480988855, + "prevClose": 1488.6 + } + } + }, + { + "metadata": { + "symbol": "CYIENT", + "identifier": "CYIENTEQN", + "purpose": "INTERIM DIVIDEND - RS 12 PER SHARE", + "lastPrice": 1954.3, + "change": 19.25, + "pChange": 0.9948063357535982, + "previousClose": 1935.05, + "finalQuantity": 826, + "totalTurnover": 1614251.8, + "marketCap": 164122074887.51, + "yearHigh": 2458.95, + "yearLow": 1651.5, + "iep": 1954.3, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CYIENTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1945, + "buyQty": 35, + "sellQty": 0 + }, + { + "price": 1946.05, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 1947.6, + "buyQty": 18, + "sellQty": 0 + }, + { + "price": 1948, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 1950, + "buyQty": 83, + "sellQty": 0 + }, + { + "price": 1954.3, + "buyQty": 0, + "sellQty": 6, + "iep": true + }, + { + "price": 1954.35, + "buyQty": 0, + "sellQty": 13 + }, + { + "price": 1954.4, + "buyQty": 0, + "sellQty": 265 + }, + { + "price": 1954.45, + "buyQty": 0, + "sellQty": 8 + }, + { + "price": 1955, + "buyQty": 0, + "sellQty": 46 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1954.3, + "totalTradedVolume": 826, + "finalPrice": 1954.3, + "finalQuantity": 826, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 10190, + "totalBuyQuantity": 6362, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 19.25, + "perChange": 0.9948063357535982, + "prevClose": 1935.05 + } + } + }, + { + "metadata": { + "symbol": "MAXHEALTH", + "identifier": "MAXHEALTHEQN", + "purpose": "DIVIDEND - RS 1.5 PER SHARE", + "lastPrice": 1074.6, + "change": 10.349999999999909, + "pChange": 0.9725158562367778, + "previousClose": 1064.25, + "finalQuantity": 6461, + "totalTurnover": 6942990.6, + "marketCap": 788224275114.92, + "yearHigh": 1118, + "yearLow": 630.9, + "iep": 1074.6, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MAXHEALTHEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1066, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1067, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 1070, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 1074.5, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 1074.6, + "buyQty": 222, + "sellQty": 0, + "iep": true + }, + { + "price": 1074.8, + "buyQty": 0, + "sellQty": 274 + }, + { + "price": 1074.9, + "buyQty": 0, + "sellQty": 400 + }, + { + "price": 1075, + "buyQty": 0, + "sellQty": 303 + }, + { + "price": 1075.3, + "buyQty": 0, + "sellQty": 250 + }, + { + "price": 1076, + "buyQty": 0, + "sellQty": 2041 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1074.6, + "totalTradedVolume": 6461, + "finalPrice": 1074.6, + "finalQuantity": 6461, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 16534, + "totalBuyQuantity": 6768, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 10.349999999999909, + "perChange": 0.9725158562367778, + "prevClose": 1064.25 + } + } + }, + { + "metadata": { + "symbol": "INDIAMART", + "identifier": "INDIAMARTEQN", + "purpose": "DIVIDEND - RS 20 PER SHARE", + "lastPrice": 2387.95, + "change": 22.549999999999727, + "pChange": 0.9533271328316448, + "previousClose": 2365.4, + "finalQuantity": 91, + "totalTurnover": 217303.45, + "marketCap": 72061077127.14, + "yearHigh": 3198.4, + "yearLow": 2230, + "iep": 2387.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_INDIAMARTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2360, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 2365, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2365.4, + "buyQty": 23, + "sellQty": 0 + }, + { + "price": 2365.5, + "buyQty": 137, + "sellQty": 0 + }, + { + "price": 2372, + "buyQty": 31, + "sellQty": 0 + }, + { + "price": 2387.95, + "buyQty": 0, + "sellQty": 69, + "iep": true + }, + { + "price": 2388, + "buyQty": 0, + "sellQty": 84 + }, + { + "price": 2389, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 2390, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 2392.85, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2387.95, + "totalTradedVolume": 91, + "finalPrice": 2387.95, + "finalQuantity": 91, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 4652, + "totalBuyQuantity": 3610, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 22.549999999999727, + "perChange": 0.9533271328316448, + "prevClose": 2365.4 + } + } + }, + { + "metadata": { + "symbol": "COLPAL", + "identifier": "COLPALEQN", + "purpose": "INTERIM DIVIDEND - RS 24 PER SHARE", + "lastPrice": 2942.9, + "change": 27.15000000000009, + "pChange": 0.9311497899339823, + "previousClose": 2915.75, + "finalQuantity": 2667, + "totalTurnover": 7848714.3, + "marketCap": 385942925613.67, + "yearHigh": 3890, + "yearLow": 2262.55, + "iep": 2942.9, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_COLPALEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2930, + "buyQty": 8, + "sellQty": 0 + }, + { + "price": 2930.55, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2936.9, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 2937, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 2940, + "buyQty": 29, + "sellQty": 0 + }, + { + "price": 2942.9, + "buyQty": 0, + "sellQty": 550, + "iep": true + }, + { + "price": 2943, + "buyQty": 0, + "sellQty": 535 + }, + { + "price": 2944, + "buyQty": 0, + "sellQty": 570 + }, + { + "price": 2945, + "buyQty": 0, + "sellQty": 14 + }, + { + "price": 2946.95, + "buyQty": 0, + "sellQty": 3 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2942.9, + "totalTradedVolume": 2667, + "finalPrice": 2942.9, + "finalQuantity": 2667, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 6301, + "totalBuyQuantity": 12558, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 27.15000000000009, + "perChange": 0.9311497899339823, + "prevClose": 2915.75 + } + } + }, + { + "metadata": { + "symbol": "TATAELXSI", + "identifier": "TATAELXSIEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 70 PER SHARE", + "lastPrice": 7200, + "change": 61.05000000000018, + "pChange": 0.8551677767738979, + "previousClose": 7138.95, + "finalQuantity": 997, + "totalTurnover": 7178400, + "marketCap": 246839472373.27, + "yearHigh": 9200, + "yearLow": 6286, + "iep": 7200, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TATAELXSIEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 7145, + "buyQty": 60, + "sellQty": 0 + }, + { + "price": 7150, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 7175.05, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 7176.6, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 7190, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 7200, + "buyQty": 0, + "sellQty": 123, + "iep": true + }, + { + "price": 7201, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 7205, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 7208, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 7210, + "buyQty": 0, + "sellQty": 76 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 7200, + "totalTradedVolume": 997, + "finalPrice": 7200, + "finalQuantity": 997, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 7646, + "totalBuyQuantity": 3342, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 61.05000000000018, + "perChange": 0.8551677767738979, + "prevClose": 7138.95 + } + } + }, + { + "metadata": { + "symbol": "GAIL", + "identifier": "GAILEQN", + "purpose": "INTERIM DIVIDEND - RS 5.50 PER SHARE", + "lastPrice": 208.45, + "change": 1.7199999999999989, + "pChange": 0.8320030958254723, + "previousClose": 206.73, + "finalQuantity": 65778, + "totalTurnover": 13711424.1, + "marketCap": 559626275099.42, + "yearHigh": 246.3, + "yearLow": 134.85, + "iep": 208.45, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GAILEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 207.25, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 207.5, + "buyQty": 1755, + "sellQty": 0 + }, + { + "price": 207.51, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 208, + "buyQty": 980, + "sellQty": 0 + }, + { + "price": 208.01, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 208.45, + "buyQty": 0, + "sellQty": 26776, + "iep": true + }, + { + "price": 208.5, + "buyQty": 0, + "sellQty": 31920 + }, + { + "price": 208.55, + "buyQty": 0, + "sellQty": 815 + }, + { + "price": 208.6, + "buyQty": 0, + "sellQty": 7 + }, + { + "price": 208.75, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 208.45, + "totalTradedVolume": 65778, + "finalPrice": 208.45, + "finalQuantity": 65778, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 332527, + "totalBuyQuantity": 138510, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.7199999999999989, + "perChange": 0.8320030958254723, + "prevClose": 206.73 + } + } + }, + { + "metadata": { + "symbol": "TIINDIA", + "identifier": "TIINDIAEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 1.50 PER SHARE", + "lastPrice": 3690, + "change": 30.34999999999991, + "pChange": 0.8293142786878501, + "previousClose": 3659.65, + "finalQuantity": 329, + "totalTurnover": 1214010, + "marketCap": 387875523565.09, + "yearHigh": 4810.8, + "yearLow": 3260.25, + "iep": 3690, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TIINDIAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3665, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 3670, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 3675, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 3680, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3685.05, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 3690, + "buyQty": 0, + "sellQty": 203, + "iep": true + }, + { + "price": 3694, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 3695, + "buyQty": 0, + "sellQty": 62 + }, + { + "price": 3697, + "buyQty": 0, + "sellQty": 302 + }, + { + "price": 3698, + "buyQty": 0, + "sellQty": 51 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3690, + "totalTradedVolume": 329, + "finalPrice": 3690, + "finalQuantity": 329, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 10988, + "totalBuyQuantity": 2895, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 30.34999999999991, + "perChange": 0.8293142786878501, + "prevClose": 3659.65 + } + } + }, + { + "metadata": { + "symbol": "ZYDUSLIFE", + "identifier": "ZYDUSLIFEEQN", + "purpose": "DIVIDEND - RS 3 PER SHARE", + "lastPrice": 978.1, + "change": 7.75, + "pChange": 0.798680888339259, + "previousClose": 970.35, + "finalQuantity": 3620, + "totalTurnover": 3540722, + "marketCap": 241953815962.03, + "yearHigh": 1324.3, + "yearLow": 630, + "iep": 978.1, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ZYDUSLIFEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 971.05, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 972.8, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 975, + "buyQty": 35, + "sellQty": 0 + }, + { + "price": 978, + "buyQty": 60, + "sellQty": 0 + }, + { + "price": 978.1, + "buyQty": 9, + "sellQty": 0, + "iep": true + }, + { + "price": 978.15, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 979, + "buyQty": 0, + "sellQty": 702 + }, + { + "price": 979.1, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 979.6, + "buyQty": 0, + "sellQty": 380 + }, + { + "price": 979.9, + "buyQty": 0, + "sellQty": 500 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 978.1, + "totalTradedVolume": 3620, + "finalPrice": 978.1, + "finalQuantity": 3620, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 24251, + "totalBuyQuantity": 19301, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 7.75, + "perChange": 0.798680888339259, + "prevClose": 970.35 + } + } + }, + { + "metadata": { + "symbol": "OBEROIRLTY", + "identifier": "OBEROIRLTYEQN", + "purpose": "INTERIM DIVIDEND - RS 2 PER SHARE", + "lastPrice": 2182, + "change": 17.25, + "pChange": 0.7968587596720176, + "previousClose": 2164.75, + "finalQuantity": 3657, + "totalTurnover": 7979574, + "marketCap": 254474088174.3, + "yearHigh": 2177, + "yearLow": 1268.15, + "iep": 2182, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_OBEROIRLTYEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2174, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 2175, + "buyQty": 677, + "sellQty": 0 + }, + { + "price": 2180, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 2180.05, + "buyQty": 291, + "sellQty": 0 + }, + { + "price": 2182, + "buyQty": 356, + "sellQty": 0, + "iep": true + }, + { + "price": 2182.4, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 2183, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 2184, + "buyQty": 0, + "sellQty": 22 + }, + { + "price": 2185, + "buyQty": 0, + "sellQty": 207 + }, + { + "price": 2185.6, + "buyQty": 0, + "sellQty": 200 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2182, + "totalTradedVolume": 3657, + "finalPrice": 2182, + "finalQuantity": 3657, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 13232, + "totalBuyQuantity": 9026, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 17.25, + "perChange": 0.7968587596720176, + "prevClose": 2164.75 + } + } + }, + { + "metadata": { + "symbol": "PVRINOX", + "identifier": "PVRINOXEQN", + "purpose": " RIGHTS 7:94 @ PREMIUM RS 774/-", + "lastPrice": 1610, + "change": 12.299999999999955, + "pChange": 0.7698566689616295, + "previousClose": 1597.7, + "finalQuantity": 8630, + "totalTurnover": 13894300, + "marketCap": 113097886778.42, + "yearHigh": 1830.4, + "yearLow": 1204.2, + "iep": 1610, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PVRINOXEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1600, + "buyQty": 290, + "sellQty": 0 + }, + { + "price": 1602, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1605.65, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 1609, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 1610, + "buyQty": 221, + "sellQty": 0, + "iep": true + }, + { + "price": 1611, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 1615, + "buyQty": 0, + "sellQty": 224 + }, + { + "price": 1616, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1618, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 1619, + "buyQty": 0, + "sellQty": 250 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1610, + "totalTradedVolume": 8630, + "finalPrice": 1610, + "finalQuantity": 8630, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 30764, + "totalBuyQuantity": 6531, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 12.299999999999955, + "perChange": 0.7698566689616295, + "prevClose": 1597.7 + } + } + }, + { + "metadata": { + "symbol": "AMBUJACEM", + "identifier": "AMBUJACEMEQN", + "purpose": "DIVIDEND - RS 2 PER SHARE", + "lastPrice": 569, + "change": 4.2999999999999545, + "pChange": 0.7614662652735885, + "previousClose": 564.7, + "finalQuantity": 3200, + "totalTurnover": 1820800, + "marketCap": 340115156050.87, + "yearHigh": 706.95, + "yearLow": 453.05, + "iep": 569, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_AMBUJACEMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 567, + "buyQty": 177, + "sellQty": 0 + }, + { + "price": 567.7, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 568, + "buyQty": 170, + "sellQty": 0 + }, + { + "price": 568.2, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 568.6, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 569, + "buyQty": 0, + "sellQty": 878, + "iep": true + }, + { + "price": 569.5, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 569.8, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 569.9, + "buyQty": 0, + "sellQty": 429 + }, + { + "price": 569.95, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 569, + "totalTradedVolume": 3200, + "finalPrice": 569, + "finalQuantity": 3200, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 44049, + "totalBuyQuantity": 25472, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4.2999999999999545, + "perChange": 0.7614662652735885, + "prevClose": 564.7 + } + } + }, + { + "metadata": { + "symbol": "YESBANK", + "identifier": "YESBANKEQN", + "purpose": " ANNUAL GENERAL MEETING/ DIVIDEND - RS 2 PER SHARE", + "lastPrice": 21.39, + "change": 0.16000000000000014, + "pChange": 0.7536504945831377, + "previousClose": 21.23, + "finalQuantity": 611029, + "totalTurnover": 13069910.31, + "marketCap": 399268585068.79, + "yearHigh": 32.85, + "yearLow": 19.02, + "iep": 21.39, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_YESBANKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 21.31, + "buyQty": 9200, + "sellQty": 0 + }, + { + "price": 21.33, + "buyQty": 1001, + "sellQty": 0 + }, + { + "price": 21.34, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 21.35, + "buyQty": 7105, + "sellQty": 0 + }, + { + "price": 21.37, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 21.39, + "buyQty": 0, + "sellQty": 141900, + "iep": true + }, + { + "price": 21.4, + "buyQty": 0, + "sellQty": 39777 + }, + { + "price": 21.41, + "buyQty": 0, + "sellQty": 312 + }, + { + "price": 21.42, + "buyQty": 0, + "sellQty": 3501 + }, + { + "price": 21.43, + "buyQty": 0, + "sellQty": 1001 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 21.39, + "totalTradedVolume": 611029, + "finalPrice": 21.39, + "finalQuantity": 611029, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 4832900, + "totalBuyQuantity": 3521905, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.16000000000000014, + "perChange": 0.7536504945831377, + "prevClose": 21.23 + } + } + }, + { + "metadata": { + "symbol": "ABCAPITAL", + "identifier": "ABCAPITALEQN", + "purpose": " ANNUAL GENERAL MEETING", + "lastPrice": 200.4, + "change": 1.4800000000000182, + "pChange": 0.7440176955560116, + "previousClose": 198.92, + "finalQuantity": 8426, + "totalTurnover": 1688570.4, + "marketCap": 141397445341.56, + "yearHigh": 246.9, + "yearLow": 155, + "iep": 200.4, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ABCAPITALEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 199.2, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 199.5, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 199.9, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 200, + "buyQty": 250, + "sellQty": 0 + }, + { + "price": 200.1, + "buyQty": 426, + "sellQty": 0 + }, + { + "price": 200.4, + "buyQty": 0, + "sellQty": 942, + "iep": true + }, + { + "price": 200.5, + "buyQty": 0, + "sellQty": 42 + }, + { + "price": 200.6, + "buyQty": 0, + "sellQty": 2000 + }, + { + "price": 200.7, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 200.75, + "buyQty": 0, + "sellQty": 12 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 200.4, + "totalTradedVolume": 8426, + "finalPrice": 200.4, + "finalQuantity": 8426, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 233373, + "totalBuyQuantity": 70138, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.4800000000000182, + "perChange": 0.7440176955560116, + "prevClose": 198.92 + } + } + }, + { + "metadata": { + "symbol": "HDFCAMC", + "identifier": "HDFCAMCEQN", + "purpose": "INTERIM DIVIDEND - RS 70 PER SHARE", + "lastPrice": 4395, + "change": 32.399999999999636, + "pChange": 0.7426763856415814, + "previousClose": 4362.6, + "finalQuantity": 888, + "totalTurnover": 3902760, + "marketCap": 439773053949.45, + "yearHigh": 4864, + "yearLow": 2931.25, + "iep": 4395, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HDFCAMCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4374, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 4375, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 4380, + "buyQty": 51, + "sellQty": 0 + }, + { + "price": 4390, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 4391, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 4395, + "buyQty": 0, + "sellQty": 32, + "iep": true + }, + { + "price": 4398, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 4398.6, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 4399.9, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 4400, + "buyQty": 0, + "sellQty": 21 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4395, + "totalTradedVolume": 888, + "finalPrice": 4395, + "finalQuantity": 888, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 3304, + "totalBuyQuantity": 3821, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 32.399999999999636, + "perChange": 0.7426763856415814, + "prevClose": 4362.6 + } + } + }, + { + "metadata": { + "symbol": "GRANULES", + "identifier": "GRANULESEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 1.50 PER SHARE", + "lastPrice": 547.05, + "change": 4, + "pChange": 0.7365804253751957, + "previousClose": 543.05, + "finalQuantity": 9954, + "totalTurnover": 5445335.7, + "marketCap": 78135566179.51, + "yearHigh": 721, + "yearLow": 365.45, + "iep": 547.05, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GRANULESEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 545.1, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 545.65, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 546, + "buyQty": 45, + "sellQty": 0 + }, + { + "price": 547, + "buyQty": 27650, + "sellQty": 0 + }, + { + "price": 547.05, + "buyQty": 861, + "sellQty": 0, + "iep": true + }, + { + "price": 547.3, + "buyQty": 0, + "sellQty": 400 + }, + { + "price": 547.4, + "buyQty": 0, + "sellQty": 1017 + }, + { + "price": 547.5, + "buyQty": 0, + "sellQty": 250 + }, + { + "price": 547.8, + "buyQty": 0, + "sellQty": 1100 + }, + { + "price": 547.9, + "buyQty": 0, + "sellQty": 442 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 547.05, + "totalTradedVolume": 9954, + "finalPrice": 547.05, + "finalQuantity": 9954, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 138362, + "totalBuyQuantity": 120619, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4, + "perChange": 0.7365804253751957, + "prevClose": 543.05 + } + } + }, + { + "metadata": { + "symbol": "HINDPETRO", + "identifier": "HINDPETROEQN", + "purpose": "DIVIDEND - RS 11 PER SHARE", + "lastPrice": 390.5, + "change": 2.8500000000000227, + "pChange": 0.7351992776989611, + "previousClose": 387.65, + "finalQuantity": 6737, + "totalTurnover": 2630798.5, + "marketCap": 371237763601.65, + "yearHigh": 457.15, + "yearLow": 236.67, + "iep": 390.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HINDPETROEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 387.6, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 387.65, + "buyQty": 735, + "sellQty": 0 + }, + { + "price": 388, + "buyQty": 505, + "sellQty": 0 + }, + { + "price": 388.1, + "buyQty": 9, + "sellQty": 0 + }, + { + "price": 390, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 390.5, + "buyQty": 0, + "sellQty": 2828, + "iep": true + }, + { + "price": 390.55, + "buyQty": 0, + "sellQty": 2025 + }, + { + "price": 390.9, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 391, + "buyQty": 0, + "sellQty": 597 + }, + { + "price": 391.5, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 390.5, + "totalTradedVolume": 6737, + "finalPrice": 390.5, + "finalQuantity": 6737, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 66729, + "totalBuyQuantity": 35010, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.8500000000000227, + "perChange": 0.7351992776989611, + "prevClose": 387.65 + } + } + }, + { + "metadata": { + "symbol": "DEEPAKNTR", + "identifier": "DEEPAKNTREQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 7.50 PER SHARE", + "lastPrice": 2714, + "change": 19.800000000000182, + "pChange": 0.7349120332566321, + "previousClose": 2694.2, + "finalQuantity": 579, + "totalTurnover": 1571406, + "marketCap": 184611938212.54, + "yearHigh": 3169, + "yearLow": 2021, + "iep": 2714, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DEEPAKNTREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2690, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 2694.2, + "buyQty": 19, + "sellQty": 0 + }, + { + "price": 2698.3, + "buyQty": 18, + "sellQty": 0 + }, + { + "price": 2700, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2706, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 2714, + "buyQty": 0, + "sellQty": 94, + "iep": true + }, + { + "price": 2714.2, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 2714.65, + "buyQty": 0, + "sellQty": 28 + }, + { + "price": 2714.9, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 2715, + "buyQty": 0, + "sellQty": 40 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2714, + "totalTradedVolume": 579, + "finalPrice": 2714, + "finalQuantity": 579, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 8570, + "totalBuyQuantity": 2283, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 19.800000000000182, + "perChange": 0.7349120332566321, + "prevClose": 2694.2 + } + } + }, + { + "metadata": { + "symbol": "TATACOMM", + "identifier": "TATACOMMEQN", + "purpose": "DIVIDEND - RS 16.70 PER SHARE", + "lastPrice": 1814, + "change": 13.150000000000091, + "pChange": 0.7302107338201456, + "previousClose": 1800.85, + "finalQuantity": 338, + "totalTurnover": 613132, + "marketCap": 211425074025, + "yearHigh": 2175, + "yearLow": 1585.55, + "iep": 1814, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TATACOMMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1800, + "buyQty": 532, + "sellQty": 0 + }, + { + "price": 1800.85, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 1801, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 1802, + "buyQty": 650, + "sellQty": 0 + }, + { + "price": 1805, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1814, + "buyQty": 0, + "sellQty": 164, + "iep": true + }, + { + "price": 1815, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1817, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1818, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 1819.3, + "buyQty": 0, + "sellQty": 1000 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1814, + "totalTradedVolume": 338, + "finalPrice": 1814, + "finalQuantity": 338, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 14742, + "totalBuyQuantity": 2733, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 13.150000000000091, + "perChange": 0.7302107338201456, + "prevClose": 1800.85 + } + } + }, + { + "metadata": { + "symbol": "ADANIGREEN", + "identifier": "ADANIGREENEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 1270, + "change": 9.150000000000091, + "pChange": 0.7257009160487046, + "previousClose": 1260.85, + "finalQuantity": 8691, + "totalTurnover": 11037570, + "marketCap": 454315879805.44, + "yearHigh": 2174.1, + "yearLow": 870.25, + "iep": 1270, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ADANIGREENEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1266, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 1266.1, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 1267, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1268, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 1269.85, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1270, + "buyQty": 0, + "sellQty": 552, + "iep": true + }, + { + "price": 1270.6, + "buyQty": 0, + "sellQty": 250 + }, + { + "price": 1271.9, + "buyQty": 0, + "sellQty": 12 + }, + { + "price": 1272.7, + "buyQty": 0, + "sellQty": 400 + }, + { + "price": 1273.85, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1270, + "totalTradedVolume": 8691, + "finalPrice": 1270, + "finalQuantity": 8691, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 94626, + "totalBuyQuantity": 37368, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 9.150000000000091, + "perChange": 0.7257009160487046, + "prevClose": 1260.85 + } + } + }, + { + "metadata": { + "symbol": "INDUSINDBK", + "identifier": "INDUSINDBKEQN", + "purpose": "DIVIDEND - RS 16.50 PER SHARE", + "lastPrice": 1006, + "change": 7.149999999999977, + "pChange": 0.7158231966761753, + "previousClose": 998.85, + "finalQuantity": 9001, + "totalTurnover": 9055006, + "marketCap": 659642155716.91, + "yearHigh": 1694.5, + "yearLow": 966.4, + "iep": 1006, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_INDUSINDBKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1000.95, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1002.1, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 1003, + "buyQty": 21, + "sellQty": 0 + }, + { + "price": 1004, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1005, + "buyQty": 370, + "sellQty": 0 + }, + { + "price": 1006, + "buyQty": 0, + "sellQty": 371, + "iep": true + }, + { + "price": 1006.4, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1006.5, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1006.65, + "buyQty": 0, + "sellQty": 230 + }, + { + "price": 1006.9, + "buyQty": 0, + "sellQty": 26 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1006, + "totalTradedVolume": 9001, + "finalPrice": 1006, + "finalQuantity": 9001, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 62913, + "totalBuyQuantity": 88364, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 7.149999999999977, + "perChange": 0.7158231966761753, + "prevClose": 998.85 + } + } + }, + { + "metadata": { + "symbol": "DLF", + "identifier": "DLFEQN", + "purpose": "DIVIDEND - RS 5 PER SHARE", + "lastPrice": 854, + "change": 6.0499999999999545, + "pChange": 0.7134854649448616, + "previousClose": 847.95, + "finalQuantity": 13102, + "totalTurnover": 11189108, + "marketCap": 541697248152.37, + "yearHigh": 967.6, + "yearLow": 632.8, + "iep": 854, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DLFEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 847, + "buyQty": 2111, + "sellQty": 0 + }, + { + "price": 847.5, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 847.95, + "buyQty": 1429, + "sellQty": 0 + }, + { + "price": 849, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 852, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 854, + "buyQty": 0, + "sellQty": 7592, + "iep": true + }, + { + "price": 854.2, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 854.95, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 855, + "buyQty": 0, + "sellQty": 2581 + }, + { + "price": 855.35, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 854, + "totalTradedVolume": 13102, + "finalPrice": 854, + "finalQuantity": 13102, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 64292, + "totalBuyQuantity": 22831, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 6.0499999999999545, + "perChange": 0.7134854649448616, + "prevClose": 847.95 + } + } + }, + { + "metadata": { + "symbol": "METROPOLIS", + "identifier": "METROPOLISEQN", + "purpose": "INTERIM DIVIDEND - RS 4 PER SHARE", + "lastPrice": 2120, + "change": 15, + "pChange": 0.7125890736342043, + "previousClose": 2105, + "finalQuantity": 121, + "totalTurnover": 256520, + "marketCap": 54186549540.67, + "yearHigh": 2318.3, + "yearLow": 1450, + "iep": 2120, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_METROPOLISEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2102, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 2105, + "buyQty": 32, + "sellQty": 0 + }, + { + "price": 2105.05, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 2110, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 2120, + "buyQty": 73, + "sellQty": 0, + "iep": true + }, + { + "price": 2120.05, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 2121.95, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 2122.9, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 2123, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 2124.95, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2120, + "totalTradedVolume": 121, + "finalPrice": 2120, + "finalQuantity": 121, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 2482, + "totalBuyQuantity": 768, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 15, + "perChange": 0.7125890736342043, + "prevClose": 2105 + } + } + }, + { + "metadata": { + "symbol": "POLICYBZR", + "identifier": "POLICYBZREQN", + "purpose": null, + "lastPrice": 2018.8, + "change": 14.099999999999909, + "pChange": 0.7033471342345442, + "previousClose": 2004.7, + "finalQuantity": 5407, + "totalTurnover": 10915651.6, + "marketCap": 634736300201.06, + "yearHigh": 2018.85, + "yearLow": 725.25, + "iep": 2018.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_POLICYBZREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2004.7, + "buyQty": 148, + "sellQty": 0 + }, + { + "price": 2005, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 2006, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 2008, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 2010.1, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 2018.8, + "buyQty": 0, + "sellQty": 142, + "iep": true + }, + { + "price": 2018.85, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 2019, + "buyQty": 0, + "sellQty": 1000 + }, + { + "price": 2019.05, + "buyQty": 0, + "sellQty": 45 + }, + { + "price": 2019.35, + "buyQty": 0, + "sellQty": 15 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2018.8, + "totalTradedVolume": 5407, + "finalPrice": 2018.8, + "finalQuantity": 5407, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 16972, + "totalBuyQuantity": 3344, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 14.099999999999909, + "perChange": 0.7033471342345442, + "prevClose": 2004.7 + } + } + }, + { + "metadata": { + "symbol": "ZOMATO", + "identifier": "ZOMATOEQN", + "purpose": null, + "lastPrice": 288.25, + "change": 2, + "pChange": 0.6986899563318777, + "previousClose": 286.25, + "finalQuantity": 198481, + "totalTurnover": 57212148.25, + "marketCap": 1944655829563.7, + "yearHigh": 298.25, + "yearLow": 114.15, + "iep": 288.25, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ZOMATOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 287.7, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 288, + "buyQty": 7456, + "sellQty": 0 + }, + { + "price": 288.1, + "buyQty": 166, + "sellQty": 0 + }, + { + "price": 288.15, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 288.2, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 288.25, + "buyQty": 0, + "sellQty": 8168, + "iep": true + }, + { + "price": 288.3, + "buyQty": 0, + "sellQty": 31513 + }, + { + "price": 288.35, + "buyQty": 0, + "sellQty": 3100 + }, + { + "price": 288.4, + "buyQty": 0, + "sellQty": 1400 + }, + { + "price": 288.45, + "buyQty": 0, + "sellQty": 125 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 288.25, + "totalTradedVolume": 198481, + "finalPrice": 288.25, + "finalQuantity": 198481, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 1068615, + "totalBuyQuantity": 393117, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2, + "perChange": 0.6986899563318777, + "prevClose": 286.25 + } + } + }, + { + "metadata": { + "symbol": "BANKINDIA", + "identifier": "BANKINDIAEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 2.80 PER SHARE", + "lastPrice": 118.7, + "change": 0.8200000000000074, + "pChange": 0.6956226671191105, + "previousClose": 117.88, + "finalQuantity": 46833, + "totalTurnover": 5559077.1, + "marketCap": 142810307550.24, + "yearHigh": 157.95, + "yearLow": 96, + "iep": 118.7, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BANKINDIAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 118.25, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 118.3, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 118.5, + "buyQty": 400, + "sellQty": 0 + }, + { + "price": 118.6, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 118.65, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 118.7, + "buyQty": 0, + "sellQty": 7904, + "iep": true + }, + { + "price": 118.75, + "buyQty": 0, + "sellQty": 515 + }, + { + "price": 118.77, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 118.8, + "buyQty": 0, + "sellQty": 7610 + }, + { + "price": 118.81, + "buyQty": 0, + "sellQty": 1000 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 118.7, + "totalTradedVolume": 46833, + "finalPrice": 118.7, + "finalQuantity": 46833, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 1799266, + "totalBuyQuantity": 148164, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.8200000000000074, + "perChange": 0.6956226671191105, + "prevClose": 117.88 + } + } + }, + { + "metadata": { + "symbol": "MOTHERSON", + "identifier": "MOTHERSONEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RE 0.80 PER SHARE", + "lastPrice": 163.6, + "change": 1.1200000000000045, + "pChange": 0.6893156080748428, + "previousClose": 162.48, + "finalQuantity": 17948, + "totalTurnover": 2936292.8, + "marketCap": 453291666399.66, + "yearHigh": 216.99, + "yearLow": 90.2, + "iep": 163.6, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MOTHERSONEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 163.45, + "buyQty": 2000, + "sellQty": 0 + }, + { + "price": 163.5, + "buyQty": 1303, + "sellQty": 0 + }, + { + "price": 163.55, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 163.59, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 163.6, + "buyQty": 35, + "sellQty": 0, + "iep": true + }, + { + "price": 163.7, + "buyQty": 0, + "sellQty": 178 + }, + { + "price": 163.75, + "buyQty": 0, + "sellQty": 2583 + }, + { + "price": 163.8, + "buyQty": 0, + "sellQty": 3090 + }, + { + "price": 163.9, + "buyQty": 0, + "sellQty": 1300 + }, + { + "price": 163.98, + "buyQty": 0, + "sellQty": 500 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 163.6, + "totalTradedVolume": 17948, + "finalPrice": 163.6, + "finalQuantity": 17948, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 370276, + "totalBuyQuantity": 181276, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.1200000000000045, + "perChange": 0.6893156080748428, + "prevClose": 162.48 + } + } + }, + { + "metadata": { + "symbol": "LICI", + "identifier": "LICIEQN", + "purpose": "DIVIDEND - RS 6 PER SHARE", + "lastPrice": 978, + "change": 6.649999999999977, + "pChange": 0.6846141967364984, + "previousClose": 971.35, + "finalQuantity": 5982, + "totalTurnover": 5850396, + "marketCap": 215442071691.46, + "yearHigh": 1222, + "yearLow": 680, + "iep": 978, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LICIEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 974, + "buyQty": 14, + "sellQty": 0 + }, + { + "price": 974.4, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 975, + "buyQty": 136, + "sellQty": 0 + }, + { + "price": 975.55, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 976.5, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 978, + "buyQty": 0, + "sellQty": 358, + "iep": true + }, + { + "price": 978.5, + "buyQty": 0, + "sellQty": 35 + }, + { + "price": 978.6, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 978.7, + "buyQty": 0, + "sellQty": 1000 + }, + { + "price": 978.8, + "buyQty": 0, + "sellQty": 405 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 978, + "totalTradedVolume": 5982, + "finalPrice": 978, + "finalQuantity": 5982, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 143005, + "totalBuyQuantity": 30560, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 6.649999999999977, + "perChange": 0.6846141967364984, + "prevClose": 971.35 + } + } + }, + { + "metadata": { + "symbol": "CHAMBLFERT", + "identifier": "CHAMBLFERTEQN", + "purpose": "INTERIM DIVIDEND - RS 5 PER SHARE", + "lastPrice": 538, + "change": 3.6499999999999773, + "pChange": 0.6830728922990507, + "previousClose": 534.35, + "finalQuantity": 7134, + "totalTurnover": 3838092, + "marketCap": 80700158279.63, + "yearHigh": 574.35, + "yearLow": 321.45, + "iep": 538, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CHAMBLFERTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 535, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 535.35, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 536, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 536.2, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 536.6, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 538, + "buyQty": 0, + "sellQty": 122, + "iep": true + }, + { + "price": 538.5, + "buyQty": 0, + "sellQty": 600 + }, + { + "price": 538.55, + "buyQty": 0, + "sellQty": 900 + }, + { + "price": 538.6, + "buyQty": 0, + "sellQty": 800 + }, + { + "price": 538.65, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 538, + "totalTradedVolume": 7134, + "finalPrice": 538, + "finalQuantity": 7134, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 62652, + "totalBuyQuantity": 13929, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.6499999999999773, + "perChange": 0.6830728922990507, + "prevClose": 534.35 + } + } + }, + { + "metadata": { + "symbol": "NAVINFLUOR", + "identifier": "NAVINFLUOREQN", + "purpose": "INTERIM DIVIDEND - RS 5 PER SHARE", + "lastPrice": 3617, + "change": 24.34999999999991, + "pChange": 0.6777726747665347, + "previousClose": 3592.65, + "finalQuantity": 58, + "totalTurnover": 209786, + "marketCap": 124261988157.21, + "yearHigh": 3979.45, + "yearLow": 2875.95, + "iep": 3617, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NAVINFLUOREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3586.05, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 3590, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 3592.65, + "buyQty": 19, + "sellQty": 0 + }, + { + "price": 3600, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 3612, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 3617, + "buyQty": 0, + "sellQty": 28, + "iep": true + }, + { + "price": 3617.15, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 3618.05, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 3618.15, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 3618.95, + "buyQty": 0, + "sellQty": 12 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3617, + "totalTradedVolume": 58, + "finalPrice": 3617, + "finalQuantity": 58, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 6578, + "totalBuyQuantity": 1492, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 24.34999999999991, + "perChange": 0.6777726747665347, + "prevClose": 3592.65 + } + } + }, + { + "metadata": { + "symbol": "TRENT", + "identifier": "TRENTEQN", + "purpose": "DIVIDEND - RS 3.20 PER SHARE", + "lastPrice": 6869.95, + "change": 46.149999999999636, + "pChange": 0.6763093877311708, + "previousClose": 6823.8, + "finalQuantity": 2093, + "totalTurnover": 14378805.35, + "marketCap": 1516355331936.73, + "yearHigh": 8345, + "yearLow": 2772.25, + "iep": 6869.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TRENTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 6830.05, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 6835, + "buyQty": 96, + "sellQty": 0 + }, + { + "price": 6840, + "buyQty": 45, + "sellQty": 0 + }, + { + "price": 6850, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 6861, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 6869.95, + "buyQty": 0, + "sellQty": 22, + "iep": true + }, + { + "price": 6870, + "buyQty": 0, + "sellQty": 135 + }, + { + "price": 6875, + "buyQty": 0, + "sellQty": 6 + }, + { + "price": 6875.55, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 6879, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 6869.95, + "totalTradedVolume": 2093, + "finalPrice": 6869.95, + "finalQuantity": 2093, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 12790, + "totalBuyQuantity": 3660, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 46.149999999999636, + "perChange": 0.6763093877311708, + "prevClose": 6823.8 + } + } + }, + { + "metadata": { + "symbol": "CONCOR", + "identifier": "CONCOREQN", + "purpose": "INTERIM DIVIDEND - RS 3.25 PER SHARE", + "lastPrice": 849.9, + "change": 5.649999999999977, + "pChange": 0.6692330470832073, + "previousClose": 844.25, + "finalQuantity": 2099, + "totalTurnover": 1783940.1, + "marketCap": 232385161662.84, + "yearHigh": 1180, + "yearLow": 757.25, + "iep": 849.9, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CONCOREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 845, + "buyQty": 119, + "sellQty": 0 + }, + { + "price": 846, + "buyQty": 260, + "sellQty": 0 + }, + { + "price": 846.5, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 848, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 848.15, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 849.9, + "buyQty": 0, + "sellQty": 3333, + "iep": true + }, + { + "price": 849.95, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 850, + "buyQty": 0, + "sellQty": 2253 + }, + { + "price": 851.25, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 851.8, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 849.9, + "totalTradedVolume": 2099, + "finalPrice": 849.9, + "finalQuantity": 2099, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 33984, + "totalBuyQuantity": 12535, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 5.649999999999977, + "perChange": 0.6692330470832073, + "prevClose": 844.25 + } + } + }, + { + "metadata": { + "symbol": "SIEMENS", + "identifier": "SIEMENSEQN", + "purpose": "DIVIDEND - RS 10 PER SHARE", + "lastPrice": 7800, + "change": 50.80000000000018, + "pChange": 0.6555515408042144, + "previousClose": 7749.2, + "finalQuantity": 928, + "totalTurnover": 7238400, + "marketCap": 682303185356.58, + "yearHigh": 8129.9, + "yearLow": 3740.6, + "iep": 7800, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SIEMENSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 7750, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 7751, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 7752, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 7770, + "buyQty": 210, + "sellQty": 0 + }, + { + "price": 7790, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 7800, + "buyQty": 0, + "sellQty": 58, + "iep": true + }, + { + "price": 7810, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 7811.35, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 7811.45, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 7811.6, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 7800, + "totalTradedVolume": 928, + "finalPrice": 7800, + "finalQuantity": 928, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 6466, + "totalBuyQuantity": 1016, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 50.80000000000018, + "perChange": 0.6555515408042144, + "prevClose": 7749.2 + } + } + }, + { + "metadata": { + "symbol": "LICHSGFIN", + "identifier": "LICHSGFINEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 9 PER SHARE", + "lastPrice": 642.4, + "change": 4.149999999999977, + "pChange": 0.6502154328241249, + "previousClose": 638.25, + "finalQuantity": 914, + "totalTurnover": 587153.6, + "marketCap": 191379430973.17, + "yearHigh": 826.75, + "yearLow": 496, + "iep": 642.4, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LICHSGFINEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 639, + "buyQty": 271, + "sellQty": 0 + }, + { + "price": 639.6, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 640, + "buyQty": 451, + "sellQty": 0 + }, + { + "price": 640.6, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 641.6, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 642.4, + "buyQty": 0, + "sellQty": 946, + "iep": true + }, + { + "price": 642.45, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 642.95, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 643, + "buyQty": 0, + "sellQty": 103 + }, + { + "price": 643.9, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 642.4, + "totalTradedVolume": 914, + "finalPrice": 642.4, + "finalQuantity": 914, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 76052, + "totalBuyQuantity": 22149, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4.149999999999977, + "perChange": 0.6502154328241249, + "prevClose": 638.25 + } + } + }, + { + "metadata": { + "symbol": "AARTIIND", + "identifier": "AARTIINDEQN", + "purpose": "DIVIDEND - RE 1 PER SHARE", + "lastPrice": 450, + "change": 2.8999999999999773, + "pChange": 0.6486244687989213, + "previousClose": 447.1, + "finalQuantity": 3813, + "totalTurnover": 1715850, + "marketCap": 90037266411.68, + "yearHigh": 769.25, + "yearLow": 422.6, + "iep": 450, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_AARTIINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 447.75, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 447.8, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 447.9, + "buyQty": 61, + "sellQty": 0 + }, + { + "price": 448, + "buyQty": 151, + "sellQty": 0 + }, + { + "price": 448.05, + "buyQty": 8, + "sellQty": 0 + }, + { + "price": 450, + "buyQty": 0, + "sellQty": 179, + "iep": true + }, + { + "price": 450.05, + "buyQty": 0, + "sellQty": 119 + }, + { + "price": 450.1, + "buyQty": 0, + "sellQty": 22 + }, + { + "price": 450.15, + "buyQty": 0, + "sellQty": 92 + }, + { + "price": 450.2, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 450, + "totalTradedVolume": 3813, + "finalPrice": 450, + "finalQuantity": 3813, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 45207, + "totalBuyQuantity": 37173, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.8999999999999773, + "perChange": 0.6486244687989213, + "prevClose": 447.1 + } + } + }, + { + "metadata": { + "symbol": "SHRIRAMFIN", + "identifier": "SHRIRAMFINEQN", + "purpose": "INTERIM DIVIDEND - RS 22 PER SHARE", + "lastPrice": 3152.45, + "change": 20.149999999999636, + "pChange": 0.6432972576062201, + "previousClose": 3132.3, + "finalQuantity": 2057, + "totalTurnover": 6484589.65, + "marketCap": 873841372351.67, + "yearHigh": 3652.25, + "yearLow": 1972, + "iep": 3152.45, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SHRIRAMFINEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3140.2, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 3140.3, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 3144.3, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 3150, + "buyQty": 22, + "sellQty": 0 + }, + { + "price": 3152, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 3152.45, + "buyQty": 0, + "sellQty": 9, + "iep": true + }, + { + "price": 3152.5, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 3152.65, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 3158.9, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 3159.95, + "buyQty": 0, + "sellQty": 25 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3152.45, + "totalTradedVolume": 2057, + "finalPrice": 3152.45, + "finalQuantity": 2057, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 8485, + "totalBuyQuantity": 5884, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 20.149999999999636, + "perChange": 0.6432972576062201, + "prevClose": 3132.3 + } + } + }, + { + "metadata": { + "symbol": "ACC", + "identifier": "ACCEQN", + "purpose": "DIVIDEND - RS 7.50 PER SHARE", + "lastPrice": 2255, + "change": 14.400000000000091, + "pChange": 0.6426849950906048, + "previousClose": 2240.6, + "finalQuantity": 948, + "totalTurnover": 2137740, + "marketCap": 152373177263.35, + "yearHigh": 2844, + "yearLow": 1868.2, + "iep": 2255, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ACCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2242.1, + "buyQty": 22, + "sellQty": 0 + }, + { + "price": 2244, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 2244.55, + "buyQty": 76, + "sellQty": 0 + }, + { + "price": 2245, + "buyQty": 16, + "sellQty": 0 + }, + { + "price": 2250, + "buyQty": 67, + "sellQty": 0 + }, + { + "price": 2255, + "buyQty": 0, + "sellQty": 209, + "iep": true + }, + { + "price": 2259, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 2259.55, + "buyQty": 0, + "sellQty": 197 + }, + { + "price": 2259.65, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 2259.8, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2255, + "totalTradedVolume": 948, + "finalPrice": 2255, + "finalQuantity": 948, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 7640, + "totalBuyQuantity": 4024, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 14.400000000000091, + "perChange": 0.6426849950906048, + "prevClose": 2240.6 + } + } + }, + { + "metadata": { + "symbol": "CANBK", + "identifier": "CANBKEQN", + "purpose": "DIVIDEND - RS 3.22 PER SHARE", + "lastPrice": 109.32, + "change": 0.6899999999999977, + "pChange": 0.6351836509251567, + "previousClose": 108.63, + "finalQuantity": 172597, + "totalTurnover": 18868304.04, + "marketCap": 365122131565.4, + "yearHigh": 128.9, + "yearLow": 82.69, + "iep": 109.32, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CANBKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 108.99, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 109, + "buyQty": 6737, + "sellQty": 0 + }, + { + "price": 109.05, + "buyQty": 11200, + "sellQty": 0 + }, + { + "price": 109.25, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 109.3, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 109.32, + "buyQty": 0, + "sellQty": 40357, + "iep": true + }, + { + "price": 109.33, + "buyQty": 0, + "sellQty": 65 + }, + { + "price": 109.34, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 109.35, + "buyQty": 0, + "sellQty": 40280 + }, + { + "price": 109.37, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 109.32, + "totalTradedVolume": 172597, + "finalPrice": 109.32, + "finalQuantity": 172597, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 1500515, + "totalBuyQuantity": 702686, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.6899999999999977, + "perChange": 0.6351836509251567, + "prevClose": 108.63 + } + } + }, + { + "metadata": { + "symbol": "BALKRISIND", + "identifier": "BALKRISINDEQN", + "purpose": "INTERIM DIVIDEND - RS 4 PER SHARE", + "lastPrice": 2894, + "change": 18.25, + "pChange": 0.6346170564200644, + "previousClose": 2875.75, + "finalQuantity": 185, + "totalTurnover": 535390, + "marketCap": 230442596436.36, + "yearHigh": 3375, + "yearLow": 2193.8, + "iep": 2894, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BALKRISINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2860.2, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 2865, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 2875, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 2875.75, + "buyQty": 9, + "sellQty": 0 + }, + { + "price": 2876, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 2894, + "buyQty": 0, + "sellQty": 203, + "iep": true + }, + { + "price": 2895, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 2900, + "buyQty": 0, + "sellQty": 8 + }, + { + "price": 2900.2, + "buyQty": 0, + "sellQty": 16 + }, + { + "price": 2900.35, + "buyQty": 0, + "sellQty": 3 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2894, + "totalTradedVolume": 185, + "finalPrice": 2894, + "finalQuantity": 185, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 1988, + "totalBuyQuantity": 2316, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 18.25, + "perChange": 0.6346170564200644, + "prevClose": 2875.75 + } + } + }, + { + "metadata": { + "symbol": "NMDC", + "identifier": "NMDCEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 1.50 PER SHARE", + "lastPrice": 235.55, + "change": 1.4800000000000182, + "pChange": 0.6322894860511891, + "previousClose": 234.07, + "finalQuantity": 12578, + "totalTurnover": 2962747.9, + "marketCap": 269352253406.46, + "yearHigh": 286.35, + "yearLow": 179.9, + "iep": 235.55, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NMDCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 234.44, + "buyQty": 402, + "sellQty": 0 + }, + { + "price": 234.48, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 234.75, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 235, + "buyQty": 20251, + "sellQty": 0 + }, + { + "price": 235.5, + "buyQty": 145, + "sellQty": 0 + }, + { + "price": 235.55, + "buyQty": 0, + "sellQty": 2324, + "iep": true + }, + { + "price": 235.6, + "buyQty": 0, + "sellQty": 2100 + }, + { + "price": 235.7, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 235.77, + "buyQty": 0, + "sellQty": 530 + }, + { + "price": 235.9, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 235.55, + "totalTradedVolume": 12578, + "finalPrice": 235.55, + "finalQuantity": 12578, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 357139, + "totalBuyQuantity": 85778, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.4800000000000182, + "perChange": 0.6322894860511891, + "prevClose": 234.07 + } + } + }, + { + "metadata": { + "symbol": "NAUKRI", + "identifier": "NAUKRIEQN", + "purpose": "INTERIM DIVIDEND - RS 12 PER SHARE", + "lastPrice": 8498.95, + "change": 53.400000000001455, + "pChange": 0.6322856415508932, + "previousClose": 8445.55, + "finalQuantity": 171, + "totalTurnover": 1453320.45, + "marketCap": 658210731130.83, + "yearHigh": 8525, + "yearLow": 4570.35, + "iep": 8498.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NAUKRIEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 8415, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 8445.55, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 8446.6, + "buyQty": 13, + "sellQty": 0 + }, + { + "price": 8485, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 8490, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 8498.95, + "buyQty": 0, + "sellQty": 14, + "iep": true + }, + { + "price": 8499.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 8500, + "buyQty": 0, + "sellQty": 12 + }, + { + "price": 8508, + "buyQty": 0, + "sellQty": 150 + }, + { + "price": 8515, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 8498.95, + "totalTradedVolume": 171, + "finalPrice": 8498.95, + "finalQuantity": 171, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 1772, + "totalBuyQuantity": 825, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 53.400000000001455, + "perChange": 0.6322856415508932, + "prevClose": 8445.55 + } + } + }, + { + "metadata": { + "symbol": "INDHOTEL", + "identifier": "INDHOTELEQN", + "purpose": "DIVIDEND - RS 1.75 PER SHARE", + "lastPrice": 816, + "change": 5.100000000000023, + "pChange": 0.6289308176100658, + "previousClose": 810.9, + "finalQuantity": 6020, + "totalTurnover": 4912320, + "marketCap": 708053025677.14, + "yearHigh": 816.95, + "yearLow": 416.9, + "iep": 816, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_INDHOTELEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 812, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 813, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 813.25, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 815.2, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 816, + "buyQty": 35, + "sellQty": 0, + "iep": true + }, + { + "price": 816.3, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 816.5, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 816.6, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 816.95, + "buyQty": 0, + "sellQty": 53 + }, + { + "price": 817, + "buyQty": 0, + "sellQty": 389 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 816, + "totalTradedVolume": 6020, + "finalPrice": 816, + "finalQuantity": 6020, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 30776, + "totalBuyQuantity": 13859, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 5.100000000000023, + "perChange": 0.6289308176100658, + "prevClose": 810.9 + } + } + }, + { + "metadata": { + "symbol": "LUPIN", + "identifier": "LUPINEQN", + "purpose": "DIVIDEND - RS 8 PER SHARE", + "lastPrice": 2114.8, + "change": 13.150000000000091, + "pChange": 0.6256988556610326, + "previousClose": 2101.65, + "finalQuantity": 2787, + "totalTurnover": 5893947.6, + "marketCap": 507214534274.56, + "yearHigh": 2312, + "yearLow": 1200.15, + "iep": 2114.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LUPINEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2108, + "buyQty": 120, + "sellQty": 0 + }, + { + "price": 2109, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 2109.55, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 2110, + "buyQty": 79, + "sellQty": 0 + }, + { + "price": 2114, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 2114.8, + "buyQty": 0, + "sellQty": 13, + "iep": true + }, + { + "price": 2114.9, + "buyQty": 0, + "sellQty": 6 + }, + { + "price": 2114.95, + "buyQty": 0, + "sellQty": 92 + }, + { + "price": 2115, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 2115.15, + "buyQty": 0, + "sellQty": 88 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2114.8, + "totalTradedVolume": 2787, + "finalPrice": 2114.8, + "finalQuantity": 2787, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 10025, + "totalBuyQuantity": 6214, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 13.150000000000091, + "perChange": 0.6256988556610326, + "prevClose": 2101.65 + } + } + }, + { + "metadata": { + "symbol": "SUPREMEIND", + "identifier": "SUPREMEINDEQN", + "purpose": "INTERIM DIVIDEND - RS 10 PER SHARE", + "lastPrice": 4744.8, + "change": 29.449999999999818, + "pChange": 0.6245559714549251, + "previousClose": 4715.35, + "finalQuantity": 307, + "totalTurnover": 1456653.6, + "marketCap": 303736106408.39, + "yearHigh": 6460, + "yearLow": 3601, + "iep": 4744.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SUPREMEINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4715.35, + "buyQty": 102, + "sellQty": 0 + }, + { + "price": 4716, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 4718, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 4730, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 4744.8, + "buyQty": 1, + "sellQty": 0, + "iep": true + }, + { + "price": 4757.95, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 4762.5, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 4762.8, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 4763.05, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 4763.55, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4744.8, + "totalTradedVolume": 307, + "finalPrice": 4744.8, + "finalQuantity": 307, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 3038, + "totalBuyQuantity": 1270, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 29.449999999999818, + "perChange": 0.6245559714549251, + "prevClose": 4715.35 + } + } + }, + { + "metadata": { + "symbol": "TATAMOTORS", + "identifier": "TATAMOTORSEQN", + "purpose": "DIVIDEND - RS 3 PER SHARE & SPECIAL DIVIDEND - RS 3 PER SHARE", + "lastPrice": 793, + "change": 4.899999999999977, + "pChange": 0.6217485090724498, + "previousClose": 788.1, + "finalQuantity": 38461, + "totalTurnover": 30499573, + "marketCap": 1670674306515.46, + "yearHigh": 1179, + "yearLow": 696.25, + "iep": 793, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TATAMOTORSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 790.9, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 791, + "buyQty": 57, + "sellQty": 0 + }, + { + "price": 791.1, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 792.45, + "buyQty": 690, + "sellQty": 0 + }, + { + "price": 792.9, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 793, + "buyQty": 0, + "sellQty": 1810, + "iep": true + }, + { + "price": 793.5, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 793.55, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 793.6, + "buyQty": 0, + "sellQty": 4375 + }, + { + "price": 793.8, + "buyQty": 0, + "sellQty": 500 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 793, + "totalTradedVolume": 38461, + "finalPrice": 793, + "finalQuantity": 38461, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 206805, + "totalBuyQuantity": 202380, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4.899999999999977, + "perChange": 0.6217485090724498, + "prevClose": 788.1 + } + } + }, + { + "metadata": { + "symbol": "MUTHOOTFIN", + "identifier": "MUTHOOTFINEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 1959.9, + "change": 12.100000000000136, + "pChange": 0.621213676968895, + "previousClose": 1947.8, + "finalQuantity": 730, + "totalTurnover": 1430727, + "marketCap": 207974765594.13, + "yearHigh": 2078.75, + "yearLow": 1261.9, + "iep": 1959.9, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MUTHOOTFINEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1935.05, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1941, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1945, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1947.8, + "buyQty": 14, + "sellQty": 0 + }, + { + "price": 1947.9, + "buyQty": 154, + "sellQty": 0 + }, + { + "price": 1959.9, + "buyQty": 0, + "sellQty": 126, + "iep": true + }, + { + "price": 1960, + "buyQty": 0, + "sellQty": 1251 + }, + { + "price": 1962.5, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1963.5, + "buyQty": 0, + "sellQty": 8 + }, + { + "price": 1968.4, + "buyQty": 0, + "sellQty": 13 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1959.9, + "totalTradedVolume": 730, + "finalPrice": 1959.9, + "finalQuantity": 730, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 5438, + "totalBuyQuantity": 1450, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 12.100000000000136, + "perChange": 0.621213676968895, + "prevClose": 1947.8 + } + } + }, + { + "metadata": { + "symbol": "POONAWALLA", + "identifier": "POONAWALLAEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 360.8, + "change": 2.1999999999999886, + "pChange": 0.6134969325153342, + "previousClose": 358.6, + "finalQuantity": 3510, + "totalTurnover": 1266408, + "marketCap": 103814941886.23, + "yearHigh": 519.7, + "yearLow": 270.05, + "iep": 360.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_POONAWALLAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 358.65, + "buyQty": 40, + "sellQty": 0 + }, + { + "price": 358.9, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 359, + "buyQty": 900, + "sellQty": 0 + }, + { + "price": 360.25, + "buyQty": 21, + "sellQty": 0 + }, + { + "price": 360.8, + "buyQty": 91, + "sellQty": 0, + "iep": true + }, + { + "price": 360.9, + "buyQty": 0, + "sellQty": 201 + }, + { + "price": 360.95, + "buyQty": 0, + "sellQty": 244 + }, + { + "price": 361, + "buyQty": 0, + "sellQty": 3325 + }, + { + "price": 361.1, + "buyQty": 0, + "sellQty": 37 + }, + { + "price": 361.15, + "buyQty": 0, + "sellQty": 37 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 360.8, + "totalTradedVolume": 3510, + "finalPrice": 360.8, + "finalQuantity": 3510, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 128424, + "totalBuyQuantity": 24506, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.1999999999999886, + "perChange": 0.6134969325153342, + "prevClose": 358.6 + } + } + }, + { + "metadata": { + "symbol": "M&M", + "identifier": "M&MEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 21.10 PER SHARE", + "lastPrice": 3049.95, + "change": 18.199999999999818, + "pChange": 0.6003133503751898, + "previousClose": 3031.75, + "finalQuantity": 13972, + "totalTurnover": 42613901.4, + "marketCap": 2691572299573.86, + "yearHigh": 3222.1, + "yearLow": 1575, + "iep": 3049.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_M&MEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3034, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 3035, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 3040, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 3040.4, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 3049.95, + "buyQty": 72, + "sellQty": 0, + "iep": true + }, + { + "price": 3050, + "buyQty": 0, + "sellQty": 257 + }, + { + "price": 3051, + "buyQty": 0, + "sellQty": 473 + }, + { + "price": 3051.75, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 3051.85, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 3052.45, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3049.95, + "totalTradedVolume": 13972, + "finalPrice": 3049.95, + "finalQuantity": 13972, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 39727, + "totalBuyQuantity": 11153, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 18.199999999999818, + "perChange": 0.6003133503751898, + "prevClose": 3031.75 + } + } + }, + { + "metadata": { + "symbol": "CHOLAFIN", + "identifier": "CHOLAFINEQN", + "purpose": "DIVIDEND - RE 0.70 PER SHARE", + "lastPrice": 1300, + "change": 7.75, + "pChange": 0.5997291545753531, + "previousClose": 1292.25, + "finalQuantity": 2161, + "totalTurnover": 2809300, + "marketCap": 540591673023.7, + "yearHigh": 1652, + "yearLow": 1011.2, + "iep": 1300, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CHOLAFINEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1297, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1298.3, + "buyQty": 115, + "sellQty": 0 + }, + { + "price": 1298.35, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1298.5, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 1299, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1300, + "buyQty": 0, + "sellQty": 493, + "iep": true + }, + { + "price": 1300.25, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1302, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 1303, + "buyQty": 0, + "sellQty": 32 + }, + { + "price": 1303.35, + "buyQty": 0, + "sellQty": 7 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1300, + "totalTradedVolume": 2161, + "finalPrice": 1300, + "finalQuantity": 2161, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 21385, + "totalBuyQuantity": 17673, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 7.75, + "perChange": 0.5997291545753531, + "prevClose": 1292.25 + } + } + }, + { + "metadata": { + "symbol": "TVSMOTOR", + "identifier": "TVSMOTOREQN", + "purpose": "INTERIM DIVIDEND - RS 8 PER SHARE", + "lastPrice": 2533.8, + "change": 15.100000000000364, + "pChange": 0.5995156231389354, + "previousClose": 2518.7, + "finalQuantity": 392, + "totalTurnover": 993249.6, + "marketCap": 591097698308.15, + "yearHigh": 2958, + "yearLow": 1871.75, + "iep": 2533.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TVSMOTOREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2520.65, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2524, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 2525, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 2528.7, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 2532.05, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2533.8, + "buyQty": 0, + "sellQty": 58, + "iep": true + }, + { + "price": 2534, + "buyQty": 0, + "sellQty": 13 + }, + { + "price": 2534.4, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 2534.9, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 2537.6, + "buyQty": 0, + "sellQty": 30 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2533.8, + "totalTradedVolume": 392, + "finalPrice": 2533.8, + "finalQuantity": 392, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 5414, + "totalBuyQuantity": 3583, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 15.100000000000364, + "perChange": 0.5995156231389354, + "prevClose": 2518.7 + } + } + }, + { + "metadata": { + "symbol": "GUJGASLTD", + "identifier": "GUJGASLTDEQN", + "purpose": "DIVIDEND - RS 5.66 PER SHARE", + "lastPrice": 499.5, + "change": 2.9499999999999886, + "pChange": 0.5940992850669597, + "previousClose": 496.55, + "finalQuantity": 705, + "totalTurnover": 352147.5, + "marketCap": 85155046073.14, + "yearHigh": 689.95, + "yearLow": 431.25, + "iep": 499.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GUJGASLTDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 496, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 496.55, + "buyQty": 384, + "sellQty": 0 + }, + { + "price": 497.25, + "buyQty": 45, + "sellQty": 0 + }, + { + "price": 497.5, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 498, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 499.5, + "buyQty": 0, + "sellQty": 64, + "iep": true + }, + { + "price": 499.95, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 500.05, + "buyQty": 0, + "sellQty": 702 + }, + { + "price": 500.1, + "buyQty": 0, + "sellQty": 19 + }, + { + "price": 500.5, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 499.5, + "totalTradedVolume": 705, + "finalPrice": 499.5, + "finalQuantity": 705, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 21036, + "totalBuyQuantity": 9345, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.9499999999999886, + "perChange": 0.5940992850669597, + "prevClose": 496.55 + } + } + }, + { + "metadata": { + "symbol": "OIL", + "identifier": "OILEQN", + "purpose": "INTERIM DIVIDEND - RS 3 PER SHARE", + "lastPrice": 492, + "change": 2.8999999999999773, + "pChange": 0.5929257820486561, + "previousClose": 489.1, + "finalQuantity": 2030, + "totalTurnover": 998760, + "marketCap": 265301045011.2, + "yearHigh": 767.9, + "yearLow": 205.73, + "iep": 492, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_OILEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 489.1, + "buyQty": 265, + "sellQty": 0 + }, + { + "price": 489.15, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 489.2, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 490, + "buyQty": 536, + "sellQty": 0 + }, + { + "price": 491.1, + "buyQty": 40, + "sellQty": 0 + }, + { + "price": 492, + "buyQty": 0, + "sellQty": 454, + "iep": true + }, + { + "price": 492.25, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 492.4, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 492.8, + "buyQty": 0, + "sellQty": 684 + }, + { + "price": 493, + "buyQty": 0, + "sellQty": 52 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 492, + "totalTradedVolume": 2030, + "finalPrice": 492, + "finalQuantity": 2030, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 89163, + "totalBuyQuantity": 28259, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.8999999999999773, + "perChange": 0.5929257820486561, + "prevClose": 489.1 + } + } + }, + { + "metadata": { + "symbol": "BSE", + "identifier": "BSEEQN", + "purpose": "DIVIDEND - RS 15 PER SHARE", + "lastPrice": 4599, + "change": 26.949999999999818, + "pChange": 0.5894511214881687, + "previousClose": 4572.05, + "finalQuantity": 6875, + "totalTurnover": 31618125, + "marketCap": 620794386363.18, + "yearHigh": 4989.8, + "yearLow": 1941.05, + "iep": 4599, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BSEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4595, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 4595.85, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 4596, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 4597.5, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 4598, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 4599, + "buyQty": 0, + "sellQty": 521, + "iep": true + }, + { + "price": 4599.75, + "buyQty": 0, + "sellQty": 26 + }, + { + "price": 4599.9, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 4599.95, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 4600, + "buyQty": 0, + "sellQty": 122 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4599, + "totalTradedVolume": 6875, + "finalPrice": 4599, + "finalQuantity": 6875, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 63342, + "totalBuyQuantity": 19910, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 26.949999999999818, + "perChange": 0.5894511214881687, + "prevClose": 4572.05 + } + } + }, + { + "metadata": { + "symbol": "RECLTD", + "identifier": "RECLTDEQN", + "purpose": "INTERIM DIVIDEND - RS 4 PER SHARE", + "lastPrice": 546.85, + "change": 3.2000000000000455, + "pChange": 0.5886139979766477, + "previousClose": 543.65, + "finalQuantity": 8705, + "totalTurnover": 4760329.25, + "marketCap": 677003209645.22, + "yearHigh": 654, + "yearLow": 376.15, + "iep": 546.85, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_RECLTDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 545.05, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 545.2, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 546, + "buyQty": 41, + "sellQty": 0 + }, + { + "price": 546.05, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 546.6, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 546.85, + "buyQty": 0, + "sellQty": 3940, + "iep": true + }, + { + "price": 546.9, + "buyQty": 0, + "sellQty": 116 + }, + { + "price": 547, + "buyQty": 0, + "sellQty": 1580 + }, + { + "price": 547.7, + "buyQty": 0, + "sellQty": 300 + }, + { + "price": 548, + "buyQty": 0, + "sellQty": 627 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 546.85, + "totalTradedVolume": 8705, + "finalPrice": 546.85, + "finalQuantity": 8705, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 240128, + "totalBuyQuantity": 49537, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.2000000000000455, + "perChange": 0.5886139979766477, + "prevClose": 543.65 + } + } + }, + { + "metadata": { + "symbol": "GRASIM", + "identifier": "GRASIMEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 10 PER SHARE", + "lastPrice": 2733, + "change": 15.699999999999818, + "pChange": 0.5777794133882831, + "previousClose": 2717.3, + "finalQuantity": 1918, + "totalTurnover": 5241894, + "marketCap": 1007679996479.62, + "yearHigh": 2877.75, + "yearLow": 2016.55, + "iep": 2733, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GRASIMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2712, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2717, + "buyQty": 40, + "sellQty": 0 + }, + { + "price": 2717.3, + "buyQty": 23, + "sellQty": 0 + }, + { + "price": 2718.5, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 2730, + "buyQty": 40, + "sellQty": 0 + }, + { + "price": 2733, + "buyQty": 0, + "sellQty": 101, + "iep": true + }, + { + "price": 2734, + "buyQty": 0, + "sellQty": 17 + }, + { + "price": 2735, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 2736, + "buyQty": 0, + "sellQty": 12 + }, + { + "price": 2737, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2733, + "totalTradedVolume": 1918, + "finalPrice": 2733, + "finalQuantity": 1918, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 14395, + "totalBuyQuantity": 1751, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 15.699999999999818, + "perChange": 0.5777794133882831, + "prevClose": 2717.3 + } + } + }, + { + "metadata": { + "symbol": "JUBLFOOD", + "identifier": "JUBLFOODEQN", + "purpose": "DIVIDEND - RS 1.20 PER SHARE", + "lastPrice": 663.95, + "change": 3.800000000000068, + "pChange": 0.5756267514958825, + "previousClose": 660.15, + "finalQuantity": 1113, + "totalTurnover": 738976.35, + "marketCap": 251032055559.52, + "yearHigh": 715.45, + "yearLow": 421.05, + "iep": 663.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_JUBLFOODEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 661, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 661.05, + "buyQty": 115, + "sellQty": 0 + }, + { + "price": 661.1, + "buyQty": 378, + "sellQty": 0 + }, + { + "price": 662.1, + "buyQty": 75, + "sellQty": 0 + }, + { + "price": 663.35, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 663.95, + "buyQty": 0, + "sellQty": 9, + "iep": true + }, + { + "price": 664, + "buyQty": 0, + "sellQty": 7550 + }, + { + "price": 664.45, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 664.55, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 664.9, + "buyQty": 0, + "sellQty": 70 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 663.95, + "totalTradedVolume": 1113, + "finalPrice": 663.95, + "finalQuantity": 1113, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 36276, + "totalBuyQuantity": 3958, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.800000000000068, + "perChange": 0.5756267514958825, + "prevClose": 660.15 + } + } + }, + { + "metadata": { + "symbol": "INFY", + "identifier": "INFYEQN", + "purpose": "INTERIM DIVIDEND - RS 21 PER SHARE", + "lastPrice": 1900, + "change": 10.75, + "pChange": 0.5690088659520973, + "previousClose": 1889.25, + "finalQuantity": 67340, + "totalTurnover": 127946000, + "marketCap": 6800064342167.25, + "yearHigh": 1991.45, + "yearLow": 1358.35, + "iep": 1900, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_INFYEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1895, + "buyQty": 640, + "sellQty": 0 + }, + { + "price": 1895.25, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1896, + "buyQty": 1507, + "sellQty": 0 + }, + { + "price": 1896.1, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 1899, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1900, + "buyQty": 0, + "sellQty": 2425, + "iep": true + }, + { + "price": 1900.05, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1901, + "buyQty": 0, + "sellQty": 2985 + }, + { + "price": 1901.55, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1901.9, + "buyQty": 0, + "sellQty": 300 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1900, + "totalTradedVolume": 67340, + "finalPrice": 1900, + "finalQuantity": 67340, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 105250, + "totalBuyQuantity": 20055, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 10.75, + "perChange": 0.5690088659520973, + "prevClose": 1889.25 + } + } + }, + { + "metadata": { + "symbol": "APOLLOTYRE", + "identifier": "APOLLOTYREEQN", + "purpose": "DIVIDEND - RS 6 PER SHARE", + "lastPrice": 537.45, + "change": 3, + "pChange": 0.5613247263541958, + "previousClose": 534.45, + "finalQuantity": 7050, + "totalTurnover": 3789022.5, + "marketCap": 177578701963.27, + "yearHigh": 584.9, + "yearLow": 419.25, + "iep": 537.45, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_APOLLOTYREEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 534.9, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 535, + "buyQty": 812, + "sellQty": 0 + }, + { + "price": 535.1, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 535.15, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 535.5, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 537.45, + "buyQty": 0, + "sellQty": 176, + "iep": true + }, + { + "price": 537.5, + "buyQty": 0, + "sellQty": 353 + }, + { + "price": 537.8, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 537.9, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 537.95, + "buyQty": 0, + "sellQty": 75 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 537.45, + "totalTradedVolume": 7050, + "finalPrice": 537.45, + "finalQuantity": 7050, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 59764, + "totalBuyQuantity": 21056, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3, + "perChange": 0.5613247263541958, + "prevClose": 534.45 + } + } + }, + { + "metadata": { + "symbol": "ABFRL", + "identifier": "ABFRLEQN", + "purpose": " RIGHTS 9:77 PARTLY PAID @ PREMIUM RS 100/-", + "lastPrice": 314, + "change": 1.75, + "pChange": 0.5604483586869495, + "previousClose": 312.25, + "finalQuantity": 4056, + "totalTurnover": 1273584, + "marketCap": 124574574108.77, + "yearHigh": 364.4, + "yearLow": 198.75, + "iep": 314, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ABFRLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 313.1, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 313.3, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 313.5, + "buyQty": 110, + "sellQty": 0 + }, + { + "price": 313.7, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 313.9, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 314, + "buyQty": 0, + "sellQty": 92, + "iep": true + }, + { + "price": 314.3, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 314.4, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 314.45, + "buyQty": 0, + "sellQty": 130 + }, + { + "price": 314.85, + "buyQty": 0, + "sellQty": 2849 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 314, + "totalTradedVolume": 4056, + "finalPrice": 314, + "finalQuantity": 4056, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 145469, + "totalBuyQuantity": 37259, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.75, + "perChange": 0.5604483586869495, + "prevClose": 312.25 + } + } + }, + { + "metadata": { + "symbol": "LTTS", + "identifier": "LTTSEQN", + "purpose": "INTERIM DIVIDEND - RS 17 PER SHARE", + "lastPrice": 5330.5, + "change": 29.649999999999636, + "pChange": 0.5593442561098623, + "previousClose": 5300.85, + "finalQuantity": 229, + "totalTurnover": 1220684.5, + "marketCap": 144861428203.07, + "yearHigh": 6000, + "yearLow": 4200, + "iep": 5330.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LTTSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 5308, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 5318, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 5320.9, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 5330, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 5330.5, + "buyQty": 15, + "sellQty": 0, + "iep": true + }, + { + "price": 5333, + "buyQty": 0, + "sellQty": 26 + }, + { + "price": 5334.8, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 5340, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 5346.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 5348, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 5330.5, + "totalTradedVolume": 229, + "finalPrice": 5330.5, + "finalQuantity": 229, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 5678, + "totalBuyQuantity": 1550, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 29.649999999999636, + "perChange": 0.5593442561098623, + "prevClose": 5300.85 + } + } + }, + { + "metadata": { + "symbol": "NHPC", + "identifier": "NHPCEQN", + "purpose": "DIVIDEND - RE 0.50 PER SHARE", + "lastPrice": 82.4, + "change": 0.45000000000000284, + "pChange": 0.5491153142159888, + "previousClose": 81.95, + "finalQuantity": 99349, + "totalTurnover": 8186357.6, + "marketCap": 257562165906.09, + "yearHigh": 118.4, + "yearLow": 56.7, + "iep": 82.4, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NHPCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 82.2, + "buyQty": 401, + "sellQty": 0 + }, + { + "price": 82.25, + "buyQty": 4095, + "sellQty": 0 + }, + { + "price": 82.3, + "buyQty": 101, + "sellQty": 0 + }, + { + "price": 82.33, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 82.35, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 82.4, + "buyQty": 0, + "sellQty": 24137, + "iep": true + }, + { + "price": 82.44, + "buyQty": 0, + "sellQty": 10300 + }, + { + "price": 82.45, + "buyQty": 0, + "sellQty": 1705 + }, + { + "price": 82.5, + "buyQty": 0, + "sellQty": 5122 + }, + { + "price": 82.55, + "buyQty": 0, + "sellQty": 2006 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 82.4, + "totalTradedVolume": 99349, + "finalPrice": 82.4, + "finalQuantity": 99349, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 1120530, + "totalBuyQuantity": 438577, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.45000000000000284, + "perChange": 0.5491153142159888, + "prevClose": 81.95 + } + } + }, + { + "metadata": { + "symbol": "LTIM", + "identifier": "LTIMEQN", + "purpose": "INTERIM DIVIDEND - RS 20 PER SHARE", + "lastPrice": 6255, + "change": 33.5, + "pChange": 0.5384553564252994, + "previousClose": 6221.5, + "finalQuantity": 289, + "totalTurnover": 1807695, + "marketCap": 574820043636.33, + "yearHigh": 6574.95, + "yearLow": 4513.55, + "iep": 6255, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LTIMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 6227.85, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 6228, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 6230, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 6240, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 6250, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 6255, + "buyQty": 0, + "sellQty": 71, + "iep": true + }, + { + "price": 6259, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 6259.75, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 6260, + "buyQty": 0, + "sellQty": 17 + }, + { + "price": 6265, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 6255, + "totalTradedVolume": 289, + "finalPrice": 6255, + "finalQuantity": 289, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 7179, + "totalBuyQuantity": 2122, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 33.5, + "perChange": 0.5384553564252994, + "prevClose": 6221.5 + } + } + }, + { + "metadata": { + "symbol": "SJVN", + "identifier": "SJVNEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RE 0.65 PER SHARE", + "lastPrice": 117.85, + "change": 0.6299999999999955, + "pChange": 0.5374509469373788, + "previousClose": 117.22, + "finalQuantity": 24640, + "totalTurnover": 2903824, + "marketCap": 83671596295.63, + "yearHigh": 170.5, + "yearLow": 81.05, + "iep": 117.85, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SJVNEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 117.3, + "buyQty": 1738, + "sellQty": 0 + }, + { + "price": 117.35, + "buyQty": 4225, + "sellQty": 0 + }, + { + "price": 117.45, + "buyQty": 215, + "sellQty": 0 + }, + { + "price": 117.5, + "buyQty": 2224, + "sellQty": 0 + }, + { + "price": 117.56, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 117.85, + "buyQty": 0, + "sellQty": 2975, + "iep": true + }, + { + "price": 117.9, + "buyQty": 0, + "sellQty": 3484 + }, + { + "price": 117.94, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 117.95, + "buyQty": 0, + "sellQty": 8819 + }, + { + "price": 118, + "buyQty": 0, + "sellQty": 10990 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 117.85, + "totalTradedVolume": 24640, + "finalPrice": 117.85, + "finalQuantity": 24640, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 620962, + "totalBuyQuantity": 142479, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.6299999999999955, + "perChange": 0.5374509469373788, + "prevClose": 117.22 + } + } + }, + { + "metadata": { + "symbol": "PRESTIGE", + "identifier": "PRESTIGEEQN", + "purpose": "DIVIDEND - RS 1.80 PER SHARE", + "lastPrice": 1780, + "change": 9.450000000000045, + "pChange": 0.5337324560164947, + "previousClose": 1770.55, + "finalQuantity": 821, + "totalTurnover": 1461380, + "marketCap": 296923450391.67, + "yearHigh": 2074.8, + "yearLow": 967.3, + "iep": 1780, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PRESTIGEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1766, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1770.55, + "buyQty": 314, + "sellQty": 0 + }, + { + "price": 1771, + "buyQty": 80, + "sellQty": 0 + }, + { + "price": 1775, + "buyQty": 585, + "sellQty": 0 + }, + { + "price": 1775.55, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1780, + "buyQty": 0, + "sellQty": 77, + "iep": true + }, + { + "price": 1781.7, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 1781.95, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 1785, + "buyQty": 0, + "sellQty": 70 + }, + { + "price": 1785.2, + "buyQty": 0, + "sellQty": 3 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1780, + "totalTradedVolume": 821, + "finalPrice": 1780, + "finalQuantity": 821, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 18938, + "totalBuyQuantity": 9040, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 9.450000000000045, + "perChange": 0.5337324560164947, + "prevClose": 1770.55 + } + } + }, + { + "metadata": { + "symbol": "BAJAJFINSV", + "identifier": "BAJAJFINSVEQN", + "purpose": "DIVIDEND - RE 1 PER SHARE", + "lastPrice": 1636.75, + "change": 8.650000000000091, + "pChange": 0.5312941465512003, + "previousClose": 1628.1, + "finalQuantity": 3327, + "totalTurnover": 5445467.25, + "marketCap": 888900256262.97, + "yearHigh": 2029.9, + "yearLow": 1419.05, + "iep": 1636.75, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BAJAJFINSVEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1631.15, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1632, + "buyQty": 602, + "sellQty": 0 + }, + { + "price": 1632.5, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 1633, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1635.05, + "buyQty": 80, + "sellQty": 0 + }, + { + "price": 1636.75, + "buyQty": 0, + "sellQty": 991, + "iep": true + }, + { + "price": 1637, + "buyQty": 0, + "sellQty": 1170 + }, + { + "price": 1638, + "buyQty": 0, + "sellQty": 420 + }, + { + "price": 1638.8, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 1639, + "buyQty": 0, + "sellQty": 3001 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1636.75, + "totalTradedVolume": 3327, + "finalPrice": 1636.75, + "finalQuantity": 3327, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 24756, + "totalBuyQuantity": 20316, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 8.650000000000091, + "perChange": 0.5312941465512003, + "prevClose": 1628.1 + } + } + }, + { + "metadata": { + "symbol": "LT", + "identifier": "LTEQN", + "purpose": "DIVIDEND - RS 28 PER SHARE", + "lastPrice": 3810, + "change": 20.09999999999991, + "pChange": 0.5303570015039951, + "previousClose": 3789.9, + "finalQuantity": 8529, + "totalTurnover": 32495490, + "marketCap": 4473463589324.91, + "yearHigh": 3919.9, + "yearLow": 3175.05, + "iep": 3810, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3805.85, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 3806, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 3806.1, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 3807, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3810, + "buyQty": 1043, + "sellQty": 0, + "iep": true + }, + { + "price": 3812.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 3814.95, + "buyQty": 0, + "sellQty": 9 + }, + { + "price": 3815, + "buyQty": 0, + "sellQty": 192 + }, + { + "price": 3816.4, + "buyQty": 0, + "sellQty": 31 + }, + { + "price": 3817.65, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3810, + "totalTradedVolume": 8529, + "finalPrice": 3810, + "finalQuantity": 8529, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 40212, + "totalBuyQuantity": 23196, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 20.09999999999991, + "perChange": 0.5303570015039951, + "prevClose": 3789.9 + } + } + }, + { + "metadata": { + "symbol": "BSOFT", + "identifier": "BSOFTEQN", + "purpose": "INTERIM DIVIDEND - RS 2.50 PER SHARE", + "lastPrice": 606.95, + "change": 3.2000000000000455, + "pChange": 0.5300207039337549, + "previousClose": 603.75, + "finalQuantity": 2911, + "totalTurnover": 1766831.45, + "marketCap": 98638664457.02, + "yearHigh": 861.85, + "yearLow": 536.3, + "iep": 606.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BSOFTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 604, + "buyQty": 35, + "sellQty": 0 + }, + { + "price": 604.5, + "buyQty": 601, + "sellQty": 0 + }, + { + "price": 604.6, + "buyQty": 144, + "sellQty": 0 + }, + { + "price": 605, + "buyQty": 55, + "sellQty": 0 + }, + { + "price": 606, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 606.95, + "buyQty": 0, + "sellQty": 2480, + "iep": true + }, + { + "price": 607, + "buyQty": 0, + "sellQty": 1505 + }, + { + "price": 607.2, + "buyQty": 0, + "sellQty": 575 + }, + { + "price": 607.5, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 607.9, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 606.95, + "totalTradedVolume": 2911, + "finalPrice": 606.95, + "finalQuantity": 2911, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 112935, + "totalBuyQuantity": 24066, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.2000000000000455, + "perChange": 0.5300207039337549, + "prevClose": 603.75 + } + } + }, + { + "metadata": { + "symbol": "IDFCFIRSTB", + "identifier": "IDFCFIRSTBEQN", + "purpose": " DIVIDEND RE 0.75 PER SHARE", + "lastPrice": 66.56, + "change": 0.3500000000000085, + "pChange": 0.5286210542214297, + "previousClose": 66.21, + "finalQuantity": 102395, + "totalTurnover": 6815411.2, + "marketCap": 435123007258.6, + "yearHigh": 92.45, + "yearLow": 59.3, + "iep": 66.56, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IDFCFIRSTBEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 66.5, + "buyQty": 8086, + "sellQty": 0 + }, + { + "price": 66.51, + "buyQty": 15000, + "sellQty": 0 + }, + { + "price": 66.53, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 66.54, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 66.55, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 66.56, + "buyQty": 0, + "sellQty": 32282, + "iep": true + }, + { + "price": 66.59, + "buyQty": 0, + "sellQty": 48000 + }, + { + "price": 66.6, + "buyQty": 0, + "sellQty": 1025 + }, + { + "price": 66.61, + "buyQty": 0, + "sellQty": 350 + }, + { + "price": 66.63, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 66.56, + "totalTradedVolume": 102395, + "finalPrice": 66.56, + "finalQuantity": 102395, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 704884, + "totalBuyQuantity": 545156, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.3500000000000085, + "perChange": 0.5286210542214297, + "prevClose": 66.21 + } + } + }, + { + "metadata": { + "symbol": "COROMANDEL", + "identifier": "COROMANDELEQN", + "purpose": "DIVIDEND - RS 6 PER SHARE", + "lastPrice": 1767.2, + "change": 9.25, + "pChange": 0.5261810631701698, + "previousClose": 1757.95, + "finalQuantity": 241, + "totalTurnover": 425895.2, + "marketCap": 204747942975.77, + "yearHigh": 1839, + "yearLow": 1024.6, + "iep": 1767.2, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_COROMANDELEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1756, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1757.95, + "buyQty": 71, + "sellQty": 0 + }, + { + "price": 1758, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 1758.9, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 1760, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1767.2, + "buyQty": 0, + "sellQty": 44, + "iep": true + }, + { + "price": 1770.5, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1772, + "buyQty": 0, + "sellQty": 65 + }, + { + "price": 1772.1, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1772.15, + "buyQty": 0, + "sellQty": 30 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1767.2, + "totalTradedVolume": 241, + "finalPrice": 1767.2, + "finalQuantity": 241, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 6851, + "totalBuyQuantity": 3372, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 9.25, + "perChange": 0.5261810631701698, + "prevClose": 1757.95 + } + } + }, + { + "metadata": { + "symbol": "AUROPHARMA", + "identifier": "AUROPHARMAEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 1266, + "change": 6.599999999999909, + "pChange": 0.52405907575035, + "previousClose": 1259.4, + "finalQuantity": 848, + "totalTurnover": 1073568, + "marketCap": 350338383953.41, + "yearHigh": 1592, + "yearLow": 958.5, + "iep": 1266, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_AUROPHARMAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1259.4, + "buyQty": 117, + "sellQty": 0 + }, + { + "price": 1260, + "buyQty": 98, + "sellQty": 0 + }, + { + "price": 1265, + "buyQty": 40, + "sellQty": 0 + }, + { + "price": 1266, + "buyQty": 188, + "sellQty": 0, + "iep": true + }, + { + "price": 1266.1, + "buyQty": 312, + "sellQty": 0 + }, + { + "price": 1266.6, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1267.4, + "buyQty": 0, + "sellQty": 270 + }, + { + "price": 1268, + "buyQty": 0, + "sellQty": 201 + }, + { + "price": 1268.05, + "buyQty": 0, + "sellQty": 450 + }, + { + "price": 1268.4, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1266, + "totalTradedVolume": 848, + "finalPrice": 1266, + "finalQuantity": 848, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 12758, + "totalBuyQuantity": 8307, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 6.599999999999909, + "perChange": 0.52405907575035, + "prevClose": 1259.4 + } + } + }, + { + "metadata": { + "symbol": "SONACOMS", + "identifier": "SONACOMSEQN", + "purpose": "DIVIDEND - RS 1.53 PER SHARE", + "lastPrice": 692.7, + "change": 3.550000000000068, + "pChange": 0.5151273307697988, + "previousClose": 689.15, + "finalQuantity": 2753, + "totalTurnover": 1907003.1, + "marketCap": 307771824089.91, + "yearHigh": 768.65, + "yearLow": 531.6, + "iep": 692.7, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SONACOMSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 689.15, + "buyQty": 353, + "sellQty": 0 + }, + { + "price": 689.2, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 690, + "buyQty": 731, + "sellQty": 0 + }, + { + "price": 690.15, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 692, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 692.7, + "buyQty": 0, + "sellQty": 670, + "iep": true + }, + { + "price": 692.8, + "buyQty": 0, + "sellQty": 516 + }, + { + "price": 693, + "buyQty": 0, + "sellQty": 21 + }, + { + "price": 694, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 694.7, + "buyQty": 0, + "sellQty": 250 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 692.7, + "totalTradedVolume": 2753, + "finalPrice": 692.7, + "finalQuantity": 2753, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 41607, + "totalBuyQuantity": 23033, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.550000000000068, + "perChange": 0.5151273307697988, + "prevClose": 689.15 + } + } + }, + { + "metadata": { + "symbol": "UNIONBANK", + "identifier": "UNIONBANKEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 3.60 PER SHARE", + "lastPrice": 128.99, + "change": 0.6599999999999966, + "pChange": 0.5142990727031843, + "previousClose": 128.33, + "finalQuantity": 51872, + "totalTurnover": 6690969.28, + "marketCap": 246933887538.71, + "yearHigh": 172.5, + "yearLow": 106.68, + "iep": 128.99, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_UNIONBANKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 128.55, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 128.61, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 128.7, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 128.87, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 128.9, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 128.99, + "buyQty": 0, + "sellQty": 37251, + "iep": true + }, + { + "price": 129, + "buyQty": 0, + "sellQty": 14078 + }, + { + "price": 129.05, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 129.1, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 129.15, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 128.99, + "totalTradedVolume": 51872, + "finalPrice": 128.99, + "finalQuantity": 51872, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 972758, + "totalBuyQuantity": 199805, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.6599999999999966, + "perChange": 0.5142990727031843, + "prevClose": 128.33 + } + } + }, + { + "metadata": { + "symbol": "AUBANK", + "identifier": "AUBANKEQN", + "purpose": "DIVIDEND - RE 1 PER SHARE", + "lastPrice": 598.7, + "change": 3.050000000000068, + "pChange": 0.5120456644002465, + "previousClose": 595.65, + "finalQuantity": 1394, + "totalTurnover": 834587.8, + "marketCap": 333868309202.11, + "yearHigh": 813.4, + "yearLow": 553.7, + "iep": 598.7, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_AUBANKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 596.85, + "buyQty": 115, + "sellQty": 0 + }, + { + "price": 597, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 597.1, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 597.5, + "buyQty": 1010, + "sellQty": 0 + }, + { + "price": 597.6, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 598.7, + "buyQty": 0, + "sellQty": 270, + "iep": true + }, + { + "price": 598.8, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 598.9, + "buyQty": 0, + "sellQty": 40 + }, + { + "price": 599, + "buyQty": 0, + "sellQty": 122 + }, + { + "price": 599.2, + "buyQty": 0, + "sellQty": 233 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 598.7, + "totalTradedVolume": 1394, + "finalPrice": 598.7, + "finalQuantity": 1394, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 30703, + "totalBuyQuantity": 16475, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.050000000000068, + "perChange": 0.5120456644002465, + "prevClose": 595.65 + } + } + }, + { + "metadata": { + "symbol": "GNFC", + "identifier": "GNFCEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 638.5, + "change": 3.25, + "pChange": 0.5116096025186935, + "previousClose": 635.25, + "finalQuantity": 270, + "totalTurnover": 172395, + "marketCap": 52906191284.07, + "yearHigh": 814.9, + "yearLow": 524, + "iep": 638.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GNFCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 634.6, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 635, + "buyQty": 122, + "sellQty": 0 + }, + { + "price": 635.25, + "buyQty": 905, + "sellQty": 0 + }, + { + "price": 636, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 636.15, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 638.5, + "buyQty": 0, + "sellQty": 81, + "iep": true + }, + { + "price": 638.55, + "buyQty": 0, + "sellQty": 210 + }, + { + "price": 638.65, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 638.7, + "buyQty": 0, + "sellQty": 80 + }, + { + "price": 639.7, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 638.5, + "totalTradedVolume": 270, + "finalPrice": 638.5, + "finalQuantity": 270, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 21408, + "totalBuyQuantity": 6449, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.25, + "perChange": 0.5116096025186935, + "prevClose": 635.25 + } + } + }, + { + "metadata": { + "symbol": "PNB", + "identifier": "PNBEQN", + "purpose": "DIVIDEND - RS 1.50 PER SHARE", + "lastPrice": 110.57, + "change": 0.5599999999999881, + "pChange": 0.5090446323061432, + "previousClose": 110.01, + "finalQuantity": 153471, + "totalTurnover": 16969288.47, + "marketCap": 339454193210.46, + "yearHigh": 142.9, + "yearLow": 82.3, + "iep": 110.57, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PNBEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 110.4, + "buyQty": 780, + "sellQty": 0 + }, + { + "price": 110.45, + "buyQty": 110, + "sellQty": 0 + }, + { + "price": 110.5, + "buyQty": 552, + "sellQty": 0 + }, + { + "price": 110.53, + "buyQty": 56, + "sellQty": 0 + }, + { + "price": 110.55, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 110.57, + "buyQty": 0, + "sellQty": 1310, + "iep": true + }, + { + "price": 110.58, + "buyQty": 0, + "sellQty": 10000 + }, + { + "price": 110.6, + "buyQty": 0, + "sellQty": 5156 + }, + { + "price": 110.64, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 110.65, + "buyQty": 0, + "sellQty": 2175 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 110.57, + "totalTradedVolume": 153471, + "finalPrice": 110.57, + "finalQuantity": 153471, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 879801, + "totalBuyQuantity": 450123, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.5599999999999881, + "perChange": 0.5090446323061432, + "prevClose": 110.01 + } + } + }, + { + "metadata": { + "symbol": "KPITTECH", + "identifier": "KPITTECHEQN", + "purpose": "DIVIDEND - RS 4.60 PER SHARE", + "lastPrice": 1464.5, + "change": 7.349999999999909, + "pChange": 0.5044092921113069, + "previousClose": 1457.15, + "finalQuantity": 5273, + "totalTurnover": 7722308.5, + "marketCap": 236739897142.27, + "yearHigh": 1928.7, + "yearLow": 1283.25, + "iep": 1464.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_KPITTECHEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1457.3, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1457.5, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 1458, + "buyQty": 169, + "sellQty": 0 + }, + { + "price": 1459, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 1460, + "buyQty": 2006, + "sellQty": 0 + }, + { + "price": 1464.5, + "buyQty": 0, + "sellQty": 29, + "iep": true + }, + { + "price": 1464.7, + "buyQty": 0, + "sellQty": 135 + }, + { + "price": 1464.8, + "buyQty": 0, + "sellQty": 37 + }, + { + "price": 1464.9, + "buyQty": 0, + "sellQty": 90 + }, + { + "price": 1465, + "buyQty": 0, + "sellQty": 686 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1464.5, + "totalTradedVolume": 5273, + "finalPrice": 1464.5, + "finalQuantity": 5273, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 31357, + "totalBuyQuantity": 22025, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 7.349999999999909, + "perChange": 0.5044092921113069, + "prevClose": 1457.15 + } + } + }, + { + "metadata": { + "symbol": "GODREJCP", + "identifier": "GODREJCPEQN", + "purpose": "INTERIM DIVIDEND - RS 5 PER SHARE", + "lastPrice": 1234.65, + "change": 6.150000000000091, + "pChange": 0.500610500610508, + "previousClose": 1228.5, + "finalQuantity": 127, + "totalTurnover": 156800.55, + "marketCap": 460772070463.01, + "yearHigh": 1541.85, + "yearLow": 1015.7, + "iep": 1234.65, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GODREJCPEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1226.9, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1228, + "buyQty": 34, + "sellQty": 0 + }, + { + "price": 1228.5, + "buyQty": 34, + "sellQty": 0 + }, + { + "price": 1229, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 1231, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 1234.65, + "buyQty": 0, + "sellQty": 41, + "iep": true + }, + { + "price": 1234.9, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 1235.1, + "buyQty": 0, + "sellQty": 7 + }, + { + "price": 1235.2, + "buyQty": 0, + "sellQty": 18 + }, + { + "price": 1235.3, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1234.65, + "totalTradedVolume": 127, + "finalPrice": 1234.65, + "finalQuantity": 127, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 3782, + "totalBuyQuantity": 4427, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 6.150000000000091, + "perChange": 0.500610500610508, + "prevClose": 1228.5 + } + } + }, + { + "metadata": { + "symbol": "BAJAJ-AUTO", + "identifier": "BAJAJ-AUTOEQN", + "purpose": "DIVIDEND - RS 80 PER SHARE", + "lastPrice": 9044.15, + "change": 45, + "pChange": 0.5000472266825201, + "previousClose": 8999.15, + "finalQuantity": 1949, + "totalTurnover": 17627048.35, + "marketCap": 997000764702.26, + "yearHigh": 12774, + "yearLow": 5987.85, + "iep": 9044.15, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BAJAJ-AUTOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 9013, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 9015, + "buyQty": 18, + "sellQty": 0 + }, + { + "price": 9020, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 9030, + "buyQty": 13, + "sellQty": 0 + }, + { + "price": 9035, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 9044.15, + "buyQty": 0, + "sellQty": 134, + "iep": true + }, + { + "price": 9044.8, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 9048, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 9049.15, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 9049.8, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 9044.15, + "totalTradedVolume": 1949, + "finalPrice": 9044.15, + "finalQuantity": 1949, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 7836, + "totalBuyQuantity": 6354, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 45, + "perChange": 0.5000472266825201, + "prevClose": 8999.15 + } + } + }, + { + "metadata": { + "symbol": "BPCL", + "identifier": "BPCLEQN", + "purpose": "DIVIDEND - RS 10.5 PER SHARE", + "lastPrice": 295.1, + "change": 1.4500000000000455, + "pChange": 0.4937851183381732, + "previousClose": 293.65, + "finalQuantity": 13345, + "totalTurnover": 3938109.5, + "marketCap": 568289076523.25, + "yearHigh": 376, + "yearLow": 216.23, + "iep": 295.1, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BPCLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 294.3, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 294.35, + "buyQty": 72, + "sellQty": 0 + }, + { + "price": 294.5, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 294.55, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 295, + "buyQty": 2460, + "sellQty": 0 + }, + { + "price": 295.1, + "buyQty": 0, + "sellQty": 4439, + "iep": true + }, + { + "price": 295.2, + "buyQty": 0, + "sellQty": 76 + }, + { + "price": 295.3, + "buyQty": 0, + "sellQty": 1005 + }, + { + "price": 295.35, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 295.45, + "buyQty": 0, + "sellQty": 30 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 295.1, + "totalTradedVolume": 13345, + "finalPrice": 295.1, + "finalQuantity": 13345, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 220374, + "totalBuyQuantity": 157159, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.4500000000000455, + "perChange": 0.4937851183381732, + "prevClose": 293.65 + } + } + }, + { + "metadata": { + "symbol": "PIDILITIND", + "identifier": "PIDILITINDEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 3220, + "change": 15.25, + "pChange": 0.475856151025821, + "previousClose": 3204.75, + "finalQuantity": 733, + "totalTurnover": 2360260, + "marketCap": 488021175929.57, + "yearHigh": 3415, + "yearLow": 2488.1, + "iep": 3220, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PIDILITINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3204, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 3204.75, + "buyQty": 31, + "sellQty": 0 + }, + { + "price": 3205, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3206, + "buyQty": 34, + "sellQty": 0 + }, + { + "price": 3220, + "buyQty": 225, + "sellQty": 0, + "iep": true + }, + { + "price": 3221, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 3222, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 3223.9, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 3224, + "buyQty": 0, + "sellQty": 19 + }, + { + "price": 3224.2, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3220, + "totalTradedVolume": 733, + "finalPrice": 3220, + "finalQuantity": 733, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 3194, + "totalBuyQuantity": 2046, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 15.25, + "perChange": 0.475856151025821, + "prevClose": 3204.75 + } + } + }, + { + "metadata": { + "symbol": "ICICIPRULI", + "identifier": "ICICIPRULIEQN", + "purpose": "DIVIDEND - RE 0.60 PER SHARE", + "lastPrice": 679, + "change": 3.2000000000000455, + "pChange": 0.47351287363125866, + "previousClose": 675.8, + "finalQuantity": 1147, + "totalTurnover": 778813, + "marketCap": 261540538046.98, + "yearHigh": 796.8, + "yearLow": 463.45, + "iep": 679, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ICICIPRULIEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 675.8, + "buyQty": 225, + "sellQty": 0 + }, + { + "price": 676, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 676.5, + "buyQty": 225, + "sellQty": 0 + }, + { + "price": 677, + "buyQty": 350, + "sellQty": 0 + }, + { + "price": 679, + "buyQty": 2, + "sellQty": 0, + "iep": true + }, + { + "price": 679.2, + "buyQty": 0, + "sellQty": 1500 + }, + { + "price": 679.75, + "buyQty": 0, + "sellQty": 58 + }, + { + "price": 679.9, + "buyQty": 0, + "sellQty": 1000 + }, + { + "price": 680, + "buyQty": 0, + "sellQty": 46 + }, + { + "price": 682, + "buyQty": 0, + "sellQty": 508 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 679, + "totalTradedVolume": 1147, + "finalPrice": 679, + "finalQuantity": 1147, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 15863, + "totalBuyQuantity": 8399, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.2000000000000455, + "perChange": 0.47351287363125866, + "prevClose": 675.8 + } + } + }, + { + "metadata": { + "symbol": "SUNPHARMA", + "identifier": "SUNPHARMAEQN", + "purpose": "DIVIDEND - RS 5 PER SHARE", + "lastPrice": 1808.7, + "change": 8.5, + "pChange": 0.47216975891567603, + "previousClose": 1800.2, + "finalQuantity": 3344, + "totalTurnover": 6048292.8, + "marketCap": 1942464787113.23, + "yearHigh": 1960.35, + "yearLow": 1208.55, + "iep": 1808.7, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SUNPHARMAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1801.3, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1801.65, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 1802, + "buyQty": 13, + "sellQty": 0 + }, + { + "price": 1803, + "buyQty": 75, + "sellQty": 0 + }, + { + "price": 1807, + "buyQty": 51, + "sellQty": 0 + }, + { + "price": 1808.7, + "buyQty": 0, + "sellQty": 385, + "iep": true + }, + { + "price": 1809.2, + "buyQty": 0, + "sellQty": 272 + }, + { + "price": 1809.8, + "buyQty": 0, + "sellQty": 250 + }, + { + "price": 1811, + "buyQty": 0, + "sellQty": 48 + }, + { + "price": 1812, + "buyQty": 0, + "sellQty": 74 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1808.7, + "totalTradedVolume": 3344, + "finalPrice": 1808.7, + "finalQuantity": 3344, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 17867, + "totalBuyQuantity": 5039, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 8.5, + "perChange": 0.47216975891567603, + "prevClose": 1800.2 + } + } + }, + { + "metadata": { + "symbol": "ATUL", + "identifier": "ATULEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 20 PER SHARE", + "lastPrice": 7420, + "change": 34.19999999999982, + "pChange": 0.4630507189471664, + "previousClose": 7385.8, + "finalQuantity": 14, + "totalTurnover": 103880, + "marketCap": 117518117312.87, + "yearHigh": 8180, + "yearLow": 5174.85, + "iep": 7420, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ATULEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 7331.5, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 7375, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 7385.8, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 7386, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 7399, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 7420, + "buyQty": 0, + "sellQty": 6, + "iep": true + }, + { + "price": 7422.55, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 7428, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 7431.95, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 7432.3, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 7420, + "totalTradedVolume": 14, + "finalPrice": 7420, + "finalQuantity": 14, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 607, + "totalBuyQuantity": 297, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 34.19999999999982, + "perChange": 0.4630507189471664, + "prevClose": 7385.8 + } + } + }, + { + "metadata": { + "symbol": "JSWENERGY", + "identifier": "JSWENERGYEQN", + "purpose": "DIVIDEND - RS 2 PER SHARE", + "lastPrice": 651.4, + "change": 3, + "pChange": 0.46267735965453427, + "previousClose": 648.4, + "finalQuantity": 2284, + "totalTurnover": 1487797.6, + "marketCap": 345481082101.92, + "yearHigh": 804.9, + "yearLow": 397.65, + "iep": 651.4, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_JSWENERGYEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 649, + "buyQty": 354, + "sellQty": 0 + }, + { + "price": 649.1, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 649.5, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 650, + "buyQty": 586, + "sellQty": 0 + }, + { + "price": 651, + "buyQty": 1775, + "sellQty": 0 + }, + { + "price": 651.4, + "buyQty": 0, + "sellQty": 155, + "iep": true + }, + { + "price": 651.5, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 651.6, + "buyQty": 0, + "sellQty": 13 + }, + { + "price": 651.65, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 652, + "buyQty": 0, + "sellQty": 62 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 651.4, + "totalTradedVolume": 2284, + "finalPrice": 651.4, + "finalQuantity": 2284, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 64028, + "totalBuyQuantity": 37789, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3, + "perChange": 0.46267735965453427, + "prevClose": 648.4 + } + } + }, + { + "metadata": { + "symbol": "EXIDEIND", + "identifier": "EXIDEINDEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 2 PER SHARE", + "lastPrice": 456.8, + "change": 2.1000000000000227, + "pChange": 0.4618429733890528, + "previousClose": 454.7, + "finalQuantity": 2565, + "totalTurnover": 1171692, + "marketCap": 206219290500, + "yearHigh": 620.35, + "yearLow": 278.5, + "iep": 456.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_EXIDEINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 454.8, + "buyQty": 34, + "sellQty": 0 + }, + { + "price": 454.85, + "buyQty": 34, + "sellQty": 0 + }, + { + "price": 455, + "buyQty": 230, + "sellQty": 0 + }, + { + "price": 456, + "buyQty": 110, + "sellQty": 0 + }, + { + "price": 456.6, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 456.8, + "buyQty": 0, + "sellQty": 209, + "iep": true + }, + { + "price": 456.9, + "buyQty": 0, + "sellQty": 196 + }, + { + "price": 457, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 457.1, + "buyQty": 0, + "sellQty": 239 + }, + { + "price": 457.25, + "buyQty": 0, + "sellQty": 44 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 456.8, + "totalTradedVolume": 2565, + "finalPrice": 456.8, + "finalQuantity": 2565, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 64783, + "totalBuyQuantity": 18415, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.1000000000000227, + "perChange": 0.4618429733890528, + "prevClose": 454.7 + } + } + }, + { + "metadata": { + "symbol": "JIOFIN", + "identifier": "JIOFINEQN", + "purpose": null, + "lastPrice": 346.75, + "change": 1.5500000000000114, + "pChange": 0.4490150637311736, + "previousClose": 345.2, + "finalQuantity": 52979, + "totalTurnover": 18370468.25, + "marketCap": 1130118305517.93, + "yearHigh": 394.7, + "yearLow": 227.9, + "iep": 346.75, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_JIOFINEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 345.8, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 346, + "buyQty": 1675, + "sellQty": 0 + }, + { + "price": 346.05, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 346.25, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 346.5, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 346.75, + "buyQty": 0, + "sellQty": 14693, + "iep": true + }, + { + "price": 346.8, + "buyQty": 0, + "sellQty": 1524 + }, + { + "price": 346.85, + "buyQty": 0, + "sellQty": 3378 + }, + { + "price": 346.9, + "buyQty": 0, + "sellQty": 4139 + }, + { + "price": 346.95, + "buyQty": 0, + "sellQty": 7197 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 346.75, + "totalTradedVolume": 52979, + "finalPrice": 346.75, + "finalQuantity": 52979, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 1085544, + "totalBuyQuantity": 210650, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.5500000000000114, + "perChange": 0.4490150637311736, + "prevClose": 345.2 + } + } + }, + { + "metadata": { + "symbol": "TATASTEEL", + "identifier": "TATASTEELEQN", + "purpose": "DIVIDEND - RS 3.60 PER SHARE", + "lastPrice": 146.5, + "change": 0.6500000000000057, + "pChange": 0.44566335275968855, + "previousClose": 145.85, + "finalQuantity": 96403, + "totalTurnover": 14123039.5, + "marketCap": 1207318878054.22, + "yearHigh": 184.6, + "yearLow": 127.85, + "iep": 146.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TATASTEELEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 146.11, + "buyQty": 26, + "sellQty": 0 + }, + { + "price": 146.2, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 146.3, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 146.45, + "buyQty": 4575, + "sellQty": 0 + }, + { + "price": 146.5, + "buyQty": 19397, + "sellQty": 0, + "iep": true + }, + { + "price": 146.54, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 146.55, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 146.59, + "buyQty": 0, + "sellQty": 75 + }, + { + "price": 146.6, + "buyQty": 0, + "sellQty": 303 + }, + { + "price": 146.64, + "buyQty": 0, + "sellQty": 600 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 146.5, + "totalTradedVolume": 96403, + "finalPrice": 146.5, + "finalQuantity": 96403, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 904356, + "totalBuyQuantity": 441186, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.6500000000000057, + "perChange": 0.44566335275968855, + "prevClose": 145.85 + } + } + }, + { + "metadata": { + "symbol": "FEDERALBNK", + "identifier": "FEDERALBNKEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 1.20 PER SHARE", + "lastPrice": 216.4, + "change": 0.960000000000008, + "pChange": 0.44559970293353507, + "previousClose": 215.44, + "finalQuantity": 46547, + "totalTurnover": 10072770.8, + "marketCap": 527409050976.11, + "yearHigh": 216.28, + "yearLow": 139.4, + "iep": 216.4, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_FEDERALBNKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 216, + "buyQty": 9755, + "sellQty": 0 + }, + { + "price": 216.05, + "buyQty": 1182, + "sellQty": 0 + }, + { + "price": 216.1, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 216.15, + "buyQty": 97, + "sellQty": 0 + }, + { + "price": 216.3, + "buyQty": 302, + "sellQty": 0 + }, + { + "price": 216.4, + "buyQty": 0, + "sellQty": 3427, + "iep": true + }, + { + "price": 216.43, + "buyQty": 0, + "sellQty": 1509 + }, + { + "price": 216.45, + "buyQty": 0, + "sellQty": 10150 + }, + { + "price": 216.47, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 216.48, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 216.4, + "totalTradedVolume": 46547, + "finalPrice": 216.4, + "finalQuantity": 46547, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 404893, + "totalBuyQuantity": 156969, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.960000000000008, + "perChange": 0.44559970293353507, + "prevClose": 215.44 + } + } + }, + { + "metadata": { + "symbol": "CGPOWER", + "identifier": "CGPOWEREQN", + "purpose": "INTERIM DIVIDEND - RS 1.30 PER SHARE", + "lastPrice": 755.55, + "change": 3.349999999999909, + "pChange": 0.44536027652218946, + "previousClose": 752.2, + "finalQuantity": 2258, + "totalTurnover": 1706031.9, + "marketCap": 480158812184.24, + "yearHigh": 874.7, + "yearLow": 414.3, + "iep": 755.55, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CGPOWEREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 752.4, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 752.5, + "buyQty": 308, + "sellQty": 0 + }, + { + "price": 752.95, + "buyQty": 215, + "sellQty": 0 + }, + { + "price": 753, + "buyQty": 160, + "sellQty": 0 + }, + { + "price": 755, + "buyQty": 120, + "sellQty": 0 + }, + { + "price": 755.55, + "buyQty": 0, + "sellQty": 945, + "iep": true + }, + { + "price": 755.65, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 756.4, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 757, + "buyQty": 0, + "sellQty": 7 + }, + { + "price": 757.5, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 755.55, + "totalTradedVolume": 2258, + "finalPrice": 755.55, + "finalQuantity": 2258, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 73128, + "totalBuyQuantity": 22397, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.349999999999909, + "perChange": 0.44536027652218946, + "prevClose": 752.2 + } + } + }, + { + "metadata": { + "symbol": "ANGELONE", + "identifier": "ANGELONEEQN", + "purpose": "INTERIM DIVIDEND - RS 12.70 PER SHARE", + "lastPrice": 3045.5, + "change": 13.449999999999818, + "pChange": 0.443594267904547, + "previousClose": 3032.05, + "finalQuantity": 1348, + "totalTurnover": 4105334, + "marketCap": 175534877732.92, + "yearHigh": 3896, + "yearLow": 2025, + "iep": 3045.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ANGELONEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3036, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 3038, + "buyQty": 362, + "sellQty": 0 + }, + { + "price": 3040, + "buyQty": 12, + "sellQty": 0 + }, + { + "price": 3042, + "buyQty": 310, + "sellQty": 0 + }, + { + "price": 3045, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 3045.5, + "buyQty": 0, + "sellQty": 124, + "iep": true + }, + { + "price": 3045.55, + "buyQty": 0, + "sellQty": 300 + }, + { + "price": 3046.35, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 3047, + "buyQty": 0, + "sellQty": 45 + }, + { + "price": 3048, + "buyQty": 0, + "sellQty": 215 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3045.5, + "totalTradedVolume": 1348, + "finalPrice": 3045.5, + "finalQuantity": 1348, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 18166, + "totalBuyQuantity": 9147, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 13.449999999999818, + "perChange": 0.443594267904547, + "prevClose": 3032.05 + } + } + }, + { + "metadata": { + "symbol": "PAYTM", + "identifier": "PAYTMEQN", + "purpose": null, + "lastPrice": 944, + "change": 4.149999999999977, + "pChange": 0.44155982337606825, + "previousClose": 939.85, + "finalQuantity": 22380, + "totalTurnover": 21126720, + "marketCap": 315965011835.11, + "yearHigh": 952, + "yearLow": 310, + "iep": 944, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PAYTMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 942.05, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 942.55, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 943.05, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 943.55, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 944, + "buyQty": 10713, + "sellQty": 0, + "iep": true + }, + { + "price": 944.05, + "buyQty": 0, + "sellQty": 37 + }, + { + "price": 944.45, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 944.5, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 944.55, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 944.6, + "buyQty": 0, + "sellQty": 60 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 944, + "totalTradedVolume": 22380, + "finalPrice": 944, + "finalQuantity": 22380, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 160063, + "totalBuyQuantity": 56217, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4.149999999999977, + "perChange": 0.44155982337606825, + "prevClose": 939.85 + } + } + }, + { + "metadata": { + "symbol": "M&MFIN", + "identifier": "M&MFINEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 6.30 PER SHARE", + "lastPrice": 286.6, + "change": 1.25, + "pChange": 0.43805852461888906, + "previousClose": 285.35, + "finalQuantity": 6621, + "totalTurnover": 1897578.6, + "marketCap": 168336794288.93, + "yearHigh": 343, + "yearLow": 246.2, + "iep": 286.6, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_M&MFINEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 283.25, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 284.5, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 285, + "buyQty": 61, + "sellQty": 0 + }, + { + "price": 285.35, + "buyQty": 289, + "sellQty": 0 + }, + { + "price": 286, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 286.6, + "buyQty": 0, + "sellQty": 1282, + "iep": true + }, + { + "price": 286.75, + "buyQty": 0, + "sellQty": 33 + }, + { + "price": 286.8, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 287, + "buyQty": 0, + "sellQty": 2112 + }, + { + "price": 287.35, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 286.6, + "totalTradedVolume": 6621, + "finalPrice": 286.6, + "finalQuantity": 6621, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 47633, + "totalBuyQuantity": 15425, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.25, + "perChange": 0.43805852461888906, + "prevClose": 285.35 + } + } + }, + { + "metadata": { + "symbol": "HEROMOTOCO", + "identifier": "HEROMOTOCOEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 40 PER SHARE", + "lastPrice": 4656, + "change": 20.149999999999636, + "pChange": 0.43465599620349304, + "previousClose": 4635.85, + "finalQuantity": 2947, + "totalTurnover": 13721232, + "marketCap": 600784394957.29, + "yearHigh": 6246.25, + "yearLow": 3683, + "iep": 4656, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HEROMOTOCOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4653, + "buyQty": 77, + "sellQty": 0 + }, + { + "price": 4655, + "buyQty": 272, + "sellQty": 0 + }, + { + "price": 4655.25, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 4655.6, + "buyQty": 78, + "sellQty": 0 + }, + { + "price": 4656, + "buyQty": 69, + "sellQty": 0, + "iep": true + }, + { + "price": 4660, + "buyQty": 0, + "sellQty": 13 + }, + { + "price": 4670, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 4670.55, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 4674, + "buyQty": 0, + "sellQty": 140 + }, + { + "price": 4675, + "buyQty": 0, + "sellQty": 13 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4656, + "totalTradedVolume": 2947, + "finalPrice": 4656, + "finalQuantity": 2947, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 8981, + "totalBuyQuantity": 9514, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 20.149999999999636, + "perChange": 0.43465599620349304, + "prevClose": 4635.85 + } + } + }, + { + "metadata": { + "symbol": "DABUR", + "identifier": "DABUREQN", + "purpose": "INTERIM DIVIDEND - RS 2.75 PER SHARE", + "lastPrice": 525, + "change": 2.2000000000000455, + "pChange": 0.4208110175975604, + "previousClose": 522.8, + "finalQuantity": 1633, + "totalTurnover": 857325, + "marketCap": 307839469005.06, + "yearHigh": 672, + "yearLow": 489.2, + "iep": 525, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DABUREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 522.85, + "buyQty": 22, + "sellQty": 0 + }, + { + "price": 522.9, + "buyQty": 574, + "sellQty": 0 + }, + { + "price": 523, + "buyQty": 77, + "sellQty": 0 + }, + { + "price": 523.9, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 524, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 525, + "buyQty": 0, + "sellQty": 76, + "iep": true + }, + { + "price": 525.4, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 525.9, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 526.15, + "buyQty": 0, + "sellQty": 327 + }, + { + "price": 526.25, + "buyQty": 0, + "sellQty": 65 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 525, + "totalTradedVolume": 1633, + "finalPrice": 525, + "finalQuantity": 1633, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 23629, + "totalBuyQuantity": 200022, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.2000000000000455, + "perChange": 0.4208110175975604, + "prevClose": 522.8 + } + } + }, + { + "metadata": { + "symbol": "RELIANCE", + "identifier": "RELIANCEEQN", + "purpose": "BONUS 1:1", + "lastPrice": 1314.35, + "change": 5.399999999999864, + "pChange": 0.4125444058214496, + "previousClose": 1308.95, + "finalQuantity": 136249, + "totalTurnover": 179078873.15, + "marketCap": 8869018524664.26, + "yearHigh": 1608.8, + "yearLow": 1199.3, + "iep": 1314.35, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_RELIANCEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1312.15, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1312.5, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1312.75, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1313, + "buyQty": 102, + "sellQty": 0 + }, + { + "price": 1314, + "buyQty": 113, + "sellQty": 0 + }, + { + "price": 1314.35, + "buyQty": 0, + "sellQty": 353, + "iep": true + }, + { + "price": 1314.4, + "buyQty": 0, + "sellQty": 902 + }, + { + "price": 1314.45, + "buyQty": 0, + "sellQty": 10000 + }, + { + "price": 1314.8, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 1314.85, + "buyQty": 0, + "sellQty": 3 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1314.35, + "totalTradedVolume": 136249, + "finalPrice": 1314.35, + "finalQuantity": 136249, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 324729, + "totalBuyQuantity": 162618, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 5.399999999999864, + "perChange": 0.4125444058214496, + "prevClose": 1308.95 + } + } + }, + { + "metadata": { + "symbol": "HAL", + "identifier": "HALEQN", + "purpose": "DIVIDEND - RS 13 PER SHARE", + "lastPrice": 4540, + "change": 18.649999999999636, + "pChange": 0.4124874207924544, + "previousClose": 4521.35, + "finalQuantity": 4287, + "totalTurnover": 19462980, + "marketCap": 856555490319, + "yearHigh": 5674.75, + "yearLow": 2473, + "iep": 4540, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HALEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4531.35, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 4532, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 4535, + "buyQty": 52, + "sellQty": 0 + }, + { + "price": 4539.5, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 4539.9, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 4540, + "buyQty": 0, + "sellQty": 413, + "iep": true + }, + { + "price": 4542, + "buyQty": 0, + "sellQty": 31 + }, + { + "price": 4542.2, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 4542.8, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 4543, + "buyQty": 0, + "sellQty": 302 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4540, + "totalTradedVolume": 4287, + "finalPrice": 4540, + "finalQuantity": 4287, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 64821, + "totalBuyQuantity": 13489, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 18.649999999999636, + "perChange": 0.4124874207924544, + "prevClose": 4521.35 + } + } + }, + { + "metadata": { + "symbol": "ADANIENT", + "identifier": "ADANIENTEQN", + "purpose": "DIVIDEND - RS 1.30 PER SHARE", + "lastPrice": 2505, + "change": 10.25, + "pChange": 0.41086281190500046, + "previousClose": 2494.75, + "finalQuantity": 3757, + "totalTurnover": 9411285, + "marketCap": 591258273431.79, + "yearHigh": 3743.9, + "yearLow": 2025, + "iep": 2505, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ADANIENTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2497, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 2498.2, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 2499, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 2500, + "buyQty": 102, + "sellQty": 0 + }, + { + "price": 2501, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 2505, + "buyQty": 0, + "sellQty": 692, + "iep": true + }, + { + "price": 2506, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 2508, + "buyQty": 0, + "sellQty": 215 + }, + { + "price": 2508.2, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 2508.4, + "buyQty": 0, + "sellQty": 30 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2505, + "totalTradedVolume": 3757, + "finalPrice": 2505, + "finalQuantity": 3757, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 40479, + "totalBuyQuantity": 14894, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 10.25, + "perChange": 0.41086281190500046, + "prevClose": 2494.75 + } + } + }, + { + "metadata": { + "symbol": "CIPLA", + "identifier": "CIPLAEQN", + "purpose": "DIVIDEND - RS 13 PER SHARE", + "lastPrice": 1507, + "change": 6.150000000000091, + "pChange": 0.40976779824766574, + "previousClose": 1500.85, + "finalQuantity": 4048, + "totalTurnover": 6100336, + "marketCap": 823177220060.43, + "yearHigh": 1702.05, + "yearLow": 1192.1, + "iep": 1507, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CIPLAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1501, + "buyQty": 111, + "sellQty": 0 + }, + { + "price": 1502, + "buyQty": 54, + "sellQty": 0 + }, + { + "price": 1502.45, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 1505, + "buyQty": 17, + "sellQty": 0 + }, + { + "price": 1505.8, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 1507, + "buyQty": 0, + "sellQty": 345, + "iep": true + }, + { + "price": 1507.45, + "buyQty": 0, + "sellQty": 250 + }, + { + "price": 1508.25, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1509, + "buyQty": 0, + "sellQty": 550 + }, + { + "price": 1509.7, + "buyQty": 0, + "sellQty": 80 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1507, + "totalTradedVolume": 4048, + "finalPrice": 1507, + "finalQuantity": 4048, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 29074, + "totalBuyQuantity": 28654, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 6.150000000000091, + "perChange": 0.40976779824766574, + "prevClose": 1500.85 + } + } + }, + { + "metadata": { + "symbol": "TATACONSUM", + "identifier": "TATACONSUMEQN", + "purpose": "RIGHTS 1:26 @ PREMIUM RS 817/-", + "lastPrice": 965, + "change": 3.7999999999999545, + "pChange": 0.39533915938409847, + "previousClose": 961.2, + "finalQuantity": 2630, + "totalTurnover": 2537950, + "marketCap": 623761468216.97, + "yearHigh": 1256.44, + "yearLow": 900.5, + "iep": 965, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TATACONSUMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 962, + "buyQty": 12, + "sellQty": 0 + }, + { + "price": 962.1, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 962.2, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 963, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 964, + "buyQty": 27, + "sellQty": 0 + }, + { + "price": 965, + "buyQty": 0, + "sellQty": 318, + "iep": true + }, + { + "price": 965.9, + "buyQty": 0, + "sellQty": 58 + }, + { + "price": 965.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 966, + "buyQty": 0, + "sellQty": 86 + }, + { + "price": 966.9, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 965, + "totalTradedVolume": 2630, + "finalPrice": 965, + "finalQuantity": 2630, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 26681, + "totalBuyQuantity": 14272, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.7999999999999545, + "perChange": 0.39533915938409847, + "prevClose": 961.2 + } + } + }, + { + "metadata": { + "symbol": "AXISBANK", + "identifier": "AXISBANKEQN", + "purpose": "DIVIDEND - RE 1 PER SHARE", + "lastPrice": 1164, + "change": 4.5499999999999545, + "pChange": 0.3924274440467424, + "previousClose": 1159.45, + "finalQuantity": 62617, + "totalTurnover": 72886188, + "marketCap": 3299544774553.53, + "yearHigh": 1339.65, + "yearLow": 995.7, + "iep": 1164, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_AXISBANKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1160.1, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 1161, + "buyQty": 652, + "sellQty": 0 + }, + { + "price": 1162, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1162.8, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 1163, + "buyQty": 48, + "sellQty": 0 + }, + { + "price": 1164, + "buyQty": 0, + "sellQty": 4726, + "iep": true + }, + { + "price": 1164.05, + "buyQty": 0, + "sellQty": 18 + }, + { + "price": 1164.8, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 1164.9, + "buyQty": 0, + "sellQty": 525 + }, + { + "price": 1164.95, + "buyQty": 0, + "sellQty": 9 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1164, + "totalTradedVolume": 62617, + "finalPrice": 1164, + "finalQuantity": 62617, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 150861, + "totalBuyQuantity": 28109, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4.5499999999999545, + "perChange": 0.3924274440467424, + "prevClose": 1159.45 + } + } + }, + { + "metadata": { + "symbol": "SHREECEM", + "identifier": "SHREECEMEQN", + "purpose": "DIVIDEND - RS 55 PER SHARE", + "lastPrice": 27510, + "change": 106.09999999999854, + "pChange": 0.38717116906717125, + "previousClose": 27403.9, + "finalQuantity": 46, + "totalTurnover": 1265460, + "marketCap": 365277100462.14, + "yearHigh": 30737.75, + "yearLow": 23500, + "iep": 27510, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SHREECEMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 27111, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 27150, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 27200, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 27205, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 27300, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 27510, + "buyQty": 0, + "sellQty": 48, + "iep": true + }, + { + "price": 27527.3, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 27550, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 27551, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 27570, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 27510, + "totalTradedVolume": 46, + "finalPrice": 27510, + "finalQuantity": 46, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 671, + "totalBuyQuantity": 241, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 106.09999999999854, + "perChange": 0.38717116906717125, + "prevClose": 27403.9 + } + } + }, + { + "metadata": { + "symbol": "DMART", + "identifier": "DMARTEQN", + "purpose": " ANNUAL GENERAL MEETING", + "lastPrice": 3865, + "change": 14.900000000000091, + "pChange": 0.387002934988704, + "previousClose": 3850.1, + "finalQuantity": 658, + "totalTurnover": 2543170, + "marketCap": 567771796269.73, + "yearHigh": 5484.85, + "yearLow": 3564, + "iep": 3865, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DMARTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3855, + "buyQty": 17, + "sellQty": 0 + }, + { + "price": 3856, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 3856.1, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3860, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 3861.3, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3865, + "buyQty": 0, + "sellQty": 26, + "iep": true + }, + { + "price": 3865.75, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 3868, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 3869, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 3869.6, + "buyQty": 0, + "sellQty": 20 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3865, + "totalTradedVolume": 658, + "finalPrice": 3865, + "finalQuantity": 658, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 15494, + "totalBuyQuantity": 6750, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 14.900000000000091, + "perChange": 0.387002934988704, + "prevClose": 3850.1 + } + } + }, + { + "metadata": { + "symbol": "PFC", + "identifier": "PFCEQN", + "purpose": "INTERIM DIVIDEND - RS 3.50 PER SHARE", + "lastPrice": 511.95, + "change": 1.9499999999999886, + "pChange": 0.38235294117646834, + "previousClose": 510, + "finalQuantity": 9455, + "totalTurnover": 4840487.25, + "marketCap": 739820175360.49, + "yearHigh": 580, + "yearLow": 351.7, + "iep": 511.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PFCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 510.65, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 510.9, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 511, + "buyQty": 1041, + "sellQty": 0 + }, + { + "price": 511.7, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 511.85, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 511.95, + "buyQty": 0, + "sellQty": 7457, + "iep": true + }, + { + "price": 512, + "buyQty": 0, + "sellQty": 1124 + }, + { + "price": 512.3, + "buyQty": 0, + "sellQty": 300 + }, + { + "price": 512.35, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 512.5, + "buyQty": 0, + "sellQty": 1051 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 511.95, + "totalTradedVolume": 9455, + "finalPrice": 511.95, + "finalQuantity": 9455, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 196892, + "totalBuyQuantity": 41378, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.9499999999999886, + "perChange": 0.38235294117646834, + "prevClose": 510 + } + } + }, + { + "metadata": { + "symbol": "IOC", + "identifier": "IOCEQN", + "purpose": "DIVIDEND - RS 7 PER SHARE", + "lastPrice": 140.39, + "change": 0.5299999999999727, + "pChange": 0.37895037895035943, + "previousClose": 139.86, + "finalQuantity": 32814, + "totalTurnover": 4606757.46, + "marketCap": 523537063618.16, + "yearHigh": 196.8, + "yearLow": 113.1, + "iep": 140.39, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IOCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 140.06, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 140.1, + "buyQty": 1101, + "sellQty": 0 + }, + { + "price": 140.2, + "buyQty": 301, + "sellQty": 0 + }, + { + "price": 140.25, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 140.3, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 140.39, + "buyQty": 0, + "sellQty": 59952, + "iep": true + }, + { + "price": 140.4, + "buyQty": 0, + "sellQty": 2502 + }, + { + "price": 140.45, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 140.48, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 140.49, + "buyQty": 0, + "sellQty": 1200 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 140.39, + "totalTradedVolume": 32814, + "finalPrice": 140.39, + "finalQuantity": 32814, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 576168, + "totalBuyQuantity": 342646, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.5299999999999727, + "perChange": 0.37895037895035943, + "prevClose": 139.86 + } + } + }, + { + "metadata": { + "symbol": "HUDCO", + "identifier": "HUDCOEQN", + "purpose": "DIVIDEND - RS 2.65 PER SHARE", + "lastPrice": 242.97, + "change": 0.9099999999999966, + "pChange": 0.37593984962405874, + "previousClose": 242.06, + "finalQuantity": 35986, + "totalTurnover": 8743518.42, + "marketCap": 121590401250, + "yearHigh": 353.7, + "yearLow": 85.7, + "iep": 242.97, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HUDCOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 242.7, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 242.75, + "buyQty": 70, + "sellQty": 0 + }, + { + "price": 242.9, + "buyQty": 400, + "sellQty": 0 + }, + { + "price": 242.95, + "buyQty": 1367, + "sellQty": 0 + }, + { + "price": 242.97, + "buyQty": 1445, + "sellQty": 0, + "iep": true + }, + { + "price": 242.98, + "buyQty": 0, + "sellQty": 1216 + }, + { + "price": 243, + "buyQty": 0, + "sellQty": 1027 + }, + { + "price": 243.1, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 243.14, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 243.25, + "buyQty": 0, + "sellQty": 150 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 242.97, + "totalTradedVolume": 35986, + "finalPrice": 242.97, + "finalQuantity": 35986, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 634860, + "totalBuyQuantity": 173922, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.9099999999999966, + "perChange": 0.37593984962405874, + "prevClose": 242.06 + } + } + }, + { + "metadata": { + "symbol": "KOTAKBANK", + "identifier": "KOTAKBANKEQN", + "purpose": "DIVIDEND - RS 2 PER SHARE", + "lastPrice": 1764, + "change": 6.5, + "pChange": 0.36984352773826457, + "previousClose": 1757.5, + "finalQuantity": 16106, + "totalTurnover": 28410984, + "marketCap": 2580260312277.6, + "yearHigh": 1942, + "yearLow": 1543.85, + "iep": 1764, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_KOTAKBANKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1759.85, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1759.95, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 1760, + "buyQty": 70, + "sellQty": 0 + }, + { + "price": 1760.2, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1761, + "buyQty": 400, + "sellQty": 0 + }, + { + "price": 1764, + "buyQty": 0, + "sellQty": 188, + "iep": true + }, + { + "price": 1764.8, + "buyQty": 0, + "sellQty": 400 + }, + { + "price": 1765, + "buyQty": 0, + "sellQty": 664 + }, + { + "price": 1765.9, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 1765.95, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1764, + "totalTradedVolume": 16106, + "finalPrice": 1764, + "finalQuantity": 16106, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 30905, + "totalBuyQuantity": 18841, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 6.5, + "perChange": 0.36984352773826457, + "prevClose": 1757.5 + } + } + }, + { + "metadata": { + "symbol": "BEL", + "identifier": "BELEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RE 0.80 PER SHARE", + "lastPrice": 314, + "change": 1.1499999999999773, + "pChange": 0.3675883011027576, + "previousClose": 312.85, + "finalQuantity": 61235, + "totalTurnover": 19227790, + "marketCap": 1117606807791.35, + "yearHigh": 340.5, + "yearLow": 149.95, + "iep": 314, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BELEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 313.25, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 313.3, + "buyQty": 1032, + "sellQty": 0 + }, + { + "price": 313.5, + "buyQty": 520, + "sellQty": 0 + }, + { + "price": 313.8, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 313.9, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 314, + "buyQty": 0, + "sellQty": 10931, + "iep": true + }, + { + "price": 314.1, + "buyQty": 0, + "sellQty": 1460 + }, + { + "price": 314.15, + "buyQty": 0, + "sellQty": 2810 + }, + { + "price": 314.2, + "buyQty": 0, + "sellQty": 4348 + }, + { + "price": 314.25, + "buyQty": 0, + "sellQty": 2112 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 314, + "totalTradedVolume": 61235, + "finalPrice": 314, + "finalQuantity": 61235, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 1648215, + "totalBuyQuantity": 243600, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.1499999999999773, + "perChange": 0.3675883011027576, + "prevClose": 312.85 + } + } + }, + { + "metadata": { + "symbol": "COALINDIA", + "identifier": "COALINDIAEQN", + "purpose": "INTERIM DIVIDEND - RS 15.75 PER SHARE", + "lastPrice": 418.15, + "change": 1.5, + "pChange": 0.360014400576023, + "previousClose": 416.65, + "finalQuantity": 15972, + "totalTurnover": 6678691.8, + "marketCap": 945004224336.87, + "yearHigh": 543.55, + "yearLow": 342.3, + "iep": 418.15, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_COALINDIAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 417.75, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 417.9, + "buyQty": 210, + "sellQty": 0 + }, + { + "price": 418, + "buyQty": 1541, + "sellQty": 0 + }, + { + "price": 418.1, + "buyQty": 101, + "sellQty": 0 + }, + { + "price": 418.15, + "buyQty": 1086, + "sellQty": 0, + "iep": true + }, + { + "price": 418.3, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 418.45, + "buyQty": 0, + "sellQty": 435 + }, + { + "price": 418.5, + "buyQty": 0, + "sellQty": 80 + }, + { + "price": 418.65, + "buyQty": 0, + "sellQty": 423 + }, + { + "price": 418.75, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 418.15, + "totalTradedVolume": 15972, + "finalPrice": 418.15, + "finalQuantity": 15972, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 265777, + "totalBuyQuantity": 160091, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.5, + "perChange": 0.360014400576023, + "prevClose": 416.65 + } + } + }, + { + "metadata": { + "symbol": "TATACHEM", + "identifier": "TATACHEMEQN", + "purpose": "DIVIDEND - RS 15 PER SHARE", + "lastPrice": 1130, + "change": 4.0499999999999545, + "pChange": 0.35969625649451165, + "previousClose": 1125.95, + "finalQuantity": 391, + "totalTurnover": 441830, + "marketCap": 175872296793.34, + "yearHigh": 1349, + "yearLow": 933, + "iep": 1130, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TATACHEMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1123, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1125, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1125.95, + "buyQty": 54, + "sellQty": 0 + }, + { + "price": 1126, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1127, + "buyQty": 90, + "sellQty": 0 + }, + { + "price": 1130, + "buyQty": 0, + "sellQty": 54, + "iep": true + }, + { + "price": 1131, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 1134, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1134.8, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 1134.95, + "buyQty": 0, + "sellQty": 51 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1130, + "totalTradedVolume": 391, + "finalPrice": 1130, + "finalQuantity": 391, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 21201, + "totalBuyQuantity": 3870, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4.0499999999999545, + "perChange": 0.35969625649451165, + "prevClose": 1125.95 + } + } + }, + { + "metadata": { + "symbol": "BERGEPAINT", + "identifier": "BERGEPAINTEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 3.50 PER SHARE", + "lastPrice": 480, + "change": 1.6999999999999886, + "pChange": 0.35542546518920937, + "previousClose": 478.3, + "finalQuantity": 586, + "totalTurnover": 281280, + "marketCap": 136011546239.92, + "yearHigh": 629.5, + "yearLow": 439, + "iep": 480, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BERGEPAINTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 478.95, + "buyQty": 90, + "sellQty": 0 + }, + { + "price": 479, + "buyQty": 348, + "sellQty": 0 + }, + { + "price": 479.05, + "buyQty": 35, + "sellQty": 0 + }, + { + "price": 479.55, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 480, + "buyQty": 91, + "sellQty": 0, + "iep": true + }, + { + "price": 480.8, + "buyQty": 0, + "sellQty": 228 + }, + { + "price": 480.85, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 481, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 481.85, + "buyQty": 0, + "sellQty": 34 + }, + { + "price": 482, + "buyQty": 0, + "sellQty": 438 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 480, + "totalTradedVolume": 586, + "finalPrice": 480, + "finalQuantity": 586, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 20812, + "totalBuyQuantity": 17108, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.6999999999999886, + "perChange": 0.35542546518920937, + "prevClose": 478.3 + } + } + }, + { + "metadata": { + "symbol": "ADANIPORTS", + "identifier": "ADANIPORTSEQN", + "purpose": "DIVIDEND - RS 6 PER SHARE", + "lastPrice": 1274, + "change": 4.4500000000000455, + "pChange": 0.35051790004332606, + "previousClose": 1269.55, + "finalQuantity": 4465, + "totalTurnover": 5688410, + "marketCap": 933235475870.77, + "yearHigh": 1621.4, + "yearLow": 858.5, + "iep": 1274, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ADANIPORTSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1269.55, + "buyQty": 2755, + "sellQty": 0 + }, + { + "price": 1270, + "buyQty": 928, + "sellQty": 0 + }, + { + "price": 1270.1, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 1270.5, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1271, + "buyQty": 104, + "sellQty": 0 + }, + { + "price": 1274, + "buyQty": 0, + "sellQty": 489, + "iep": true + }, + { + "price": 1274.5, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1274.9, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 1275, + "buyQty": 0, + "sellQty": 80 + }, + { + "price": 1276, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1274, + "totalTradedVolume": 4465, + "finalPrice": 1274, + "finalQuantity": 4465, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 58882, + "totalBuyQuantity": 25009, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4.4500000000000455, + "perChange": 0.35051790004332606, + "prevClose": 1269.55 + } + } + }, + { + "metadata": { + "symbol": "POLYCAB", + "identifier": "POLYCABEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 30 PER SHARE", + "lastPrice": 7325.3, + "change": 25.199999999999818, + "pChange": 0.3452007506746458, + "previousClose": 7300.1, + "finalQuantity": 434, + "totalTurnover": 3179180.2, + "marketCap": 343186330236.24, + "yearHigh": 7605, + "yearLow": 3801, + "iep": 7325.3, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_POLYCABEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 7300.05, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 7300.1, + "buyQty": 87, + "sellQty": 0 + }, + { + "price": 7301, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 7305, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 7310, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 7325.3, + "buyQty": 0, + "sellQty": 551, + "iep": true + }, + { + "price": 7326, + "buyQty": 0, + "sellQty": 8 + }, + { + "price": 7330, + "buyQty": 0, + "sellQty": 125 + }, + { + "price": 7330.55, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 7333, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 7325.3, + "totalTradedVolume": 434, + "finalPrice": 7325.3, + "finalQuantity": 434, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 7150, + "totalBuyQuantity": 1875, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 25.199999999999818, + "perChange": 0.3452007506746458, + "prevClose": 7300.1 + } + } + }, + { + "metadata": { + "symbol": "APOLLOHOSP", + "identifier": "APOLLOHOSPEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 10 PER SHARE", + "lastPrice": 7257.25, + "change": 24.899999999999636, + "pChange": 0.34428643525271363, + "previousClose": 7232.35, + "finalQuantity": 1162, + "totalTurnover": 8432924.5, + "marketCap": 730493388320.26, + "yearHigh": 7545, + "yearLow": 5284.85, + "iep": 7257.25, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_APOLLOHOSPEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 7226.25, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 7232, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 7232.35, + "buyQty": 42, + "sellQty": 0 + }, + { + "price": 7233, + "buyQty": 21, + "sellQty": 0 + }, + { + "price": 7250, + "buyQty": 26, + "sellQty": 0 + }, + { + "price": 7257.25, + "buyQty": 0, + "sellQty": 72, + "iep": true + }, + { + "price": 7258.2, + "buyQty": 0, + "sellQty": 46 + }, + { + "price": 7261.25, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 7262.35, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 7265.95, + "buyQty": 0, + "sellQty": 30 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 7257.25, + "totalTradedVolume": 1162, + "finalPrice": 7257.25, + "finalQuantity": 1162, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 3140, + "totalBuyQuantity": 2157, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 24.899999999999636, + "perChange": 0.34428643525271363, + "prevClose": 7232.35 + } + } + }, + { + "metadata": { + "symbol": "NATIONALUM", + "identifier": "NATIONALUMEQN", + "purpose": "INTERIM DIVIDEND - RS 4 PER SHARE", + "lastPrice": 246, + "change": 0.8400000000000034, + "pChange": 0.34263338228096074, + "previousClose": 245.16, + "finalQuantity": 11045, + "totalTurnover": 2717070, + "marketCap": 219280582232.83, + "yearHigh": 262.99, + "yearLow": 94.55, + "iep": 246, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NATIONALUMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 245.25, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 245.3, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 245.5, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 245.6, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 245.91, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 246, + "buyQty": 0, + "sellQty": 763, + "iep": true + }, + { + "price": 246.01, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 246.02, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 246.03, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 246.04, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 246, + "totalTradedVolume": 11045, + "finalPrice": 246, + "finalQuantity": 11045, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 443202, + "totalBuyQuantity": 102848, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.8400000000000034, + "perChange": 0.34263338228096074, + "prevClose": 245.16 + } + } + }, + { + "metadata": { + "symbol": "OFSS", + "identifier": "OFSSEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 12460, + "change": 42.399999999999636, + "pChange": 0.34145084396340386, + "previousClose": 12417.6, + "finalQuantity": 47, + "totalTurnover": 585620, + "marketCap": 291835087096.67, + "yearHigh": 12691.1, + "yearLow": 3968, + "iep": 12460, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_OFSSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 12410, + "buyQty": 41, + "sellQty": 0 + }, + { + "price": 12415, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 12417, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 12417.6, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 12425, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 12460, + "buyQty": 0, + "sellQty": 83, + "iep": true + }, + { + "price": 12480, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 12497.75, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 12498.3, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 12499, + "buyQty": 0, + "sellQty": 53 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 12460, + "totalTradedVolume": 47, + "finalPrice": 12460, + "finalQuantity": 47, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 1369, + "totalBuyQuantity": 257, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 42.399999999999636, + "perChange": 0.34145084396340386, + "prevClose": 12417.6 + } + } + }, + { + "metadata": { + "symbol": "WIPRO", + "identifier": "WIPROEQN", + "purpose": "BONUS 1:1", + "lastPrice": 295, + "change": 1, + "pChange": 0.3401360544217687, + "previousClose": 294, + "finalQuantity": 33744, + "totalTurnover": 9954480, + "marketCap": 831138389556.37, + "yearHigh": 298, + "yearLow": 201.05, + "iep": 295, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_WIPROEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 294.7, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 294.8, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 294.9, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 294.95, + "buyQty": 589, + "sellQty": 0 + }, + { + "price": 295, + "buyQty": 1019, + "sellQty": 0, + "iep": true + }, + { + "price": 295.15, + "buyQty": 0, + "sellQty": 406 + }, + { + "price": 295.4, + "buyQty": 0, + "sellQty": 220 + }, + { + "price": 295.5, + "buyQty": 0, + "sellQty": 376 + }, + { + "price": 295.55, + "buyQty": 0, + "sellQty": 2555 + }, + { + "price": 295.85, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 295, + "totalTradedVolume": 33744, + "finalPrice": 295, + "finalQuantity": 33744, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 239576, + "totalBuyQuantity": 140896, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1, + "perChange": 0.3401360544217687, + "prevClose": 294 + } + } + }, + { + "metadata": { + "symbol": "CAMS", + "identifier": "CAMSEQN", + "purpose": "INTERIM DIVIDEND - RS 14.5 PER SHARE/SPECIAL DIVIDEND - RS 10.5 PER SHARE", + "lastPrice": 5199, + "change": 17.25, + "pChange": 0.332899117093646, + "previousClose": 5181.75, + "finalQuantity": 1858, + "totalTurnover": 9659742, + "marketCap": 247672705554.56, + "yearHigh": 5204.55, + "yearLow": 2618.05, + "iep": 5199, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CAMSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 5183, + "buyQty": 140, + "sellQty": 0 + }, + { + "price": 5185, + "buyQty": 400, + "sellQty": 0 + }, + { + "price": 5188, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 5190, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 5194.4, + "buyQty": 37, + "sellQty": 0 + }, + { + "price": 5199, + "buyQty": 0, + "sellQty": 364, + "iep": true + }, + { + "price": 5200, + "buyQty": 0, + "sellQty": 11 + }, + { + "price": 5203.45, + "buyQty": 0, + "sellQty": 90 + }, + { + "price": 5205, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 5206, + "buyQty": 0, + "sellQty": 20 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 5199, + "totalTradedVolume": 1858, + "finalPrice": 5199, + "finalQuantity": 1858, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 7000, + "totalBuyQuantity": 4329, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 17.25, + "perChange": 0.332899117093646, + "prevClose": 5181.75 + } + } + }, + { + "metadata": { + "symbol": "VEDL", + "identifier": "VEDLEQN", + "purpose": "INTERIM DIVIDEND - RS 20 PER SHARE", + "lastPrice": 469.9, + "change": 1.5, + "pChange": 0.32023911187019644, + "previousClose": 468.4, + "finalQuantity": 16899, + "totalTurnover": 7940840.1, + "marketCap": 792445487402.24, + "yearHigh": 523.65, + "yearLow": 239, + "iep": 469.9, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_VEDLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 469, + "buyQty": 770, + "sellQty": 0 + }, + { + "price": 469.1, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 469.5, + "buyQty": 5200, + "sellQty": 0 + }, + { + "price": 469.65, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 469.7, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 469.9, + "buyQty": 0, + "sellQty": 2184, + "iep": true + }, + { + "price": 469.95, + "buyQty": 0, + "sellQty": 154 + }, + { + "price": 470, + "buyQty": 0, + "sellQty": 1546 + }, + { + "price": 470.4, + "buyQty": 0, + "sellQty": 150 + }, + { + "price": 470.5, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 469.9, + "totalTradedVolume": 16899, + "finalPrice": 469.9, + "finalQuantity": 16899, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 237215, + "totalBuyQuantity": 99010, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.5, + "perChange": 0.32023911187019644, + "prevClose": 468.4 + } + } + }, + { + "metadata": { + "symbol": "SUNTV", + "identifier": "SUNTVEQN", + "purpose": "INTERIM DIVIDEND - RS 5 PER SHARE", + "lastPrice": 772.05, + "change": 2.449999999999932, + "pChange": 0.3183471933471845, + "previousClose": 769.6, + "finalQuantity": 369, + "totalTurnover": 284886.45, + "marketCap": 65247991524.78, + "yearHigh": 921, + "yearLow": 567.6, + "iep": 772.05, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SUNTVEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 769, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 769.6, + "buyQty": 201, + "sellQty": 0 + }, + { + "price": 770, + "buyQty": 315, + "sellQty": 0 + }, + { + "price": 770.05, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 772, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 772.05, + "buyQty": 0, + "sellQty": 9, + "iep": true + }, + { + "price": 773.7, + "buyQty": 0, + "sellQty": 12 + }, + { + "price": 774.85, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 776.5, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 776.95, + "buyQty": 0, + "sellQty": 3 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 772.05, + "totalTradedVolume": 369, + "finalPrice": 772.05, + "finalQuantity": 369, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 7081, + "totalBuyQuantity": 6319, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.449999999999932, + "perChange": 0.3183471933471845, + "prevClose": 769.6 + } + } + }, + { + "metadata": { + "symbol": "TITAN", + "identifier": "TITANEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 11 PER SHARE", + "lastPrice": 3374.95, + "change": 10.5, + "pChange": 0.3120866709268974, + "previousClose": 3364.45, + "finalQuantity": 3772, + "totalTurnover": 12730311.4, + "marketCap": 1391611567179.39, + "yearHigh": 3886.95, + "yearLow": 3055.65, + "iep": 3374.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TITANEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3366, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 3367, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3368, + "buyQty": 462, + "sellQty": 0 + }, + { + "price": 3370, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3370.05, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3374.95, + "buyQty": 0, + "sellQty": 426, + "iep": true + }, + { + "price": 3375, + "buyQty": 0, + "sellQty": 594 + }, + { + "price": 3378, + "buyQty": 0, + "sellQty": 305 + }, + { + "price": 3378.1, + "buyQty": 0, + "sellQty": 35 + }, + { + "price": 3379, + "buyQty": 0, + "sellQty": 3 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3374.95, + "totalTradedVolume": 3772, + "finalPrice": 3374.95, + "finalQuantity": 3772, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 17022, + "totalBuyQuantity": 8151, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 10.5, + "perChange": 0.3120866709268974, + "prevClose": 3364.45 + } + } + }, + { + "metadata": { + "symbol": "BAJFINANCE", + "identifier": "BAJFINANCEEQN", + "purpose": "DIVIDEND - RS 36 PER SHARE", + "lastPrice": 6760, + "change": 20, + "pChange": 0.2967359050445104, + "previousClose": 6740, + "finalQuantity": 3381, + "totalTurnover": 22855560, + "marketCap": 1881505709163.97, + "yearHigh": 7830, + "yearLow": 6187.8, + "iep": 6760, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BAJFINANCEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 6744.9, + "buyQty": 60, + "sellQty": 0 + }, + { + "price": 6747, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 6750, + "buyQty": 574, + "sellQty": 0 + }, + { + "price": 6751, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 6752, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 6760, + "buyQty": 0, + "sellQty": 716, + "iep": true + }, + { + "price": 6762.9, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 6764, + "buyQty": 0, + "sellQty": 400 + }, + { + "price": 6764.4, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 6765, + "buyQty": 0, + "sellQty": 122 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 6760, + "totalTradedVolume": 3381, + "finalPrice": 6760, + "finalQuantity": 3381, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 17383, + "totalBuyQuantity": 11880, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 20, + "perChange": 0.2967359050445104, + "prevClose": 6740 + } + } + }, + { + "metadata": { + "symbol": "HFCL", + "identifier": "HFCLEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 0.20 PER SHARE", + "lastPrice": 129.5, + "change": 0.37999999999999545, + "pChange": 0.29429987608425917, + "previousClose": 129.12, + "finalQuantity": 28398, + "totalTurnover": 3677541, + "marketCap": 115580265545.25, + "yearHigh": 171, + "yearLow": 65.95, + "iep": 129.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HFCLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 129.35, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 129.36, + "buyQty": 1300, + "sellQty": 0 + }, + { + "price": 129.4, + "buyQty": 750, + "sellQty": 0 + }, + { + "price": 129.45, + "buyQty": 2350, + "sellQty": 0 + }, + { + "price": 129.5, + "buyQty": 5663, + "sellQty": 0, + "iep": true + }, + { + "price": 129.6, + "buyQty": 0, + "sellQty": 8702 + }, + { + "price": 129.68, + "buyQty": 0, + "sellQty": 180 + }, + { + "price": 129.7, + "buyQty": 0, + "sellQty": 15503 + }, + { + "price": 129.74, + "buyQty": 0, + "sellQty": 1000 + }, + { + "price": 129.75, + "buyQty": 0, + "sellQty": 24894 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 129.5, + "totalTradedVolume": 28398, + "finalPrice": 129.5, + "finalQuantity": 28398, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 865733, + "totalBuyQuantity": 251733, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.37999999999999545, + "perChange": 0.29429987608425917, + "prevClose": 129.12 + } + } + }, + { + "metadata": { + "symbol": "LODHA", + "identifier": "LODHAEQN", + "purpose": "DIVIDEND - RS 2.25 PER SHARE", + "lastPrice": 1375, + "change": 3.900000000000091, + "pChange": 0.2844431478375094, + "previousClose": 1371.1, + "finalQuantity": 9522, + "totalTurnover": 13092750, + "marketCap": 381971699424.48, + "yearHigh": 1649.95, + "yearLow": 877.25, + "iep": 1375, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LODHAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1371.9, + "buyQty": 211, + "sellQty": 0 + }, + { + "price": 1372, + "buyQty": 122, + "sellQty": 0 + }, + { + "price": 1372.1, + "buyQty": 110, + "sellQty": 0 + }, + { + "price": 1373, + "buyQty": 153, + "sellQty": 0 + }, + { + "price": 1375, + "buyQty": 23, + "sellQty": 0, + "iep": true + }, + { + "price": 1376, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 1376.6, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1377, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1377.1, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1377.9, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1375, + "totalTradedVolume": 9522, + "finalPrice": 1375, + "finalQuantity": 9522, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 29042, + "totalBuyQuantity": 15154, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.900000000000091, + "perChange": 0.2844431478375094, + "prevClose": 1371.1 + } + } + }, + { + "metadata": { + "symbol": "SAIL", + "identifier": "SAILEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 122.51, + "change": 0.3400000000000034, + "pChange": 0.2783007284930862, + "previousClose": 122.17, + "finalQuantity": 31470, + "totalTurnover": 3855389.7, + "marketCap": 177103452477.56, + "yearHigh": 175.35, + "yearLow": 93.4, + "iep": 122.51, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SAILEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 122.21, + "buyQty": 31, + "sellQty": 0 + }, + { + "price": 122.25, + "buyQty": 26, + "sellQty": 0 + }, + { + "price": 122.3, + "buyQty": 700, + "sellQty": 0 + }, + { + "price": 122.5, + "buyQty": 6689, + "sellQty": 0 + }, + { + "price": 122.51, + "buyQty": 382, + "sellQty": 0, + "iep": true + }, + { + "price": 122.6, + "buyQty": 0, + "sellQty": 240 + }, + { + "price": 122.65, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 122.66, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 122.7, + "buyQty": 0, + "sellQty": 3905 + }, + { + "price": 122.75, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 122.51, + "totalTradedVolume": 31470, + "finalPrice": 122.51, + "finalQuantity": 31470, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 353165, + "totalBuyQuantity": 305108, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.3400000000000034, + "perChange": 0.2783007284930862, + "prevClose": 122.17 + } + } + }, + { + "metadata": { + "symbol": "BHEL", + "identifier": "BHELEQN", + "purpose": "DIVIDEND - RS 0.25 PER SHARE", + "lastPrice": 252, + "change": 0.6500000000000057, + "pChange": 0.2586035408792543, + "previousClose": 251.35, + "finalQuantity": 14528, + "totalTurnover": 3661056, + "marketCap": 322636885477.85, + "yearHigh": 335.35, + "yearLow": 165.8, + "iep": 252, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BHELEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 251.5, + "buyQty": 66, + "sellQty": 0 + }, + { + "price": 251.55, + "buyQty": 52, + "sellQty": 0 + }, + { + "price": 251.7, + "buyQty": 2226, + "sellQty": 0 + }, + { + "price": 251.8, + "buyQty": 12, + "sellQty": 0 + }, + { + "price": 251.95, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 252, + "buyQty": 0, + "sellQty": 434, + "iep": true + }, + { + "price": 252.15, + "buyQty": 0, + "sellQty": 65 + }, + { + "price": 252.2, + "buyQty": 0, + "sellQty": 280 + }, + { + "price": 252.3, + "buyQty": 0, + "sellQty": 313 + }, + { + "price": 252.35, + "buyQty": 0, + "sellQty": 82 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 252, + "totalTradedVolume": 14528, + "finalPrice": 252, + "finalQuantity": 14528, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 276723, + "totalBuyQuantity": 86070, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.6500000000000057, + "perChange": 0.2586035408792543, + "prevClose": 251.35 + } + } + }, + { + "metadata": { + "symbol": "LAURUSLABS", + "identifier": "LAURUSLABSEQN", + "purpose": "INTERIM DIVIDEND - RS 0.40 PER SHARE", + "lastPrice": 584.95, + "change": 1.5, + "pChange": 0.25709143885508606, + "previousClose": 583.45, + "finalQuantity": 1960, + "totalTurnover": 1146502, + "marketCap": 229694759063.2, + "yearHigh": 588, + "yearLow": 360.85, + "iep": 584.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LAURUSLABSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 580.1, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 580.5, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 583.45, + "buyQty": 169, + "sellQty": 0 + }, + { + "price": 584, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 584.25, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 584.95, + "buyQty": 0, + "sellQty": 56, + "iep": true + }, + { + "price": 585, + "buyQty": 0, + "sellQty": 120 + }, + { + "price": 585.1, + "buyQty": 0, + "sellQty": 40 + }, + { + "price": 585.5, + "buyQty": 0, + "sellQty": 16 + }, + { + "price": 585.6, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 584.95, + "totalTradedVolume": 1960, + "finalPrice": 584.95, + "finalQuantity": 1960, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 56658, + "totalBuyQuantity": 7399, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.5, + "perChange": 0.25709143885508606, + "prevClose": 583.45 + } + } + }, + { + "metadata": { + "symbol": "SYNGENE", + "identifier": "SYNGENEEQN", + "purpose": "DIVIDEND - RS 1.25 PER SHARE", + "lastPrice": 930.45, + "change": 2.300000000000068, + "pChange": 0.2478047729354165, + "previousClose": 928.15, + "finalQuantity": 370, + "totalTurnover": 344266.5, + "marketCap": 167022583076.52, + "yearHigh": 960.6, + "yearLow": 607.65, + "iep": 930.45, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SYNGENEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 928.15, + "buyQty": 133, + "sellQty": 0 + }, + { + "price": 928.2, + "buyQty": 34, + "sellQty": 0 + }, + { + "price": 929, + "buyQty": 16, + "sellQty": 0 + }, + { + "price": 930, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 930.45, + "buyQty": 34, + "sellQty": 0, + "iep": true + }, + { + "price": 932.75, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 933, + "buyQty": 0, + "sellQty": 116 + }, + { + "price": 933.7, + "buyQty": 0, + "sellQty": 19 + }, + { + "price": 933.8, + "buyQty": 0, + "sellQty": 30 + }, + { + "price": 933.85, + "buyQty": 0, + "sellQty": 11 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 930.45, + "totalTradedVolume": 370, + "finalPrice": 930.45, + "finalQuantity": 370, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 12603, + "totalBuyQuantity": 3053, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.300000000000068, + "perChange": 0.2478047729354165, + "prevClose": 928.15 + } + } + }, + { + "metadata": { + "symbol": "MCX", + "identifier": "MCXEQN", + "purpose": "DIVIDEND - RS 7.64 PER SHARE", + "lastPrice": 6331, + "change": 15.25, + "pChange": 0.2414598424573487, + "previousClose": 6315.75, + "finalQuantity": 361, + "totalTurnover": 2285491, + "marketCap": 321195650813.62, + "yearHigh": 6870, + "yearLow": 2917.85, + "iep": 6331, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MCXEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 6315.8, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 6320, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 6321.75, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 6322, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 6325, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 6331, + "buyQty": 0, + "sellQty": 89, + "iep": true + }, + { + "price": 6335, + "buyQty": 0, + "sellQty": 13 + }, + { + "price": 6335.7, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 6338.2, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 6340, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 6331, + "totalTradedVolume": 361, + "finalPrice": 6331, + "finalQuantity": 361, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 6375, + "totalBuyQuantity": 2250, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 15.25, + "perChange": 0.2414598424573487, + "prevClose": 6315.75 + } + } + }, + { + "metadata": { + "symbol": "ASIANPAINT", + "identifier": "ASIANPAINTEQN", + "purpose": "INTERIM DIVIDEND - RS 4.25 PER SHARE", + "lastPrice": 2465, + "change": 5.550000000000182, + "pChange": 0.22566020858322722, + "previousClose": 2459.45, + "finalQuantity": 2398, + "totalTurnover": 5911070, + "marketCap": 1110833265172.95, + "yearHigh": 3422.95, + "yearLow": 2422.95, + "iep": 2465, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ASIANPAINTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2460.6, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2461, + "buyQty": 8, + "sellQty": 0 + }, + { + "price": 2461.1, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 2462, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 2463, + "buyQty": 110, + "sellQty": 0 + }, + { + "price": 2465, + "buyQty": 0, + "sellQty": 7, + "iep": true + }, + { + "price": 2465.9, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 2466, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 2467, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 2468, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2465, + "totalTradedVolume": 2398, + "finalPrice": 2465, + "finalQuantity": 2398, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 26268, + "totalBuyQuantity": 30123, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 5.550000000000182, + "perChange": 0.22566020858322722, + "prevClose": 2459.45 + } + } + }, + { + "metadata": { + "symbol": "BATAINDIA", + "identifier": "BATAINDIAEQN", + "purpose": "INTERIM DIVIDEND - RS 10 PER SHARE", + "lastPrice": 1446.95, + "change": 3.1000000000001364, + "pChange": 0.21470374346366566, + "previousClose": 1443.85, + "finalQuantity": 178, + "totalTurnover": 257557.1, + "marketCap": 92063098947.1, + "yearHigh": 1724.25, + "yearLow": 1269, + "iep": 1446.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BATAINDIAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1435.35, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 1436, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1440.85, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 1443.85, + "buyQty": 241, + "sellQty": 0 + }, + { + "price": 1445, + "buyQty": 12, + "sellQty": 0 + }, + { + "price": 1446.95, + "buyQty": 0, + "sellQty": 27, + "iep": true + }, + { + "price": 1447, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1447.85, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1448, + "buyQty": 0, + "sellQty": 60 + }, + { + "price": 1448.45, + "buyQty": 0, + "sellQty": 6 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1446.95, + "totalTradedVolume": 178, + "finalPrice": 1446.95, + "finalQuantity": 178, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 9782, + "totalBuyQuantity": 4239, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 3.1000000000001364, + "perChange": 0.21470374346366566, + "prevClose": 1443.85 + } + } + }, + { + "metadata": { + "symbol": "HINDCOPPER", + "identifier": "HINDCOPPEREQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RE 0.92 PER SHARE", + "lastPrice": 284, + "change": 0.5500000000000114, + "pChange": 0.19403774916211372, + "previousClose": 283.45, + "finalQuantity": 4658, + "totalTurnover": 1322872, + "marketCap": 92621497779.04, + "yearHigh": 415.8, + "yearLow": 173.2, + "iep": 284, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HINDCOPPEREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 283.45, + "buyQty": 1750, + "sellQty": 0 + }, + { + "price": 283.5, + "buyQty": 245, + "sellQty": 0 + }, + { + "price": 283.75, + "buyQty": 62, + "sellQty": 0 + }, + { + "price": 283.95, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 284, + "buyQty": 310, + "sellQty": 0, + "iep": true + }, + { + "price": 284.1, + "buyQty": 0, + "sellQty": 150 + }, + { + "price": 284.3, + "buyQty": 0, + "sellQty": 120 + }, + { + "price": 284.4, + "buyQty": 0, + "sellQty": 190 + }, + { + "price": 284.7, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 284.8, + "buyQty": 0, + "sellQty": 240 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 284, + "totalTradedVolume": 4658, + "finalPrice": 284, + "finalQuantity": 4658, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 186455, + "totalBuyQuantity": 67157, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.5500000000000114, + "perChange": 0.19403774916211372, + "prevClose": 283.45 + } + } + }, + { + "metadata": { + "symbol": "IEX", + "identifier": "IEXEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 178.5, + "change": 0.3300000000000125, + "pChange": 0.18521636639165545, + "previousClose": 178.17, + "finalQuantity": 15513, + "totalTurnover": 2769070.5, + "marketCap": 134677319372.05, + "yearHigh": 244.4, + "yearLow": 130.2, + "iep": 178.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IEXEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 178.23, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 178.25, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 178.3, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 178.35, + "buyQty": 130, + "sellQty": 0 + }, + { + "price": 178.5, + "buyQty": 2805, + "sellQty": 0, + "iep": true + }, + { + "price": 178.55, + "buyQty": 0, + "sellQty": 127 + }, + { + "price": 178.67, + "buyQty": 0, + "sellQty": 90 + }, + { + "price": 178.77, + "buyQty": 0, + "sellQty": 90 + }, + { + "price": 178.87, + "buyQty": 0, + "sellQty": 90 + }, + { + "price": 178.88, + "buyQty": 0, + "sellQty": 60 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 178.5, + "totalTradedVolume": 15513, + "finalPrice": 178.5, + "finalQuantity": 15513, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 280247, + "totalBuyQuantity": 86580, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.3300000000000125, + "perChange": 0.18521636639165545, + "prevClose": 178.17 + } + } + }, + { + "metadata": { + "symbol": "BRITANNIA", + "identifier": "BRITANNIAEQN", + "purpose": "ANNUAL GENERAL MEETING/ DIVIDEND - RS 73.5 PER SHARE", + "lastPrice": 4860, + "change": 8.449999999999818, + "pChange": 0.17417114118168045, + "previousClose": 4851.55, + "finalQuantity": 772, + "totalTurnover": 3751920, + "marketCap": 570362779379.19, + "yearHigh": 6469.9, + "yearLow": 4641, + "iep": 4860, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BRITANNIAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4852.6, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 4855, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 4856, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 4858, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 4859, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 4860, + "buyQty": 0, + "sellQty": 8, + "iep": true + }, + { + "price": 4870.55, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 4870.6, + "buyQty": 0, + "sellQty": 6 + }, + { + "price": 4870.65, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 4874, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4860, + "totalTradedVolume": 772, + "finalPrice": 4860, + "finalQuantity": 772, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 5560, + "totalBuyQuantity": 5206, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 8.449999999999818, + "perChange": 0.17417114118168045, + "prevClose": 4851.55 + } + } + }, + { + "metadata": { + "symbol": "BOSCHLTD", + "identifier": "BOSCHLTDEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 170 PER SHARE", + "lastPrice": 35240, + "change": 59.349999999998545, + "pChange": 0.1687006919997173, + "previousClose": 35180.65, + "finalQuantity": 11, + "totalTurnover": 387640, + "marketCap": 304856589353.24, + "yearHigh": 39088.8, + "yearLow": 21331, + "iep": 35240, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BOSCHLTDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 35075.15, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 35080.65, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 35100, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 35110, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 35202.65, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 35240, + "buyQty": 0, + "sellQty": 0, + "iep": true + }, + { + "price": 35250, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 35276.45, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 35280, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 35290, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 35300, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 35240, + "totalTradedVolume": 11, + "finalPrice": 35240, + "finalQuantity": 11, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 1358, + "totalBuyQuantity": 165, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 59.349999999998545, + "perChange": 0.1687006919997173, + "prevClose": 35180.65 + } + } + }, + { + "metadata": { + "symbol": "UPL", + "identifier": "UPLEQN", + "purpose": "RIGHTS 1:8 @ PREMIUM RS 358/-", + "lastPrice": 568.9, + "change": 0.9499999999999318, + "pChange": 0.1672682454441292, + "previousClose": 567.95, + "finalQuantity": 1833, + "totalTurnover": 1042793.7, + "marketCap": 324291248761.34, + "yearHigh": 600.96, + "yearLow": 430.58, + "iep": 568.9, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_UPLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 567.8, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 567.95, + "buyQty": 287, + "sellQty": 0 + }, + { + "price": 568, + "buyQty": 54, + "sellQty": 0 + }, + { + "price": 568.05, + "buyQty": 141, + "sellQty": 0 + }, + { + "price": 568.35, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 568.9, + "buyQty": 0, + "sellQty": 224, + "iep": true + }, + { + "price": 569, + "buyQty": 0, + "sellQty": 2716 + }, + { + "price": 570, + "buyQty": 0, + "sellQty": 59 + }, + { + "price": 570.2, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 570.75, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 568.9, + "totalTradedVolume": 1833, + "finalPrice": 568.9, + "finalQuantity": 1833, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 114769, + "totalBuyQuantity": 14075, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.9499999999999318, + "perChange": 0.1672682454441292, + "prevClose": 567.95 + } + } + }, + { + "metadata": { + "symbol": "MANAPPURAM", + "identifier": "MANAPPURAMEQN", + "purpose": "INTERIM DIVIDEND - RE 1 PER SHARE", + "lastPrice": 169.86, + "change": 0.27000000000001023, + "pChange": 0.1592075004422491, + "previousClose": 169.59, + "finalQuantity": 39300, + "totalTurnover": 6675498, + "marketCap": 92176058407.41, + "yearHigh": 230.4, + "yearLow": 138.35, + "iep": 169.86, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MANAPPURAMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 169.8, + "buyQty": 1377, + "sellQty": 0 + }, + { + "price": 169.82, + "buyQty": 914, + "sellQty": 0 + }, + { + "price": 169.85, + "buyQty": 2500, + "sellQty": 0 + }, + { + "price": 169.86, + "buyQty": 8822, + "sellQty": 0, + "iep": true + }, + { + "price": 169.87, + "buyQty": 5820, + "sellQty": 0 + }, + { + "price": 169.9, + "buyQty": 0, + "sellQty": 301 + }, + { + "price": 170, + "buyQty": 0, + "sellQty": 12 + }, + { + "price": 170.05, + "buyQty": 0, + "sellQty": 437 + }, + { + "price": 170.2, + "buyQty": 0, + "sellQty": 437 + }, + { + "price": 170.25, + "buyQty": 0, + "sellQty": 398 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 169.86, + "totalTradedVolume": 39300, + "finalPrice": 169.86, + "finalQuantity": 39300, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 139368, + "totalBuyQuantity": 240523, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.27000000000001023, + "perChange": 0.1592075004422491, + "prevClose": 169.59 + } + } + }, + { + "metadata": { + "symbol": "INDIANB", + "identifier": "INDIANBEQN", + "purpose": "DIVIDEND - RS 12 PER SHARE", + "lastPrice": 605, + "change": 0.8999999999999773, + "pChange": 0.1489819566296933, + "previousClose": 604.1, + "finalQuantity": 5744, + "totalTurnover": 3475120, + "marketCap": 211793689419.71, + "yearHigh": 632.7, + "yearLow": 391, + "iep": 605, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_INDIANBEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 604, + "buyQty": 96, + "sellQty": 0 + }, + { + "price": 604.1, + "buyQty": 260, + "sellQty": 0 + }, + { + "price": 604.35, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 604.5, + "buyQty": 144, + "sellQty": 0 + }, + { + "price": 604.75, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 605, + "buyQty": 0, + "sellQty": 169, + "iep": true + }, + { + "price": 605.4, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 605.6, + "buyQty": 0, + "sellQty": 22 + }, + { + "price": 605.8, + "buyQty": 0, + "sellQty": 150 + }, + { + "price": 605.9, + "buyQty": 0, + "sellQty": 22 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 605, + "totalTradedVolume": 5744, + "finalPrice": 605, + "finalQuantity": 5744, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 51184, + "totalBuyQuantity": 14189, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.8999999999999773, + "perChange": 0.1489819566296933, + "prevClose": 604.1 + } + } + }, + { + "metadata": { + "symbol": "BANKBARODA", + "identifier": "BANKBARODAEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 7.60 PER SHARE", + "lastPrice": 260.95, + "change": 0.37999999999999545, + "pChange": 0.14583413286256877, + "previousClose": 260.57, + "finalQuantity": 29897, + "totalTurnover": 7801622.15, + "marketCap": 484270418237.76, + "yearHigh": 299.7, + "yearLow": 205.15, + "iep": 260.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BANKBARODAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 260.65, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 260.7, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 260.73, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 260.8, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 260.9, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 260.95, + "buyQty": 0, + "sellQty": 8322, + "iep": true + }, + { + "price": 260.99, + "buyQty": 0, + "sellQty": 21 + }, + { + "price": 261, + "buyQty": 0, + "sellQty": 1020 + }, + { + "price": 261.1, + "buyQty": 0, + "sellQty": 5866 + }, + { + "price": 261.45, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 260.95, + "totalTradedVolume": 29897, + "finalPrice": 260.95, + "finalQuantity": 29897, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 560362, + "totalBuyQuantity": 109510, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.37999999999999545, + "perChange": 0.14583413286256877, + "prevClose": 260.57 + } + } + }, + { + "metadata": { + "symbol": "HINDALCO", + "identifier": "HINDALCOEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 3.5 PER SHARE", + "lastPrice": 664, + "change": 0.9500000000000455, + "pChange": 0.1432772792398832, + "previousClose": 663.05, + "finalQuantity": 7961, + "totalTurnover": 5286104, + "marketCap": 962512180871.08, + "yearHigh": 772.65, + "yearLow": 496.35, + "iep": 664, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HINDALCOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 663, + "buyQty": 143, + "sellQty": 0 + }, + { + "price": 663.05, + "buyQty": 484, + "sellQty": 0 + }, + { + "price": 663.1, + "buyQty": 11000, + "sellQty": 0 + }, + { + "price": 663.5, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 663.75, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 664, + "buyQty": 0, + "sellQty": 3, + "iep": true + }, + { + "price": 664.9, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 665, + "buyQty": 0, + "sellQty": 175 + }, + { + "price": 665.5, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 666, + "buyQty": 0, + "sellQty": 130 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 664, + "totalTradedVolume": 7961, + "finalPrice": 664, + "finalQuantity": 7961, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 84581, + "totalBuyQuantity": 45318, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.9500000000000455, + "perChange": 0.1432772792398832, + "prevClose": 663.05 + } + } + }, + { + "metadata": { + "symbol": "APLAPOLLO", + "identifier": "APLAPOLLOEQN", + "purpose": "DIVIDEND - RS 5.50 PER SHARE", + "lastPrice": 1582.75, + "change": 2.2000000000000455, + "pChange": 0.1391920533991361, + "previousClose": 1580.55, + "finalQuantity": 158, + "totalTurnover": 250074.5, + "marketCap": 284756707854.64, + "yearHigh": 1728.95, + "yearLow": 1305, + "iep": 1582.75, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_APLAPOLLOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1578.15, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1580, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 1580.55, + "buyQty": 21, + "sellQty": 0 + }, + { + "price": 1580.6, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1582, + "buyQty": 69, + "sellQty": 0 + }, + { + "price": 1582.75, + "buyQty": 0, + "sellQty": 2, + "iep": true + }, + { + "price": 1585.5, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1586.15, + "buyQty": 0, + "sellQty": 6 + }, + { + "price": 1589.95, + "buyQty": 0, + "sellQty": 30 + }, + { + "price": 1590, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1582.75, + "totalTradedVolume": 158, + "finalPrice": 1582.75, + "finalQuantity": 158, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 15511, + "totalBuyQuantity": 3744, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 2.2000000000000455, + "perChange": 0.1391920533991361, + "prevClose": 1580.55 + } + } + }, + { + "metadata": { + "symbol": "ESCORTS", + "identifier": "ESCORTSEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 18 PER SHARE", + "lastPrice": 3456, + "change": 4.75, + "pChange": 0.13763129300977905, + "previousClose": 3451.25, + "finalQuantity": 266, + "totalTurnover": 919296, + "marketCap": 115623644959.43, + "yearHigh": 4420, + "yearLow": 2648.4, + "iep": 3456, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ESCORTSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3451.25, + "buyQty": 109, + "sellQty": 0 + }, + { + "price": 3452, + "buyQty": 41, + "sellQty": 0 + }, + { + "price": 3455, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 3455.65, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 3456, + "buyQty": 1, + "sellQty": 0, + "iep": true + }, + { + "price": 3484.8, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 3490, + "buyQty": 0, + "sellQty": 300 + }, + { + "price": 3495, + "buyQty": 0, + "sellQty": 35 + }, + { + "price": 3498, + "buyQty": 0, + "sellQty": 35 + }, + { + "price": 3499, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3456, + "totalTradedVolume": 266, + "finalPrice": 3456, + "finalQuantity": 266, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 10554, + "totalBuyQuantity": 4141, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 4.75, + "perChange": 0.13763129300977905, + "prevClose": 3451.25 + } + } + }, + { + "metadata": { + "symbol": "JSL", + "identifier": "JSLEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 735, + "change": 1, + "pChange": 0.13623978201634876, + "previousClose": 734, + "finalQuantity": 748, + "totalTurnover": 549780, + "marketCap": 238726906480.08, + "yearHigh": 848, + "yearLow": 504.35, + "iep": 735, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_JSLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 730, + "buyQty": 56, + "sellQty": 0 + }, + { + "price": 731.2, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 732, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 733.75, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 734, + "buyQty": 210, + "sellQty": 0 + }, + { + "price": 735, + "buyQty": 0, + "sellQty": 11, + "iep": true + }, + { + "price": 738.85, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 739, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 739.65, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 739.7, + "buyQty": 0, + "sellQty": 300 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 735, + "totalTradedVolume": 748, + "finalPrice": 735, + "finalQuantity": 748, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 10645, + "totalBuyQuantity": 5548, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1, + "perChange": 0.13623978201634876, + "prevClose": 734 + } + } + }, + { + "metadata": { + "symbol": "IRB", + "identifier": "IRBEQN", + "purpose": "INTERIM DIVIDEND - RE 0.10 PER SHARE", + "lastPrice": 56.5, + "change": 0.060000000000002274, + "pChange": 0.10630758327427758, + "previousClose": 56.44, + "finalQuantity": 29621, + "totalTurnover": 1673586.5, + "marketCap": 111408090997.5, + "yearHigh": 78.15, + "yearLow": 36.75, + "iep": 56.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IRBEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 56.3, + "buyQty": 3452, + "sellQty": 0 + }, + { + "price": 56.4, + "buyQty": 2251, + "sellQty": 0 + }, + { + "price": 56.43, + "buyQty": 14, + "sellQty": 0 + }, + { + "price": 56.44, + "buyQty": 8188, + "sellQty": 0 + }, + { + "price": 56.45, + "buyQty": 354, + "sellQty": 0 + }, + { + "price": 56.5, + "buyQty": 0, + "sellQty": 6797, + "iep": true + }, + { + "price": 56.56, + "buyQty": 0, + "sellQty": 28000 + }, + { + "price": 56.59, + "buyQty": 0, + "sellQty": 1000 + }, + { + "price": 56.6, + "buyQty": 0, + "sellQty": 978 + }, + { + "price": 56.65, + "buyQty": 0, + "sellQty": 478 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 56.5, + "totalTradedVolume": 29621, + "finalPrice": 56.5, + "finalQuantity": 29621, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 919283, + "totalBuyQuantity": 229498, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.060000000000002274, + "perChange": 0.10630758327427758, + "prevClose": 56.44 + } + } + }, + { + "metadata": { + "symbol": "VOLTAS", + "identifier": "VOLTASEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 5.50 PER SHARE", + "lastPrice": 1690, + "change": 1.7000000000000455, + "pChange": 0.10069300479772822, + "previousClose": 1688.3, + "finalQuantity": 224, + "totalTurnover": 378560, + "marketCap": 384603969260.25, + "yearHigh": 1944.9, + "yearLow": 825.4, + "iep": 1690, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_VOLTASEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1687, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1688, + "buyQty": 28, + "sellQty": 0 + }, + { + "price": 1688.3, + "buyQty": 38, + "sellQty": 0 + }, + { + "price": 1688.4, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1689, + "buyQty": 180, + "sellQty": 0 + }, + { + "price": 1690, + "buyQty": 0, + "sellQty": 387, + "iep": true + }, + { + "price": 1693.45, + "buyQty": 0, + "sellQty": 70 + }, + { + "price": 1694.4, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 1697, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1697.3, + "buyQty": 0, + "sellQty": 160 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1690, + "totalTradedVolume": 224, + "finalPrice": 1690, + "finalQuantity": 224, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 13300, + "totalBuyQuantity": 4102, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.7000000000000455, + "perChange": 0.10069300479772822, + "prevClose": 1688.3 + } + } + }, + { + "metadata": { + "symbol": "ITC", + "identifier": "ITCEQN", + "purpose": "DIVIDEND - RS 7.50 PER SHARE", + "lastPrice": 467.55, + "change": 0.44999999999998863, + "pChange": 0.0963391136801517, + "previousClose": 467.1, + "finalQuantity": 21971, + "totalTurnover": 10272541.05, + "marketCap": 4341002697444.9, + "yearHigh": 528.5, + "yearLow": 399.35, + "iep": 467.55, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ITCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 467.3, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 467.4, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 467.45, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 467.5, + "buyQty": 965, + "sellQty": 0 + }, + { + "price": 467.55, + "buyQty": 2841, + "sellQty": 0, + "iep": true + }, + { + "price": 467.9, + "buyQty": 0, + "sellQty": 2000 + }, + { + "price": 468, + "buyQty": 0, + "sellQty": 191 + }, + { + "price": 468.3, + "buyQty": 0, + "sellQty": 1100 + }, + { + "price": 468.5, + "buyQty": 0, + "sellQty": 4000 + }, + { + "price": 468.6, + "buyQty": 0, + "sellQty": 256 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 467.55, + "totalTradedVolume": 21971, + "finalPrice": 467.55, + "finalQuantity": 21971, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 241248, + "totalBuyQuantity": 349445, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.44999999999998863, + "perChange": 0.0963391136801517, + "prevClose": 467.1 + } + } + }, + { + "metadata": { + "symbol": "DRREDDY", + "identifier": "DRREDDYEQN", + "purpose": "FACE VALUE SPLIT (SUB-DIVISION) - FROM RS 5/- PER SHARE TO RE 1/- PER SHARE", + "lastPrice": 1216.55, + "change": 1, + "pChange": 0.08226728641355766, + "previousClose": 1215.55, + "finalQuantity": 2189, + "totalTurnover": 2663027.95, + "marketCap": 740782392154.38, + "yearHigh": 1421.49, + "yearLow": 1074, + "iep": 1216.55, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DRREDDYEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1215.9, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1216, + "buyQty": 42, + "sellQty": 0 + }, + { + "price": 1216.2, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1216.5, + "buyQty": 51, + "sellQty": 0 + }, + { + "price": 1216.55, + "buyQty": 255, + "sellQty": 0, + "iep": true + }, + { + "price": 1217.85, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 1219, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1219.9, + "buyQty": 0, + "sellQty": 400 + }, + { + "price": 1220, + "buyQty": 0, + "sellQty": 55 + }, + { + "price": 1220.55, + "buyQty": 0, + "sellQty": 78 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1216.55, + "totalTradedVolume": 2189, + "finalPrice": 1216.55, + "finalQuantity": 2189, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 14642, + "totalBuyQuantity": 14867, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1, + "perChange": 0.08226728641355766, + "prevClose": 1215.55 + } + } + }, + { + "metadata": { + "symbol": "BIOCON", + "identifier": "BIOCONEQN", + "purpose": "DIVIDEND - RE 0.50 PER SHARE", + "lastPrice": 380, + "change": 0.30000000000001137, + "pChange": 0.07900974453516234, + "previousClose": 379.7, + "finalQuantity": 4119, + "totalTurnover": 1565220, + "marketCap": 170606329254.36, + "yearHigh": 395.8, + "yearLow": 236.9, + "iep": 380, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BIOCONEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 379.2, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 379.7, + "buyQty": 3132, + "sellQty": 0 + }, + { + "price": 379.75, + "buyQty": 90, + "sellQty": 0 + }, + { + "price": 379.8, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 380, + "buyQty": 7260, + "sellQty": 0, + "iep": true + }, + { + "price": 380.2, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 380.5, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 380.6, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 380.75, + "buyQty": 0, + "sellQty": 24 + }, + { + "price": 380.9, + "buyQty": 0, + "sellQty": 156 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 380, + "totalTradedVolume": 4119, + "finalPrice": 380, + "finalQuantity": 4119, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 151212, + "totalBuyQuantity": 35958, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.30000000000001137, + "perChange": 0.07900974453516234, + "prevClose": 379.7 + } + } + }, + { + "metadata": { + "symbol": "ASTRAL", + "identifier": "ASTRALEQN", + "purpose": "INTERIM DIVIDEND - RS 1.50 PER SHARE", + "lastPrice": 1837.95, + "change": 1.4500000000000455, + "pChange": 0.07895453307922927, + "previousClose": 1836.5, + "finalQuantity": 153, + "totalTurnover": 281206.35, + "marketCap": 226111227812.05, + "yearHigh": 2454, + "yearLow": 1695.5, + "iep": 1837.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ASTRALEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1835, + "buyQty": 28, + "sellQty": 0 + }, + { + "price": 1836.5, + "buyQty": 220, + "sellQty": 0 + }, + { + "price": 1836.55, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 1837, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1837.95, + "buyQty": 32, + "sellQty": 0, + "iep": true + }, + { + "price": 1839.05, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 1839.9, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1840, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 1842.9, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 1843, + "buyQty": 0, + "sellQty": 4 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1837.95, + "totalTradedVolume": 153, + "finalPrice": 1837.95, + "finalQuantity": 153, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 8797, + "totalBuyQuantity": 5778, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.4500000000000455, + "perChange": 0.07895453307922927, + "prevClose": 1836.5 + } + } + }, + { + "metadata": { + "symbol": "HAVELLS", + "identifier": "HAVELLSEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 6 PER SHARE", + "lastPrice": 1734, + "change": 1.349999999999909, + "pChange": 0.07791533200588167, + "previousClose": 1732.65, + "finalQuantity": 571, + "totalTurnover": 990114, + "marketCap": 436869738201.84, + "yearHigh": 2106, + "yearLow": 1280, + "iep": 1734, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HAVELLSEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1732.6, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1732.65, + "buyQty": 145, + "sellQty": 0 + }, + { + "price": 1733, + "buyQty": 12, + "sellQty": 0 + }, + { + "price": 1733.4, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1734, + "buyQty": 16, + "sellQty": 0, + "iep": true + }, + { + "price": 1738, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 1738.65, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 1739, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1740, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1740.55, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1734, + "totalTradedVolume": 571, + "finalPrice": 1734, + "finalQuantity": 571, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 7299, + "totalBuyQuantity": 5806, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.349999999999909, + "perChange": 0.07791533200588167, + "prevClose": 1732.65 + } + } + }, + { + "metadata": { + "symbol": "DALBHARAT", + "identifier": "DALBHARATEQN", + "purpose": "INTERIM DIVIDEND - RS 4 PER SHARE", + "lastPrice": 1938, + "change": 1.2999999999999545, + "pChange": 0.06712449011204391, + "previousClose": 1936.7, + "finalQuantity": 165, + "totalTurnover": 319770, + "marketCap": 154087007815.17, + "yearHigh": 2430.7, + "yearLow": 1651.4, + "iep": 1938, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DALBHARATEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1933.05, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 1936.7, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 1936.8, + "buyQty": 155, + "sellQty": 0 + }, + { + "price": 1937, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 1938, + "buyQty": 676, + "sellQty": 0, + "iep": true + }, + { + "price": 1939.95, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 1941.55, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 1941.95, + "buyQty": 0, + "sellQty": 26 + }, + { + "price": 1943.95, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 1945.95, + "buyQty": 0, + "sellQty": 25 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1938, + "totalTradedVolume": 165, + "finalPrice": 1938, + "finalQuantity": 165, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 11116, + "totalBuyQuantity": 1589, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.2999999999999545, + "perChange": 0.06712449011204391, + "prevClose": 1936.7 + } + } + }, + { + "metadata": { + "symbol": "MPHASIS", + "identifier": "MPHASISEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 55 PER SHARE", + "lastPrice": 3019.65, + "change": 1.9500000000002728, + "pChange": 0.06461874937867491, + "previousClose": 3017.7, + "finalQuantity": 243, + "totalTurnover": 733774.95, + "marketCap": 340557166133.33, + "yearHigh": 3187.8, + "yearLow": 2187, + "iep": 3019.65, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MPHASISEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 3013.9, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 3015, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 3017.7, + "buyQty": 225, + "sellQty": 0 + }, + { + "price": 3018, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 3018.05, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 3019.65, + "buyQty": 0, + "sellQty": 1, + "iep": true + }, + { + "price": 3027, + "buyQty": 0, + "sellQty": 27 + }, + { + "price": 3028, + "buyQty": 0, + "sellQty": 30 + }, + { + "price": 3029.95, + "buyQty": 0, + "sellQty": 55 + }, + { + "price": 3030, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 3019.65, + "totalTradedVolume": 243, + "finalPrice": 3019.65, + "finalQuantity": 243, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 6328, + "totalBuyQuantity": 1158, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.9500000000002728, + "perChange": 0.06461874937867491, + "prevClose": 3017.7 + } + } + }, + { + "metadata": { + "symbol": "RBLBANK", + "identifier": "RBLBANKEQN", + "purpose": "DIVIDEND - RS 1.50 PER SHARE", + "lastPrice": 173.5, + "change": 0.09999999999999432, + "pChange": 0.05767012687427584, + "previousClose": 173.4, + "finalQuantity": 57408, + "totalTurnover": 9960288, + "marketCap": 103299987367.47, + "yearHigh": 300.7, + "yearLow": 147.5, + "iep": 173.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_RBLBANKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 173, + "buyQty": 2238, + "sellQty": 0 + }, + { + "price": 173.1, + "buyQty": 75100, + "sellQty": 0 + }, + { + "price": 173.3, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 173.4, + "buyQty": 3514, + "sellQty": 0 + }, + { + "price": 173.5, + "buyQty": 76247, + "sellQty": 0, + "iep": true + }, + { + "price": 173.6, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 173.85, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 173.99, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 174, + "buyQty": 0, + "sellQty": 9825 + }, + { + "price": 174.2, + "buyQty": 0, + "sellQty": 105 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 173.5, + "totalTradedVolume": 57408, + "finalPrice": 173.5, + "finalQuantity": 57408, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 257107, + "totalBuyQuantity": 268630, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.09999999999999432, + "perChange": 0.05767012687427584, + "prevClose": 173.4 + } + } + }, + { + "metadata": { + "symbol": "BANDHANBNK", + "identifier": "BANDHANBNKEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 1.50 PER SHARE", + "lastPrice": 178.14, + "change": 0.08999999999997499, + "pChange": 0.05054759898903397, + "previousClose": 178.05, + "finalQuantity": 27002, + "totalTurnover": 4810136.28, + "marketCap": 147429196840.4, + "yearHigh": 263.1, + "yearLow": 162.8, + "iep": 178.14, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_BANDHANBNKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 177.96, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 178, + "buyQty": 2788, + "sellQty": 0 + }, + { + "price": 178.05, + "buyQty": 1847, + "sellQty": 0 + }, + { + "price": 178.06, + "buyQty": 1113, + "sellQty": 0 + }, + { + "price": 178.1, + "buyQty": 2700, + "sellQty": 0 + }, + { + "price": 178.14, + "buyQty": 0, + "sellQty": 44, + "iep": true + }, + { + "price": 178.2, + "buyQty": 0, + "sellQty": 12 + }, + { + "price": 178.3, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 178.49, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 178.5, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 178.14, + "totalTradedVolume": 27002, + "finalPrice": 178.14, + "finalQuantity": 27002, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 288021, + "totalBuyQuantity": 154480, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.08999999999997499, + "perChange": 0.05054759898903397, + "prevClose": 178.05 + } + } + }, + { + "metadata": { + "symbol": "DIXON", + "identifier": "DIXONEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 5 PER SHARE", + "lastPrice": 17400, + "change": 8.700000000000728, + "pChange": 0.05002501250625731, + "previousClose": 17391.3, + "finalQuantity": 1821, + "totalTurnover": 31685400, + "marketCap": 658259002141.85, + "yearHigh": 17450, + "yearLow": 5782.85, + "iep": 17400, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DIXONEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 17392, + "buyQty": 107, + "sellQty": 0 + }, + { + "price": 17395, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 17395.85, + "buyQty": 8, + "sellQty": 0 + }, + { + "price": 17396, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 17396.4, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 17400, + "buyQty": 0, + "sellQty": 888, + "iep": true + }, + { + "price": 17401, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 17410, + "buyQty": 0, + "sellQty": 9 + }, + { + "price": 17415, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 17420, + "buyQty": 0, + "sellQty": 17 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 17400, + "totalTradedVolume": 1821, + "finalPrice": 17400, + "finalQuantity": 1821, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 8443, + "totalBuyQuantity": 2430, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 8.700000000000728, + "perChange": 0.05002501250625731, + "prevClose": 17391.3 + } + } + }, + { + "metadata": { + "symbol": "MRF", + "identifier": "MRFEQN", + "purpose": "INTERIM DIVIDEND - RS 3 PER SHARE", + "lastPrice": 126900, + "change": 58.60000000000582, + "pChange": 0.046199427000968, + "previousClose": 126841.4, + "finalQuantity": 10, + "totalTurnover": 1269000, + "marketCap": 256481981616.45, + "yearHigh": 151445, + "yearLow": 110856.2, + "iep": 126900, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MRFEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 126842, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 126853, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 126860, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 126888, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 126900, + "buyQty": 8, + "sellQty": 0, + "iep": true + }, + { + "price": 126949, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 126987.45, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 127000, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 127124.7, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 127150, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 126900, + "totalTradedVolume": 10, + "finalPrice": 126900, + "finalQuantity": 10, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 187, + "totalBuyQuantity": 182, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 58.60000000000582, + "perChange": 0.046199427000968, + "prevClose": 126841.4 + } + } + }, + { + "metadata": { + "symbol": "MARUTI", + "identifier": "MARUTIEQN", + "purpose": "DIVIDEND - RS 125 PER SHARE", + "lastPrice": 11134.95, + "change": 5.100000000000364, + "pChange": 0.04582271998275236, + "previousClose": 11129.85, + "finalQuantity": 560, + "totalTurnover": 6235572, + "marketCap": 1462068058386.68, + "yearHigh": 13680, + "yearLow": 9737.65, + "iep": 11134.95, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MARUTIEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 11131.35, + "buyQty": 7, + "sellQty": 0 + }, + { + "price": 11131.5, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 11132, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 11132.9, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 11134.95, + "buyQty": 9, + "sellQty": 0, + "iep": true + }, + { + "price": 11145, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 11150, + "buyQty": 0, + "sellQty": 111 + }, + { + "price": 11158.35, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 11170, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 11178, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 11134.95, + "totalTradedVolume": 560, + "finalPrice": 11134.95, + "finalQuantity": 560, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 6086, + "totalBuyQuantity": 3255, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 5.100000000000364, + "perChange": 0.04582271998275236, + "prevClose": 11129.85 + } + } + }, + { + "metadata": { + "symbol": "HINDUNILVR", + "identifier": "HINDUNILVREQN", + "purpose": "INTERIM DIVIDEND - RS 19 PER SHARE/SPECIAL DIVIDEND - RS 10 PER SHARE", + "lastPrice": 2465.6, + "change": 1.099999999999909, + "pChange": 0.04463379995942013, + "previousClose": 2464.5, + "finalQuantity": 3380, + "totalTurnover": 8333728, + "marketCap": 2191703349899.78, + "yearHigh": 3035, + "yearLow": 2172.05, + "iep": 2465.6, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HINDUNILVREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2465, + "buyQty": 82, + "sellQty": 0 + }, + { + "price": 2465.1, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2465.35, + "buyQty": 105, + "sellQty": 0 + }, + { + "price": 2465.5, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 2465.6, + "buyQty": 11, + "sellQty": 0, + "iep": true + }, + { + "price": 2470, + "buyQty": 0, + "sellQty": 251 + }, + { + "price": 2471, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 2472, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 2472.25, + "buyQty": 0, + "sellQty": 48 + }, + { + "price": 2473, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2465.6, + "totalTradedVolume": 3380, + "finalPrice": 2465.6, + "finalQuantity": 3380, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 18355, + "totalBuyQuantity": 17997, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 1.099999999999909, + "perChange": 0.04463379995942013, + "prevClose": 2464.5 + } + } + }, + { + "metadata": { + "symbol": "IRCTC", + "identifier": "IRCTCEQN", + "purpose": "INTERIM DIVIDEND - RS 4 PER SHARE", + "lastPrice": 833, + "change": 0.35000000000002274, + "pChange": 0.04203446826397919, + "previousClose": 832.65, + "finalQuantity": 3102, + "totalTurnover": 2583966, + "marketCap": 250270526800, + "yearHigh": 1138.9, + "yearLow": 706, + "iep": 833, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IRCTCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 832.05, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 832.1, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 832.65, + "buyQty": 511, + "sellQty": 0 + }, + { + "price": 832.7, + "buyQty": 363, + "sellQty": 0 + }, + { + "price": 833, + "buyQty": 378, + "sellQty": 0, + "iep": true + }, + { + "price": 833.2, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 833.45, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 833.7, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 833.9, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 834.45, + "buyQty": 0, + "sellQty": 200 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 833, + "totalTradedVolume": 3102, + "finalPrice": 833, + "finalQuantity": 3102, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 46418, + "totalBuyQuantity": 20340, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.35000000000002274, + "perChange": 0.04203446826397919, + "prevClose": 832.65 + } + } + }, + { + "metadata": { + "symbol": "SBICARD", + "identifier": "SBICARDEQN", + "purpose": "INTERIM DIVIDEND - RS 2.50 PER SHARE", + "lastPrice": 715, + "change": 0.2999999999999545, + "pChange": 0.04197565412060368, + "previousClose": 714.7, + "finalQuantity": 1573, + "totalTurnover": 1124695, + "marketCap": 212424150265.32, + "yearHigh": 817.4, + "yearLow": 647.95, + "iep": 715, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SBICARDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 712.7, + "buyQty": 51, + "sellQty": 0 + }, + { + "price": 713, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 714, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 714.7, + "buyQty": 81, + "sellQty": 0 + }, + { + "price": 714.75, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 715, + "buyQty": 0, + "sellQty": 113, + "iep": true + }, + { + "price": 715.7, + "buyQty": 0, + "sellQty": 9 + }, + { + "price": 717, + "buyQty": 0, + "sellQty": 13 + }, + { + "price": 717.25, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 717.9, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 715, + "totalTradedVolume": 1573, + "finalPrice": 715, + "finalQuantity": 1573, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 23891, + "totalBuyQuantity": 8452, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.2999999999999545, + "perChange": 0.04197565412060368, + "prevClose": 714.7 + } + } + }, + { + "metadata": { + "symbol": "SBIN", + "identifier": "SBINEQN", + "purpose": "DIVIDEND - RS 13.70 PER SHARE", + "lastPrice": 860, + "change": 0.2999999999999545, + "pChange": 0.034895893916477204, + "previousClose": 859.7, + "finalQuantity": 22630, + "totalTurnover": 19461800, + "marketCap": 3298545130851.92, + "yearHigh": 912, + "yearLow": 584.55, + "iep": 860, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SBINEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 859.7, + "buyQty": 4163, + "sellQty": 0 + }, + { + "price": 859.75, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 859.8, + "buyQty": 427, + "sellQty": 0 + }, + { + "price": 859.9, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 860, + "buyQty": 1859, + "sellQty": 0, + "iep": true + }, + { + "price": 860.55, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 860.85, + "buyQty": 0, + "sellQty": 195 + }, + { + "price": 860.9, + "buyQty": 0, + "sellQty": 1145 + }, + { + "price": 861, + "buyQty": 0, + "sellQty": 206 + }, + { + "price": 861.1, + "buyQty": 0, + "sellQty": 139 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 860, + "totalTradedVolume": 22630, + "finalPrice": 860, + "finalQuantity": 22630, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 286360, + "totalBuyQuantity": 86519, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.2999999999999545, + "perChange": 0.034895893916477204, + "prevClose": 859.7 + } + } + }, + { + "metadata": { + "symbol": "KALYANKJIL", + "identifier": "KALYANKJILEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 1.20 PER SHARE", + "lastPrice": 723, + "change": 0.25, + "pChange": 0.03459010722933241, + "previousClose": 722.75, + "finalQuantity": 10854, + "totalTurnover": 7847442, + "marketCap": 224727717173.05, + "yearHigh": 786.25, + "yearLow": 311.05, + "iep": 723, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_KALYANKJILEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 721.25, + "buyQty": 15, + "sellQty": 0 + }, + { + "price": 722, + "buyQty": 309, + "sellQty": 0 + }, + { + "price": 722.75, + "buyQty": 1276, + "sellQty": 0 + }, + { + "price": 722.8, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 723, + "buyQty": 2341, + "sellQty": 0, + "iep": true + }, + { + "price": 723.15, + "buyQty": 0, + "sellQty": 165 + }, + { + "price": 723.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 724.35, + "buyQty": 0, + "sellQty": 62 + }, + { + "price": 724.9, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 724.95, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 723, + "totalTradedVolume": 10854, + "finalPrice": 723, + "finalQuantity": 10854, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 151836, + "totalBuyQuantity": 36068, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.25, + "perChange": 0.03459010722933241, + "prevClose": 722.75 + } + } + }, + { + "metadata": { + "symbol": "LTF", + "identifier": "LTFEQN", + "purpose": "DIVIDEND - RS 2.50 PER SHARE", + "lastPrice": 148.19, + "change": 0.05000000000001137, + "pChange": 0.03375185635210704, + "previousClose": 148.14, + "finalQuantity": 13851, + "totalTurnover": 2052579.69, + "marketCap": 118743875409.21, + "yearHigh": 194.25, + "yearLow": 134.1, + "iep": 148.19, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LTFEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 148.1, + "buyQty": 12926, + "sellQty": 0 + }, + { + "price": 148.14, + "buyQty": 7097, + "sellQty": 0 + }, + { + "price": 148.15, + "buyQty": 614, + "sellQty": 0 + }, + { + "price": 148.19, + "buyQty": 4367, + "sellQty": 0, + "iep": true + }, + { + "price": 148.2, + "buyQty": 1285, + "sellQty": 0 + }, + { + "price": 148.27, + "buyQty": 0, + "sellQty": 560 + }, + { + "price": 148.29, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 148.34, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 148.39, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 148.44, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 148.19, + "totalTradedVolume": 13851, + "finalPrice": 148.19, + "finalQuantity": 13851, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 318045, + "totalBuyQuantity": 151073, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.05000000000001137, + "perChange": 0.03375185635210704, + "prevClose": 148.14 + } + } + }, + { + "metadata": { + "symbol": "VBL", + "identifier": "VBLEQN", + "purpose": "FACE VALUE SPLIT (SUB-DIVISION) - FROM RS 5/- PER SHARE TO RS 2/- PER SHARE", + "lastPrice": 619, + "change": 0.10000000000002274, + "pChange": 0.01615769914364562, + "previousClose": 618.9, + "finalQuantity": 12306, + "totalTurnover": 7617414, + "marketCap": 775660137174.02, + "yearHigh": 681.12, + "yearLow": 422.2, + "iep": 619, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_VBLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 618.5, + "buyQty": 706, + "sellQty": 0 + }, + { + "price": 618.55, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 618.9, + "buyQty": 2331, + "sellQty": 0 + }, + { + "price": 618.95, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 619, + "buyQty": 1019, + "sellQty": 0, + "iep": true + }, + { + "price": 620, + "buyQty": 0, + "sellQty": 105 + }, + { + "price": 620.35, + "buyQty": 0, + "sellQty": 193 + }, + { + "price": 621, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 621.7, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 621.8, + "buyQty": 0, + "sellQty": 1365 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 619, + "totalTradedVolume": 12306, + "finalPrice": 619, + "finalQuantity": 12306, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 211347, + "totalBuyQuantity": 170261, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.10000000000002274, + "perChange": 0.01615769914364562, + "prevClose": 618.9 + } + } + }, + { + "metadata": { + "symbol": "ICICIBANK", + "identifier": "ICICIBANKEQN", + "purpose": "DIVIDEND - RS 10 PER SHARE", + "lastPrice": 1316.25, + "change": 0.20000000000004547, + "pChange": 0.015196990995786292, + "previousClose": 1316.05, + "finalQuantity": 221016, + "totalTurnover": 290912310, + "marketCap": 9270495397064.14, + "yearHigh": 1362.35, + "yearLow": 961.4, + "iep": 1316.25, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ICICIBANKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1316, + "buyQty": 67, + "sellQty": 0 + }, + { + "price": 1316.05, + "buyQty": 521, + "sellQty": 0 + }, + { + "price": 1316.1, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1316.15, + "buyQty": 38, + "sellQty": 0 + }, + { + "price": 1316.25, + "buyQty": 13557, + "sellQty": 0, + "iep": true + }, + { + "price": 1316.8, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 1316.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1317, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1317.75, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1317.8, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1316.25, + "totalTradedVolume": 221016, + "finalPrice": 1316.25, + "finalQuantity": 221016, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 116689, + "totalBuyQuantity": 62781, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.20000000000004547, + "perChange": 0.015196990995786292, + "prevClose": 1316.05 + } + } + }, + { + "metadata": { + "symbol": "PIIND", + "identifier": "PIINDEQN", + "purpose": "DIVIDEND - RS 9 PER SHARE", + "lastPrice": 4178, + "change": 0.5500000000001819, + "pChange": 0.013165926582010124, + "previousClose": 4177.45, + "finalQuantity": 1381, + "totalTurnover": 5769818, + "marketCap": 337871219269.7, + "yearHigh": 4804.05, + "yearLow": 3220, + "iep": 4178, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PIINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4162.45, + "buyQty": 9, + "sellQty": 0 + }, + { + "price": 4165, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 4170, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 4172, + "buyQty": 27, + "sellQty": 0 + }, + { + "price": 4177.45, + "buyQty": 34, + "sellQty": 0 + }, + { + "price": 4178, + "buyQty": 0, + "sellQty": 72, + "iep": true + }, + { + "price": 4179.8, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 4183.2, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 4185, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 4192.25, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4178, + "totalTradedVolume": 1381, + "finalPrice": 4178, + "finalQuantity": 1381, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 2778, + "totalBuyQuantity": 2928, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.5500000000001819, + "perChange": 0.013165926582010124, + "prevClose": 4177.45 + } + } + }, + { + "metadata": { + "symbol": "UNITDSPR", + "identifier": "UNITDSPREQN", + "purpose": "DIVIDEND - RS 5 PER SHARE", + "lastPrice": 1526.2, + "change": 0.15000000000009095, + "pChange": 0.009829297860495459, + "previousClose": 1526.05, + "finalQuantity": 51, + "totalTurnover": 77836.2, + "marketCap": 449149098250.41, + "yearHigh": 1647.5, + "yearLow": 1032.75, + "iep": 1526.2, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_UNITDSPREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1522.05, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1522.35, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 1525, + "buyQty": 281, + "sellQty": 0 + }, + { + "price": 1526.05, + "buyQty": 28, + "sellQty": 0 + }, + { + "price": 1526.2, + "buyQty": 117, + "sellQty": 0, + "iep": true + }, + { + "price": 1535, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1536, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1538, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1539.5, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 1539.75, + "buyQty": 0, + "sellQty": 500 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1526.2, + "totalTradedVolume": 51, + "finalPrice": 1526.2, + "finalQuantity": 51, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 10615, + "totalBuyQuantity": 2985, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.15000000000009095, + "perChange": 0.009829297860495459, + "prevClose": 1526.05 + } + } + }, + { + "metadata": { + "symbol": "ASHOKLEY", + "identifier": "ASHOKLEYEQN", + "purpose": "INTERIM DIVIDEND - RS 2 PER SHARE", + "lastPrice": 234, + "change": 0.020000000000010232, + "pChange": 0.00854773912300634, + "previousClose": 233.98, + "finalQuantity": 8000, + "totalTurnover": 1872000, + "marketCap": 333366554583.74, + "yearHigh": 264.65, + "yearLow": 157.55, + "iep": 234, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ASHOKLEYEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 233.5, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 233.66, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 233.9, + "buyQty": 17, + "sellQty": 0 + }, + { + "price": 233.98, + "buyQty": 660, + "sellQty": 0 + }, + { + "price": 233.99, + "buyQty": 250, + "sellQty": 0 + }, + { + "price": 234, + "buyQty": 0, + "sellQty": 384, + "iep": true + }, + { + "price": 234.05, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 234.2, + "buyQty": 0, + "sellQty": 21 + }, + { + "price": 234.3, + "buyQty": 0, + "sellQty": 1000 + }, + { + "price": 234.6, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 234, + "totalTradedVolume": 8000, + "finalPrice": 234, + "finalQuantity": 8000, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 212968, + "totalBuyQuantity": 56902, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.020000000000010232, + "perChange": 0.00854773912300634, + "prevClose": 233.98 + } + } + }, + { + "metadata": { + "symbol": "JINDALSTEL", + "identifier": "JINDALSTELEQN", + "purpose": "DIVIDEND - RS 2 PER SHARE", + "lastPrice": 935.55, + "change": 0.049999999999954525, + "pChange": 0.005344735435591077, + "previousClose": 935.5, + "finalQuantity": 603, + "totalTurnover": 564136.65, + "marketCap": 354028305523.19, + "yearHigh": 1097, + "yearLow": 674.3, + "iep": 935.55, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_JINDALSTELEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 933, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 933.5, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 935, + "buyQty": 65, + "sellQty": 0 + }, + { + "price": 935.5, + "buyQty": 153, + "sellQty": 0 + }, + { + "price": 935.55, + "buyQty": 257, + "sellQty": 0, + "iep": true + }, + { + "price": 937.9, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 937.95, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 938, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 938.1, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 938.9, + "buyQty": 0, + "sellQty": 10 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 935.55, + "totalTradedVolume": 603, + "finalPrice": 935.55, + "finalQuantity": 603, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 19322, + "totalBuyQuantity": 4112, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.049999999999954525, + "perChange": 0.005344735435591077, + "prevClose": 935.5 + } + } + }, + { + "metadata": { + "symbol": "COFORGE", + "identifier": "COFORGEEQN", + "purpose": "INTERIM DIVIDEND - RS 19 PER SHARE", + "lastPrice": 8766.05, + "change": 0.1499999999996362, + "pChange": 0.0017111762625587358, + "previousClose": 8765.9, + "finalQuantity": 441, + "totalTurnover": 3865828.05, + "marketCap": 580283554635.82, + "yearHigh": 8775, + "yearLow": 4287.25, + "iep": 8766.05, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_COFORGEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 8755, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 8765, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 8765.9, + "buyQty": 76, + "sellQty": 0 + }, + { + "price": 8766, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 8766.05, + "buyQty": 71, + "sellQty": 0, + "iep": true + }, + { + "price": 8770.05, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 8774, + "buyQty": 0, + "sellQty": 125 + }, + { + "price": 8775, + "buyQty": 0, + "sellQty": 182 + }, + { + "price": 8775.05, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 8776.5, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 8766.05, + "totalTradedVolume": 441, + "finalPrice": 8766.05, + "finalQuantity": 441, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 2726, + "totalBuyQuantity": 1364, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0.1499999999996362, + "perChange": 0.0017111762625587358, + "prevClose": 8765.9 + } + } + }, + { + "metadata": { + "symbol": "TECHM", + "identifier": "TECHMEQN", + "purpose": "INTERIM DIVIDEND - RS 15 PER SHARE", + "lastPrice": 1759.6, + "change": 0, + "pChange": 0, + "previousClose": 1759.6, + "finalQuantity": 2408, + "totalTurnover": 4237116.8, + "marketCap": 1113338822253.83, + "yearHigh": 1774.6, + "yearLow": 1162.95, + "iep": 1759.6, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TECHMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1754, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1755, + "buyQty": 504, + "sellQty": 0 + }, + { + "price": 1756, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1758, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 1759.5, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1759.6, + "buyQty": 0, + "sellQty": 72, + "iep": true + }, + { + "price": 1760, + "buyQty": 0, + "sellQty": 101 + }, + { + "price": 1764.4, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1765, + "buyQty": 0, + "sellQty": 12 + }, + { + "price": 1766, + "buyQty": 0, + "sellQty": 7 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1759.6, + "totalTradedVolume": 2408, + "finalPrice": 1759.6, + "finalQuantity": 2408, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 18423, + "totalBuyQuantity": 3678, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 1759.6 + } + } + }, + { + "metadata": { + "symbol": "SBILIFE", + "identifier": "SBILIFEEQN", + "purpose": "INTERIM DIVIDEND - RS 2.70 PER SHARE", + "lastPrice": 1452.6, + "change": 0, + "pChange": 0, + "previousClose": 1452.6, + "finalQuantity": 1961, + "totalTurnover": 2848548.6, + "marketCap": 648629718688.42, + "yearHigh": 1936, + "yearLow": 1307.7, + "iep": 1452.6, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SBILIFEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1450, + "buyQty": 105, + "sellQty": 0 + }, + { + "price": 1451, + "buyQty": 24, + "sellQty": 0 + }, + { + "price": 1451.65, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1452, + "buyQty": 118, + "sellQty": 0 + }, + { + "price": 1452.6, + "buyQty": 739, + "sellQty": 0, + "iep": true + }, + { + "price": 1453, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1454, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 1455, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 1455.6, + "buyQty": 0, + "sellQty": 7 + }, + { + "price": 1456.35, + "buyQty": 0, + "sellQty": 82 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1452.6, + "totalTradedVolume": 1961, + "finalPrice": 1452.6, + "finalQuantity": 1961, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 10400, + "totalBuyQuantity": 11345, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 1452.6 + } + } + }, + { + "metadata": { + "symbol": "IRFC", + "identifier": "IRFCEQN", + "purpose": "INTERIM DIVIDEND - RE 0.80 PER SHARE", + "lastPrice": 151.05, + "change": 0, + "pChange": 0, + "previousClose": 151.05, + "finalQuantity": 87747, + "totalTurnover": 13254184.35, + "marketCap": 268661498463.33, + "yearHigh": 229, + "yearLow": 74.6, + "iep": 151.05, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_IRFCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 150.86, + "buyQty": 1500, + "sellQty": 0 + }, + { + "price": 150.9, + "buyQty": 33, + "sellQty": 0 + }, + { + "price": 150.98, + "buyQty": 66, + "sellQty": 0 + }, + { + "price": 151, + "buyQty": 14544, + "sellQty": 0 + }, + { + "price": 151.05, + "buyQty": 5423, + "sellQty": 0, + "iep": true + }, + { + "price": 151.06, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 151.08, + "buyQty": 0, + "sellQty": 35 + }, + { + "price": 151.1, + "buyQty": 0, + "sellQty": 1200 + }, + { + "price": 151.15, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 151.18, + "buyQty": 0, + "sellQty": 350 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 151.05, + "totalTradedVolume": 87747, + "finalPrice": 151.05, + "finalQuantity": 87747, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 887443, + "totalBuyQuantity": 223575, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 151.05 + } + } + }, + { + "metadata": { + "symbol": "LALPATHLAB", + "identifier": "LALPATHLABEQN", + "purpose": "INTERIM DIVIDEND - RS 6 PER SHARE", + "lastPrice": 2970.85, + "change": 0, + "pChange": 0, + "previousClose": 2970.85, + "finalQuantity": 163, + "totalTurnover": 484248.55, + "marketCap": 109068208370.1, + "yearHigh": 3653.95, + "yearLow": 1943.7, + "iep": 2970.85, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_LALPATHLABEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2958, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 2960, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 2968, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 2970, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 2970.85, + "buyQty": 206, + "sellQty": 0, + "iep": true + }, + { + "price": 2971.85, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 2978.3, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 2985.65, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 2987.9, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 2990, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2970.85, + "totalTradedVolume": 163, + "finalPrice": 2970.85, + "finalQuantity": 163, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 6434, + "totalBuyQuantity": 886, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 2970.85 + } + } + }, + { + "metadata": { + "symbol": "TATAPOWER", + "identifier": "TATAPOWEREQN", + "purpose": "DIVIDEND - RS 2 PER SHARE", + "lastPrice": 425.65, + "change": 0, + "pChange": 0, + "previousClose": 425.65, + "finalQuantity": 17461, + "totalTurnover": 7432274.65, + "marketCap": 717227872823.69, + "yearHigh": 494.85, + "yearLow": 276.5, + "iep": 425.65, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_TATAPOWEREQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 425.15, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 425.2, + "buyQty": 8, + "sellQty": 0 + }, + { + "price": 425.25, + "buyQty": 1020, + "sellQty": 0 + }, + { + "price": 425.45, + "buyQty": 255, + "sellQty": 0 + }, + { + "price": 425.5, + "buyQty": 131, + "sellQty": 0 + }, + { + "price": 425.65, + "buyQty": 0, + "sellQty": 3139, + "iep": true + }, + { + "price": 425.9, + "buyQty": 0, + "sellQty": 300 + }, + { + "price": 426, + "buyQty": 0, + "sellQty": 365 + }, + { + "price": 426.5, + "buyQty": 0, + "sellQty": 550 + }, + { + "price": 426.7, + "buyQty": 0, + "sellQty": 281 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 425.65, + "totalTradedVolume": 17461, + "finalPrice": 425.65, + "finalQuantity": 17461, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 159207, + "totalBuyQuantity": 101362, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 425.65 + } + } + }, + { + "metadata": { + "symbol": "EICHERMOT", + "identifier": "EICHERMOTEQN", + "purpose": "DIVIDEND - RS 51 PER SHARE", + "lastPrice": 4797.05, + "change": 0, + "pChange": 0, + "previousClose": 4797.05, + "finalQuantity": 551, + "totalTurnover": 2643174.55, + "marketCap": 659941205194.1, + "yearHigh": 5105, + "yearLow": 3562.45, + "iep": 4797.05, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_EICHERMOTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4781, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 4785, + "buyQty": 9, + "sellQty": 0 + }, + { + "price": 4796, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 4797, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 4797.05, + "buyQty": 167, + "sellQty": 0, + "iep": true + }, + { + "price": 4800, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 4815.9, + "buyQty": 0, + "sellQty": 6 + }, + { + "price": 4815.95, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 4820, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 4827, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4797.05, + "totalTradedVolume": 551, + "finalPrice": 4797.05, + "finalQuantity": 551, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 9730, + "totalBuyQuantity": 2878, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 4797.05 + } + } + }, + { + "metadata": { + "symbol": "NTPC", + "identifier": "NTPCEQN", + "purpose": "INTERIM DIVIDEND - RS 2.50 PER SHARE", + "lastPrice": 372.75, + "change": 0, + "pChange": 0, + "previousClose": 372.75, + "finalQuantity": 29540, + "totalTurnover": 11011035, + "marketCap": 1761511351251.62, + "yearHigh": 448.45, + "yearLow": 272.8, + "iep": 372.75, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NTPCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 372.5, + "buyQty": 4741, + "sellQty": 0 + }, + { + "price": 372.55, + "buyQty": 464, + "sellQty": 0 + }, + { + "price": 372.6, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 372.7, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 372.75, + "buyQty": 2215, + "sellQty": 0, + "iep": true + }, + { + "price": 372.95, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 373, + "buyQty": 0, + "sellQty": 894 + }, + { + "price": 373.2, + "buyQty": 0, + "sellQty": 60 + }, + { + "price": 373.35, + "buyQty": 0, + "sellQty": 123 + }, + { + "price": 373.5, + "buyQty": 0, + "sellQty": 35 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 372.75, + "totalTradedVolume": 29540, + "finalPrice": 372.75, + "finalQuantity": 29540, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 224374, + "totalBuyQuantity": 77289, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 372.75 + } + } + }, + { + "metadata": { + "symbol": "NESTLEIND", + "identifier": "NESTLEINDEQN", + "purpose": "DIVIDEND - RS 8.50 PER SHARE", + "lastPrice": 2257.8, + "change": 0, + "pChange": 0, + "previousClose": 2257.8, + "finalQuantity": 1901, + "totalTurnover": 4292077.8, + "marketCap": 806337060893.79, + "yearHigh": 2778, + "yearLow": 2168.7, + "iep": 2257.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NESTLEINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2254, + "buyQty": 510, + "sellQty": 0 + }, + { + "price": 2255, + "buyQty": 78, + "sellQty": 0 + }, + { + "price": 2256, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2257, + "buyQty": 13, + "sellQty": 0 + }, + { + "price": 2257.8, + "buyQty": 301, + "sellQty": 0, + "iep": true + }, + { + "price": 2258, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 2259.9, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 2260, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 2260.8, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 2261.1, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2257.8, + "totalTradedVolume": 1901, + "finalPrice": 2257.8, + "finalQuantity": 1901, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 8976, + "totalBuyQuantity": 13386, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 2257.8 + } + } + }, + { + "metadata": { + "symbol": "ONGC", + "identifier": "ONGCEQN", + "purpose": "INTERIM DIVIDEND - RS 6 PER SHARE", + "lastPrice": 260.7, + "change": 0, + "pChange": 0, + "previousClose": 260.7, + "finalQuantity": 20920, + "totalTurnover": 5453844, + "marketCap": 1009960684679.9, + "yearHigh": 345, + "yearLow": 192.05, + "iep": 260.7, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ONGCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 260.4, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 260.45, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 260.5, + "buyQty": 43, + "sellQty": 0 + }, + { + "price": 260.6, + "buyQty": 405, + "sellQty": 0 + }, + { + "price": 260.7, + "buyQty": 13183, + "sellQty": 0, + "iep": true + }, + { + "price": 260.75, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 260.9, + "buyQty": 0, + "sellQty": 380 + }, + { + "price": 260.95, + "buyQty": 0, + "sellQty": 900 + }, + { + "price": 261, + "buyQty": 0, + "sellQty": 18468 + }, + { + "price": 261.4, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 260.7, + "totalTradedVolume": 20920, + "finalPrice": 260.7, + "finalQuantity": 20920, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 424566, + "totalBuyQuantity": 167971, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": 0, + "perChange": 0, + "prevClose": 260.7 + } + } + }, + { + "metadata": { + "symbol": "PAGEIND", + "identifier": "PAGEINDEQN", + "purpose": "INTERIM DIVIDEND - RS 250 PER SHARE", + "lastPrice": 45933.3, + "change": -0.049999999995634425, + "pChange": -0.00010885337123382994, + "previousClose": 45933.35, + "finalQuantity": 35, + "totalTurnover": 1607665.5, + "marketCap": 281986268352.7, + "yearHigh": 48393.7, + "yearLow": 33070.05, + "iep": 45933.3, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PAGEINDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 45703.35, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 45750, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 45800, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 45863, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 45900, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 45933, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 45933.3, + "buyQty": 0, + "sellQty": 10, + "iep": true + }, + { + "price": 46100, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 46200, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 46222, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 45933.3, + "totalTradedVolume": 35, + "finalPrice": 45933.3, + "finalQuantity": 35, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 763, + "totalBuyQuantity": 166, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.049999999995634425, + "perChange": -0.00010885337123382994, + "prevClose": 45933.35 + } + } + }, + { + "metadata": { + "symbol": "ICICIGI", + "identifier": "ICICIGIEQN", + "purpose": "INTERIM DIVIDEND - RS 5.50 PER SHARE", + "lastPrice": 1950.8, + "change": -0.049999999999954525, + "pChange": -0.002562985365351233, + "previousClose": 1950.85, + "finalQuantity": 798, + "totalTurnover": 1556738.4, + "marketCap": 463196412530.34, + "yearHigh": 2301.9, + "yearLow": 1353.5, + "iep": 1950.8, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ICICIGIEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1938, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1940, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1943.15, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 1945, + "buyQty": 109, + "sellQty": 0 + }, + { + "price": 1949, + "buyQty": 80, + "sellQty": 0 + }, + { + "price": 1950, + "buyQty": 0, + "sellQty": 290 + }, + { + "price": 1950.8, + "buyQty": 0, + "sellQty": 25, + "iep": true + }, + { + "price": 1950.85, + "buyQty": 0, + "sellQty": 14 + }, + { + "price": 1953.85, + "buyQty": 0, + "sellQty": 783 + }, + { + "price": 1960, + "buyQty": 0, + "sellQty": 20 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1950.8, + "totalTradedVolume": 798, + "finalPrice": 1950.8, + "finalQuantity": 798, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 2899, + "totalBuyQuantity": 1512, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.049999999999954525, + "perChange": -0.002562985365351233, + "prevClose": 1950.85 + } + } + }, + { + "metadata": { + "symbol": "HDFCBANK", + "identifier": "HDFCBANKEQN", + "purpose": "DIVIDEND - RS 19.50 PER SHARE", + "lastPrice": 1860, + "change": -0.09999999999990905, + "pChange": -0.005376055050798831, + "previousClose": 1860.1, + "finalQuantity": 459994, + "totalTurnover": 855588840, + "marketCap": 14095049323793.57, + "yearHigh": 1865, + "yearLow": 1363.55, + "iep": 1860, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HDFCBANKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1858.1, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 1858.5, + "buyQty": 45, + "sellQty": 0 + }, + { + "price": 1859, + "buyQty": 58, + "sellQty": 0 + }, + { + "price": 1859.1, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1859.9, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1860, + "buyQty": 0, + "sellQty": 12489, + "iep": true + }, + { + "price": 1860.05, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1860.1, + "buyQty": 0, + "sellQty": 19384 + }, + { + "price": 1860.8, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 1861, + "buyQty": 0, + "sellQty": 21 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1860, + "totalTradedVolume": 459994, + "finalPrice": 1860, + "finalQuantity": 459994, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 303638, + "totalBuyQuantity": 46713, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.09999999999990905, + "perChange": -0.005376055050798831, + "prevClose": 1860.1 + } + } + }, + { + "metadata": { + "symbol": "HDFCLIFE", + "identifier": "HDFCLIFEEQN", + "purpose": "DIVIDEND - RS 2 PER SHARE", + "lastPrice": 650.2, + "change": -0.049999999999954525, + "pChange": -0.007689350249896889, + "previousClose": 650.25, + "finalQuantity": 17880, + "totalTurnover": 11625576, + "marketCap": 692813981274.96, + "yearHigh": 761.2, + "yearLow": 511.4, + "iep": 650.2, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HDFCLIFEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 648.5, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 649, + "buyQty": 26, + "sellQty": 0 + }, + { + "price": 649.25, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 650, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 650.05, + "buyQty": 3, + "sellQty": 0 + }, + { + "price": 650.15, + "buyQty": 0, + "sellQty": 450 + }, + { + "price": 650.2, + "buyQty": 0, + "sellQty": 111, + "iep": true + }, + { + "price": 650.25, + "buyQty": 0, + "sellQty": 1582 + }, + { + "price": 650.75, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 650.95, + "buyQty": 0, + "sellQty": 300 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 650.2, + "totalTradedVolume": 17880, + "finalPrice": 650.2, + "finalQuantity": 17880, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 81503, + "totalBuyQuantity": 27174, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.049999999999954525, + "perChange": -0.007689350249896889, + "prevClose": 650.25 + } + } + }, + { + "metadata": { + "symbol": "GODREJPROP", + "identifier": "GODREJPROPEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 2/- PER SHARE", + "lastPrice": 2900, + "change": -0.25, + "pChange": -0.00861994655633135, + "previousClose": 2900.25, + "finalQuantity": 317, + "totalTurnover": 919300, + "marketCap": 361801429343.45, + "yearHigh": 3402.7, + "yearLow": 1864.2, + "iep": 2900, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GODREJPROPEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2885, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2890, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 2891, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 2895, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 2899, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 2900, + "buyQty": 0, + "sellQty": 142, + "iep": true + }, + { + "price": 2900.25, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 2908, + "buyQty": 0, + "sellQty": 48 + }, + { + "price": 2910.05, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 2915, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2900, + "totalTradedVolume": 317, + "finalPrice": 2900, + "finalQuantity": 317, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 9517, + "totalBuyQuantity": 3889, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.25, + "perChange": -0.00861994655633135, + "prevClose": 2900.25 + } + } + }, + { + "metadata": { + "symbol": "CROMPTON", + "identifier": "CROMPTONEQN", + "purpose": "DIVIDEND - RS 3 PER SHARE", + "lastPrice": 408.5, + "change": -0.05000000000001137, + "pChange": -0.012238404112106563, + "previousClose": 408.55, + "finalQuantity": 566, + "totalTurnover": 231211, + "marketCap": 261975025660.79, + "yearHigh": 484, + "yearLow": 261.25, + "iep": 408.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CROMPTONEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 407.35, + "buyQty": 24, + "sellQty": 0 + }, + { + "price": 407.6, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 408, + "buyQty": 450, + "sellQty": 0 + }, + { + "price": 408.05, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 408.25, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 408.5, + "buyQty": 0, + "sellQty": 298, + "iep": true + }, + { + "price": 408.55, + "buyQty": 0, + "sellQty": 1364 + }, + { + "price": 408.65, + "buyQty": 0, + "sellQty": 9 + }, + { + "price": 409, + "buyQty": 0, + "sellQty": 59 + }, + { + "price": 409.95, + "buyQty": 0, + "sellQty": 490 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 408.5, + "totalTradedVolume": 566, + "finalPrice": 408.5, + "finalQuantity": 566, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 22644, + "totalBuyQuantity": 6385, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.05000000000001137, + "perChange": -0.012238404112106563, + "prevClose": 408.55 + } + } + }, + { + "metadata": { + "symbol": "POWERGRID", + "identifier": "POWERGRIDEQN", + "purpose": "INTERIM DIVIDEND - RS 4.50 PER SHARE", + "lastPrice": 325, + "change": -0.05000000000001137, + "pChange": -0.015382248884790454, + "previousClose": 325.05, + "finalQuantity": 75944, + "totalTurnover": 24681800, + "marketCap": 1471629876167.43, + "yearHigh": 366.25, + "yearLow": 211.55, + "iep": 325, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_POWERGRIDEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 324.65, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 324.7, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 324.85, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 324.9, + "buyQty": 80, + "sellQty": 0 + }, + { + "price": 325, + "buyQty": 3349, + "sellQty": 0, + "iep": true + }, + { + "price": 325.05, + "buyQty": 0, + "sellQty": 1363 + }, + { + "price": 325.85, + "buyQty": 0, + "sellQty": 214 + }, + { + "price": 326, + "buyQty": 0, + "sellQty": 130 + }, + { + "price": 326.05, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 326.25, + "buyQty": 0, + "sellQty": 367 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 325, + "totalTradedVolume": 75944, + "finalPrice": 325, + "finalQuantity": 75944, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 160043, + "totalBuyQuantity": 164572, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.05000000000001137, + "perChange": -0.015382248884790454, + "prevClose": 325.05 + } + } + }, + { + "metadata": { + "symbol": "GMRINFRA", + "identifier": "GMRINFRAEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 83.87, + "change": -0.01999999999999602, + "pChange": -0.023840743831202788, + "previousClose": 83.89, + "finalQuantity": 7357, + "totalTurnover": 617031.59, + "marketCap": 299913820527.8, + "yearHigh": 103.75, + "yearLow": 58.75, + "iep": 83.87, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GMRINFRAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 83.61, + "buyQty": 43, + "sellQty": 0 + }, + { + "price": 83.7, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 83.8, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 83.81, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 83.85, + "buyQty": 963, + "sellQty": 0 + }, + { + "price": 83.87, + "buyQty": 0, + "sellQty": 361, + "iep": true + }, + { + "price": 83.89, + "buyQty": 0, + "sellQty": 4087 + }, + { + "price": 83.95, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 83.96, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 83.97, + "buyQty": 0, + "sellQty": 5000 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 83.87, + "totalTradedVolume": 7357, + "finalPrice": 83.87, + "finalQuantity": 7357, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 442630, + "totalBuyQuantity": 104164, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.01999999999999602, + "perChange": -0.023840743831202788, + "prevClose": 83.89 + } + } + }, + { + "metadata": { + "symbol": "DELHIVERY", + "identifier": "DELHIVERYEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 340, + "change": -0.10000000000002274, + "pChange": -0.0294031167303801, + "previousClose": 340.1, + "finalQuantity": 3345, + "totalTurnover": 1137300, + "marketCap": 157693427919.81, + "yearHigh": 488, + "yearLow": 325.5, + "iep": 340, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DELHIVERYEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 339.05, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 339.3, + "buyQty": 199, + "sellQty": 0 + }, + { + "price": 339.5, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 339.9, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 340, + "buyQty": 41, + "sellQty": 0, + "iep": true + }, + { + "price": 340.1, + "buyQty": 0, + "sellQty": 544 + }, + { + "price": 340.55, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 341, + "buyQty": 0, + "sellQty": 2904 + }, + { + "price": 341.1, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 341.3, + "buyQty": 0, + "sellQty": 20 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 340, + "totalTradedVolume": 3345, + "finalPrice": 340, + "finalQuantity": 3345, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 57799, + "totalBuyQuantity": 33249, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.10000000000002274, + "perChange": -0.0294031167303801, + "prevClose": 340.1 + } + } + }, + { + "metadata": { + "symbol": "INDIGO", + "identifier": "INDIGOEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 4369, + "change": -1.8500000000003638, + "pChange": -0.04232586339042437, + "previousClose": 4370.85, + "finalQuantity": 588, + "totalTurnover": 2568972, + "marketCap": 756141654345.57, + "yearHigh": 5035, + "yearLow": 2780.8, + "iep": 4369, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_INDIGOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4355.55, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 4357.25, + "buyQty": 30, + "sellQty": 0 + }, + { + "price": 4360, + "buyQty": 33, + "sellQty": 0 + }, + { + "price": 4360.05, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 4366, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 4369, + "buyQty": 0, + "sellQty": 16, + "iep": true + }, + { + "price": 4370, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 4370.85, + "buyQty": 0, + "sellQty": 166 + }, + { + "price": 4375, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 4378.1, + "buyQty": 0, + "sellQty": 310 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4369, + "totalTradedVolume": 588, + "finalPrice": 4369, + "finalQuantity": 588, + "lastUpdateTime": "05-Dec-2024 09:07:15", + "totalSellQuantity": 6262, + "totalBuyQuantity": 1317, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -1.8500000000003638, + "perChange": -0.04232586339042437, + "prevClose": 4370.85 + } + } + }, + { + "metadata": { + "symbol": "NCC", + "identifier": "NCCEQN", + "purpose": "DIVIDEND - RS 2.20 PER SHARE", + "lastPrice": 312, + "change": -0.14999999999997726, + "pChange": -0.048053820278704876, + "previousClose": 312.15, + "finalQuantity": 3594, + "totalTurnover": 1121328, + "marketCap": 152572426439.87, + "yearHigh": 364.5, + "yearLow": 154.65, + "iep": 312, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_NCCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 311.1, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 311.15, + "buyQty": 400, + "sellQty": 0 + }, + { + "price": 311.3, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 311.8, + "buyQty": 251, + "sellQty": 0 + }, + { + "price": 312, + "buyQty": 170, + "sellQty": 0, + "iep": true + }, + { + "price": 312.1, + "buyQty": 0, + "sellQty": 900 + }, + { + "price": 312.15, + "buyQty": 0, + "sellQty": 447 + }, + { + "price": 312.7, + "buyQty": 0, + "sellQty": 55 + }, + { + "price": 312.9, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 312.95, + "buyQty": 0, + "sellQty": 100 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 312, + "totalTradedVolume": 3594, + "finalPrice": 312, + "finalQuantity": 3594, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 245903, + "totalBuyQuantity": 23939, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.14999999999997726, + "perChange": -0.048053820278704876, + "prevClose": 312.15 + } + } + }, + { + "metadata": { + "symbol": "GLENMARK", + "identifier": "GLENMARKEQN", + "purpose": "DIVIDEND - RS 2.50 PER SHARE", + "lastPrice": 1547.7, + "change": -0.9500000000000455, + "pChange": -0.06134375100894621, + "previousClose": 1548.65, + "finalQuantity": 270, + "totalTurnover": 417879, + "marketCap": 232594701069.24, + "yearHigh": 1830.95, + "yearLow": 771, + "iep": 1547.7, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_GLENMARKEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1545.05, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 1545.15, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 1545.65, + "buyQty": 22, + "sellQty": 0 + }, + { + "price": 1546.6, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1547.7, + "buyQty": 18, + "sellQty": 0, + "iep": true + }, + { + "price": 1550.3, + "buyQty": 0, + "sellQty": 8 + }, + { + "price": 1552, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1554, + "buyQty": 0, + "sellQty": 45 + }, + { + "price": 1554.15, + "buyQty": 0, + "sellQty": 8 + }, + { + "price": 1557, + "buyQty": 0, + "sellQty": 50 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1547.7, + "totalTradedVolume": 270, + "finalPrice": 1547.7, + "finalQuantity": 270, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 8980, + "totalBuyQuantity": 5033, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.9500000000000455, + "perChange": -0.06134375100894621, + "prevClose": 1548.65 + } + } + }, + { + "metadata": { + "symbol": "MARICO", + "identifier": "MARICOEQN", + "purpose": "INTERIM DIVIDEND - RS. 6.50 PER SHARE", + "lastPrice": 631.05, + "change": -0.5500000000000682, + "pChange": -0.08708043065232239, + "previousClose": 631.6, + "finalQuantity": 1368, + "totalTurnover": 863276.4, + "marketCap": 330966978671.77, + "yearHigh": 719.85, + "yearLow": 486.3, + "iep": 631.05, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MARICOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 630, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 630.1, + "buyQty": 252, + "sellQty": 0 + }, + { + "price": 630.5, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 631, + "buyQty": 158, + "sellQty": 0 + }, + { + "price": 631.05, + "buyQty": 67, + "sellQty": 0, + "iep": true + }, + { + "price": 631.6, + "buyQty": 0, + "sellQty": 237 + }, + { + "price": 632.45, + "buyQty": 0, + "sellQty": 14 + }, + { + "price": 633.85, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 634.7, + "buyQty": 0, + "sellQty": 33 + }, + { + "price": 634.95, + "buyQty": 0, + "sellQty": 3 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 631.05, + "totalTradedVolume": 1368, + "finalPrice": 631.05, + "finalQuantity": 1368, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 10633, + "totalBuyQuantity": 7436, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.5500000000000682, + "perChange": -0.08708043065232239, + "prevClose": 631.6 + } + } + }, + { + "metadata": { + "symbol": "UBL", + "identifier": "UBLEQN", + "purpose": "DIVIDEND - RS 10 PER SHARE", + "lastPrice": 1950.3, + "change": -2.7999999999999545, + "pChange": -0.14336183503148608, + "previousClose": 1953.1, + "finalQuantity": 116, + "totalTurnover": 226234.8, + "marketCap": 146429843285.24, + "yearHigh": 2204.9, + "yearLow": 1647.25, + "iep": 1950.3, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_UBLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1940.2, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 1943.35, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 1945, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1950, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 1950.3, + "buyQty": 9, + "sellQty": 0, + "iep": true + }, + { + "price": 1953.05, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1953.75, + "buyQty": 0, + "sellQty": 4 + }, + { + "price": 1958, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1962, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 1962.8, + "buyQty": 0, + "sellQty": 4 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1950.3, + "totalTradedVolume": 116, + "finalPrice": 1950.3, + "finalQuantity": 116, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 2276, + "totalBuyQuantity": 652, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -2.7999999999999545, + "perChange": -0.14336183503148608, + "prevClose": 1953.1 + } + } + }, + { + "metadata": { + "symbol": "ULTRACEMCO", + "identifier": "ULTRACEMCOEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 70 PER SHARE", + "lastPrice": 11745, + "change": -21.799999999999272, + "pChange": -0.18526702246999416, + "previousClose": 11766.8, + "finalQuantity": 1075, + "totalTurnover": 12625875, + "marketCap": 1339244822736.21, + "yearHigh": 12138, + "yearLow": 9086.15, + "iep": 11745, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ULTRACEMCOEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 11720, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 11721, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 11725, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 11730, + "buyQty": 81, + "sellQty": 0 + }, + { + "price": 11732, + "buyQty": 13, + "sellQty": 0 + }, + { + "price": 11740, + "buyQty": 0, + "sellQty": 86 + }, + { + "price": 11745, + "buyQty": 0, + "sellQty": 10, + "iep": true + }, + { + "price": 11760, + "buyQty": 0, + "sellQty": 7 + }, + { + "price": 11766.8, + "buyQty": 0, + "sellQty": 32 + }, + { + "price": 11775, + "buyQty": 0, + "sellQty": 9 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 11745, + "totalTradedVolume": 1075, + "finalPrice": 11745, + "finalQuantity": 1075, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 3105, + "totalBuyQuantity": 950, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -21.799999999999272, + "perChange": -0.18526702246999416, + "prevClose": 11766.8 + } + } + }, + { + "metadata": { + "symbol": "ABB", + "identifier": "ABBEQN", + "purpose": "INTERIM DIVIDEND - RS 10.66 PER SHARE", + "lastPrice": 7650, + "change": -14.199999999999818, + "pChange": -0.1852770021659119, + "previousClose": 7664.2, + "finalQuantity": 683, + "totalTurnover": 5224950, + "marketCap": 400304946819.76, + "yearHigh": 9149.95, + "yearLow": 4340.3, + "iep": 7650, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ABBEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 7611, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 7615, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 7620, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 7635, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 7645.45, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 7650, + "buyQty": 0, + "sellQty": 39, + "iep": true + }, + { + "price": 7651.95, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 7655, + "buyQty": 0, + "sellQty": 25 + }, + { + "price": 7664.2, + "buyQty": 0, + "sellQty": 14 + }, + { + "price": 7667, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 7650, + "totalTradedVolume": 683, + "finalPrice": 7650, + "finalQuantity": 683, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 3043, + "totalBuyQuantity": 1947, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -14.199999999999818, + "perChange": -0.1852770021659119, + "prevClose": 7664.2 + } + } + }, + { + "metadata": { + "symbol": "CUB", + "identifier": "CUBEQN", + "purpose": "DIVIDEND - RS 1.50 PER SHARE", + "lastPrice": 184.5, + "change": -0.37999999999999545, + "pChange": -0.2055387278234506, + "previousClose": 184.88, + "finalQuantity": 6886, + "totalTurnover": 1270467, + "marketCap": 132787754487.31, + "yearHigh": 186.25, + "yearLow": 125.4, + "iep": 184.5, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CUBEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 184, + "buyQty": 1520, + "sellQty": 0 + }, + { + "price": 184.02, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 184.08, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 184.1, + "buyQty": 2500, + "sellQty": 0 + }, + { + "price": 184.15, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 184.5, + "buyQty": 0, + "sellQty": 638, + "iep": true + }, + { + "price": 184.6, + "buyQty": 0, + "sellQty": 89 + }, + { + "price": 184.64, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 184.65, + "buyQty": 0, + "sellQty": 89 + }, + { + "price": 184.88, + "buyQty": 0, + "sellQty": 1149 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 184.5, + "totalTradedVolume": 6886, + "finalPrice": 184.5, + "finalQuantity": 6886, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 208871, + "totalBuyQuantity": 31082, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.37999999999999545, + "perChange": -0.2055387278234506, + "prevClose": 184.88 + } + } + }, + { + "metadata": { + "symbol": "PETRONET", + "identifier": "PETRONETEQN", + "purpose": "INTERIM DIVIDEND - RS 7 PER SHARE", + "lastPrice": 335.55, + "change": -0.8000000000000114, + "pChange": -0.2378474803032589, + "previousClose": 336.35, + "finalQuantity": 3683, + "totalTurnover": 1235830.65, + "marketCap": 251214864337.94, + "yearHigh": 384.2, + "yearLow": 203.3, + "iep": 335.55, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PETRONETEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 334, + "buyQty": 659, + "sellQty": 0 + }, + { + "price": 334.25, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 334.5, + "buyQty": 40, + "sellQty": 0 + }, + { + "price": 335, + "buyQty": 2205, + "sellQty": 0 + }, + { + "price": 335.2, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 335.55, + "buyQty": 0, + "sellQty": 494, + "iep": true + }, + { + "price": 336, + "buyQty": 0, + "sellQty": 59 + }, + { + "price": 336.35, + "buyQty": 0, + "sellQty": 51 + }, + { + "price": 336.8, + "buyQty": 0, + "sellQty": 28 + }, + { + "price": 337.55, + "buyQty": 0, + "sellQty": 28 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 335.55, + "totalTradedVolume": 3683, + "finalPrice": 335.55, + "finalQuantity": 3683, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 46431, + "totalBuyQuantity": 13320, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -0.8000000000000114, + "perChange": -0.2378474803032589, + "prevClose": 336.35 + } + } + }, + { + "metadata": { + "symbol": "JKCEMENT", + "identifier": "JKCEMENTEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 15 PER SHARE/SPECIAL DIVIDEND - RS 5 PER SHARE", + "lastPrice": 4616, + "change": -16.550000000000182, + "pChange": -0.3572546437707133, + "previousClose": 4632.55, + "finalQuantity": 42, + "totalTurnover": 193872, + "marketCap": 192585775013.71, + "yearHigh": 4895.5, + "yearLow": 3630, + "iep": 4616, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_JKCEMENTEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4590, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 4596, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 4600, + "buyQty": 41, + "sellQty": 0 + }, + { + "price": 4601, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 4602, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 4616, + "buyQty": 0, + "sellQty": 23, + "iep": true + }, + { + "price": 4622.35, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 4630, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 4632.4, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 4632.55, + "buyQty": 0, + "sellQty": 547 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4616, + "totalTradedVolume": 42, + "finalPrice": 4616, + "finalQuantity": 42, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 5281, + "totalBuyQuantity": 228, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -16.550000000000182, + "perChange": -0.3572546437707133, + "prevClose": 4632.55 + } + } + }, + { + "metadata": { + "symbol": "SRF", + "identifier": "SRFEQN", + "purpose": "INTERIM DIVIDEND - RS 3.60 PER SHARE", + "lastPrice": 2325.05, + "change": -8.649999999999636, + "pChange": -0.3706560397651642, + "previousClose": 2333.7, + "finalQuantity": 301, + "totalTurnover": 699840.05, + "marketCap": 336479295373.36, + "yearHigh": 2693.95, + "yearLow": 2089.1, + "iep": 2325.05, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_SRFEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 2322, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 2323, + "buyQty": 11, + "sellQty": 0 + }, + { + "price": 2323.9, + "buyQty": 16, + "sellQty": 0 + }, + { + "price": 2325, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 2325.05, + "buyQty": 15, + "sellQty": 0, + "iep": true + }, + { + "price": 2325.3, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 2326.1, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 2328.75, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 2331.15, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 2332.95, + "buyQty": 0, + "sellQty": 160 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 2325.05, + "totalTradedVolume": 301, + "finalPrice": 2325.05, + "finalQuantity": 301, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 6810, + "totalBuyQuantity": 1795, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -8.649999999999636, + "perChange": -0.3706560397651642, + "prevClose": 2333.7 + } + } + }, + { + "metadata": { + "symbol": "JSWSTEEL", + "identifier": "JSWSTEELEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 7.30 PER SHARE", + "lastPrice": 991, + "change": -3.8500000000000227, + "pChange": -0.3869930140222167, + "previousClose": 994.85, + "finalQuantity": 1935, + "totalTurnover": 1917585, + "marketCap": 951292294080.56, + "yearHigh": 1063, + "yearLow": 761.75, + "iep": 991, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_JSWSTEELEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 990, + "buyQty": 357, + "sellQty": 0 + }, + { + "price": 990.2, + "buyQty": 45, + "sellQty": 0 + }, + { + "price": 990.55, + "buyQty": 34, + "sellQty": 0 + }, + { + "price": 990.6, + "buyQty": 500, + "sellQty": 0 + }, + { + "price": 991, + "buyQty": 173, + "sellQty": 0, + "iep": true + }, + { + "price": 994.85, + "buyQty": 0, + "sellQty": 130 + }, + { + "price": 995, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 997, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 997.95, + "buyQty": 0, + "sellQty": 60 + }, + { + "price": 998.7, + "buyQty": 0, + "sellQty": 26 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 991, + "totalTradedVolume": 1935, + "finalPrice": 991, + "finalQuantity": 1935, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 20097, + "totalBuyQuantity": 6680, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -3.8500000000000227, + "perChange": -0.3869930140222167, + "prevClose": 994.85 + } + } + }, + { + "metadata": { + "symbol": "PEL", + "identifier": "PELEQN", + "purpose": "DIVIDEND - RS 10 PER SHARE", + "lastPrice": 1232.15, + "change": -5, + "pChange": -0.40415471042315, + "previousClose": 1237.15, + "finalQuantity": 1009, + "totalTurnover": 1243239.35, + "marketCap": 147638887861.01, + "yearHigh": 1244.7, + "yearLow": 736.6, + "iep": 1232.15, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_PELEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1228.1, + "buyQty": 180, + "sellQty": 0 + }, + { + "price": 1230, + "buyQty": 100, + "sellQty": 0 + }, + { + "price": 1231, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1232.1, + "buyQty": 150, + "sellQty": 0 + }, + { + "price": 1232.15, + "buyQty": 7, + "sellQty": 0, + "iep": true + }, + { + "price": 1232.7, + "buyQty": 0, + "sellQty": 7 + }, + { + "price": 1233.15, + "buyQty": 0, + "sellQty": 6 + }, + { + "price": 1235, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 1235.15, + "buyQty": 0, + "sellQty": 15 + }, + { + "price": 1235.8, + "buyQty": 0, + "sellQty": 7 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1232.15, + "totalTradedVolume": 1009, + "finalPrice": 1232.15, + "finalQuantity": 1009, + "lastUpdateTime": "05-Dec-2024 09:07:10", + "totalSellQuantity": 14677, + "totalBuyQuantity": 5095, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -5, + "perChange": -0.40415471042315, + "prevClose": 1237.15 + } + } + }, + { + "metadata": { + "symbol": "MFSL", + "identifier": "MFSLEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 1165.1, + "change": -4.850000000000136, + "pChange": -0.4145476302406202, + "previousClose": 1169.95, + "finalQuantity": 990, + "totalTurnover": 1153449, + "marketCap": 288260577550.84, + "yearHigh": 1306.45, + "yearLow": 854.25, + "iep": 1165.1, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_MFSLEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1159.4, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1159.9, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 1160, + "buyQty": 805, + "sellQty": 0 + }, + { + "price": 1161, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1165.1, + "buyQty": 147, + "sellQty": 0, + "iep": true + }, + { + "price": 1165.2, + "buyQty": 0, + "sellQty": 20 + }, + { + "price": 1165.25, + "buyQty": 0, + "sellQty": 22 + }, + { + "price": 1167.8, + "buyQty": 0, + "sellQty": 6 + }, + { + "price": 1168.2, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1170.75, + "buyQty": 0, + "sellQty": 6 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1165.1, + "totalTradedVolume": 990, + "finalPrice": 1165.1, + "finalQuantity": 990, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 7278, + "totalBuyQuantity": 8569, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -4.850000000000136, + "perChange": -0.4145476302406202, + "prevClose": 1169.95 + } + } + }, + { + "metadata": { + "symbol": "KEI", + "identifier": "KEIEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 4399, + "change": -21.199999999999818, + "pChange": -0.47961630695443236, + "previousClose": 4420.2, + "finalQuantity": 294, + "totalTurnover": 1293306, + "marketCap": 262771526566.99, + "yearHigh": 5039.7, + "yearLow": 2822.45, + "iep": 4399, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_KEIEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 4380.05, + "buyQty": 50, + "sellQty": 0 + }, + { + "price": 4388.8, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 4390, + "buyQty": 26, + "sellQty": 0 + }, + { + "price": 4390.05, + "buyQty": 53, + "sellQty": 0 + }, + { + "price": 4399, + "buyQty": 57, + "sellQty": 0, + "iep": true + }, + { + "price": 4400, + "buyQty": 0, + "sellQty": 200 + }, + { + "price": 4410, + "buyQty": 0, + "sellQty": 10 + }, + { + "price": 4418.35, + "buyQty": 0, + "sellQty": 3 + }, + { + "price": 4420, + "buyQty": 0, + "sellQty": 51 + }, + { + "price": 4420.2, + "buyQty": 0, + "sellQty": 5 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 4399, + "totalTradedVolume": 294, + "finalPrice": 4399, + "finalQuantity": 294, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 6954, + "totalBuyQuantity": 3589, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -21.199999999999818, + "perChange": -0.47961630695443236, + "prevClose": 4420.2 + } + } + }, + { + "metadata": { + "symbol": "ABBOTINDIA", + "identifier": "ABBOTINDIAEQN", + "purpose": "DIVIDEND - RS 410 PER SHARE", + "lastPrice": 28709, + "change": -141, + "pChange": -0.48873483535528595, + "previousClose": 28850, + "finalQuantity": 10, + "totalTurnover": 287090, + "marketCap": 96614644102.49, + "yearHigh": 30521, + "yearLow": 22000, + "iep": 28709, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ABBOTINDIAEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 28600, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 28601, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 28605.1, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 28690, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 28709, + "buyQty": 3, + "sellQty": 0, + "iep": true + }, + { + "price": 28852.45, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 28950, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 28996.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 28999, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 29013.45, + "buyQty": 0, + "sellQty": 1 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 28709, + "totalTradedVolume": 10, + "finalPrice": 28709, + "finalQuantity": 10, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 200, + "totalBuyQuantity": 377, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -141, + "perChange": -0.48873483535528595, + "prevClose": 28850 + } + } + }, + { + "metadata": { + "symbol": "CANFINHOME", + "identifier": "CANFINHOMEEQN", + "purpose": "INTERIM DIVIDEND - RS 6 PER SHARE", + "lastPrice": 840, + "change": -4.149999999999977, + "pChange": -0.49161878813006904, + "previousClose": 844.15, + "finalQuantity": 3017, + "totalTurnover": 2534280, + "marketCap": 71168361654.95, + "yearHigh": 951.75, + "yearLow": 680, + "iep": 840, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CANFINHOMEEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 836, + "buyQty": 55, + "sellQty": 0 + }, + { + "price": 836.55, + "buyQty": 1000, + "sellQty": 0 + }, + { + "price": 837, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 839, + "buyQty": 417, + "sellQty": 0 + }, + { + "price": 840, + "buyQty": 191, + "sellQty": 0, + "iep": true + }, + { + "price": 841, + "buyQty": 0, + "sellQty": 500 + }, + { + "price": 842.6, + "buyQty": 0, + "sellQty": 13 + }, + { + "price": 843.85, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 844, + "buyQty": 0, + "sellQty": 54 + }, + { + "price": 844.15, + "buyQty": 0, + "sellQty": 56 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 840, + "totalTradedVolume": 3017, + "finalPrice": 840, + "finalQuantity": 3017, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 31660, + "totalBuyQuantity": 11104, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -4.149999999999977, + "perChange": -0.49161878813006904, + "prevClose": 844.15 + } + } + }, + { + "metadata": { + "symbol": "CESC", + "identifier": "CESCEQN", + "purpose": "ANNUAL GENERAL MEETING", + "lastPrice": 185.51, + "change": -1.1000000000000227, + "pChange": -0.5894646589143254, + "previousClose": 186.61, + "finalQuantity": 5897, + "totalTurnover": 1093952.47, + "marketCap": 117130726824.05, + "yearHigh": 212.49, + "yearLow": 101.5, + "iep": 185.51, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_CESCEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 185.15, + "buyQty": 6000, + "sellQty": 0 + }, + { + "price": 185.2, + "buyQty": 300, + "sellQty": 0 + }, + { + "price": 185.25, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 185.5, + "buyQty": 1100, + "sellQty": 0 + }, + { + "price": 185.51, + "buyQty": 1469, + "sellQty": 0, + "iep": true + }, + { + "price": 185.95, + "buyQty": 0, + "sellQty": 88 + }, + { + "price": 186.22, + "buyQty": 0, + "sellQty": 100 + }, + { + "price": 186.35, + "buyQty": 0, + "sellQty": 88 + }, + { + "price": 186.4, + "buyQty": 0, + "sellQty": 88 + }, + { + "price": 186.48, + "buyQty": 0, + "sellQty": 250 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 185.51, + "totalTradedVolume": 5897, + "finalPrice": 185.51, + "finalQuantity": 5897, + "lastUpdateTime": "05-Dec-2024 09:07:12", + "totalSellQuantity": 204318, + "totalBuyQuantity": 64048, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -1.1000000000000227, + "perChange": -0.5894646589143254, + "prevClose": 186.61 + } + } + }, + { + "metadata": { + "symbol": "RAMCOCEM", + "identifier": "RAMCOCEMEQN", + "purpose": "ANNUAL GENERAL MEETING/DIVIDEND - RS 2.50 PER SHARE", + "lastPrice": 1034, + "change": -6.650000000000091, + "pChange": -0.6390236871186364, + "previousClose": 1040.65, + "finalQuantity": 2181, + "totalTurnover": 2255154, + "marketCap": 131881104620.83, + "yearHigh": 1058.2, + "yearLow": 700, + "iep": 1034, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_RAMCOCEMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1031, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 1031.3, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 1032, + "buyQty": 200, + "sellQty": 0 + }, + { + "price": 1032.1, + "buyQty": 6, + "sellQty": 0 + }, + { + "price": 1033.95, + "buyQty": 25, + "sellQty": 0 + }, + { + "price": 1034, + "buyQty": 0, + "sellQty": 308, + "iep": true + }, + { + "price": 1038.35, + "buyQty": 0, + "sellQty": 9 + }, + { + "price": 1040, + "buyQty": 0, + "sellQty": 91 + }, + { + "price": 1040.6, + "buyQty": 0, + "sellQty": 59 + }, + { + "price": 1040.65, + "buyQty": 0, + "sellQty": 15 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1034, + "totalTradedVolume": 2181, + "finalPrice": 1034, + "finalQuantity": 2181, + "lastUpdateTime": "05-Dec-2024 09:07:13", + "totalSellQuantity": 10656, + "totalBuyQuantity": 4001, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -6.650000000000091, + "perChange": -0.6390236871186364, + "prevClose": 1040.65 + } + } + }, + { + "metadata": { + "symbol": "HCLTECH", + "identifier": "HCLTECHEQN", + "purpose": "INTERIM DIVIDEND - RS 12 PER SHARE", + "lastPrice": 1885, + "change": -12.650000000000091, + "pChange": -0.6666139699101568, + "previousClose": 1897.65, + "finalQuantity": 27634, + "totalTurnover": 52090090, + "marketCap": 1998231784809.82, + "yearHigh": 1919.95, + "yearLow": 1235, + "iep": 1885, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_HCLTECHEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 1884, + "buyQty": 62, + "sellQty": 0 + }, + { + "price": 1884.4, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1884.6, + "buyQty": 10, + "sellQty": 0 + }, + { + "price": 1884.95, + "buyQty": 899, + "sellQty": 0 + }, + { + "price": 1885, + "buyQty": 2092, + "sellQty": 0, + "iep": true + }, + { + "price": 1887, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 1894, + "buyQty": 0, + "sellQty": 5 + }, + { + "price": 1895, + "buyQty": 0, + "sellQty": 75 + }, + { + "price": 1897, + "buyQty": 0, + "sellQty": 4287 + }, + { + "price": 1897.65, + "buyQty": 0, + "sellQty": 138 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 1885, + "totalTradedVolume": 27634, + "finalPrice": 1885, + "finalQuantity": 27634, + "lastUpdateTime": "05-Dec-2024 09:07:11", + "totalSellQuantity": 33111, + "totalBuyQuantity": 11855, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -12.650000000000091, + "perChange": -0.6666139699101568, + "prevClose": 1897.65 + } + } + }, + { + "metadata": { + "symbol": "ALKEM", + "identifier": "ALKEMEQN", + "purpose": "DIVIDEND - RS 5 PER SHARE", + "lastPrice": 5629.55, + "change": -43.149999999999636, + "pChange": -0.7606607083046809, + "previousClose": 5672.7, + "finalQuantity": 5920, + "totalTurnover": 33326936, + "marketCap": 295209313689.6, + "yearHigh": 6439.9, + "yearLow": 4407.05, + "iep": 5629.55, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_ALKEMEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 5621.05, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 5621.1, + "buyQty": 20, + "sellQty": 0 + }, + { + "price": 5622, + "buyQty": 4, + "sellQty": 0 + }, + { + "price": 5623.45, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 5629.55, + "buyQty": 73, + "sellQty": 0, + "iep": true + }, + { + "price": 5639.95, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 5652.2, + "buyQty": 0, + "sellQty": 2 + }, + { + "price": 5654.25, + "buyQty": 0, + "sellQty": 1 + }, + { + "price": 5655, + "buyQty": 0, + "sellQty": 50 + }, + { + "price": 5666.55, + "buyQty": 0, + "sellQty": 2 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 5629.55, + "totalTradedVolume": 5920, + "finalPrice": 5629.55, + "finalQuantity": 5920, + "lastUpdateTime": "05-Dec-2024 09:07:14", + "totalSellQuantity": 1332, + "totalBuyQuantity": 6862, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -43.149999999999636, + "perChange": -0.7606607083046809, + "prevClose": 5672.7 + } + } + }, + { + "metadata": { + "symbol": "DIVISLAB", + "identifier": "DIVISLABEQN", + "purpose": "DIVIDEND - RS 30 PER SHARE", + "lastPrice": 6184.85, + "change": -71.64999999999964, + "pChange": -1.1452089826580298, + "previousClose": 6256.5, + "finalQuantity": 5593, + "totalTurnover": 34591866.05, + "marketCap": 793554892404.77, + "yearHigh": 6285.45, + "yearLow": 3350, + "iep": 6184.85, + "chartTodayPath": "https://nsearchives.nseindia.com/today/preOpen_DIVISLABEQN.svg" + }, + "detail": { + "preOpenMarket": { + "preopen": [ + { + "price": 6178.05, + "buyQty": 8, + "sellQty": 0 + }, + { + "price": 6180, + "buyQty": 107, + "sellQty": 0 + }, + { + "price": 6180.05, + "buyQty": 5, + "sellQty": 0 + }, + { + "price": 6180.3, + "buyQty": 1, + "sellQty": 0 + }, + { + "price": 6184.6, + "buyQty": 2, + "sellQty": 0 + }, + { + "price": 6184.8, + "buyQty": 0, + "sellQty": 2747 + }, + { + "price": 6184.85, + "buyQty": 0, + "sellQty": 4, + "iep": true + }, + { + "price": 6184.95, + "buyQty": 0, + "sellQty": 1300 + }, + { + "price": 6185, + "buyQty": 0, + "sellQty": 9100 + }, + { + "price": 6198, + "buyQty": 0, + "sellQty": 9000 + } + ], + "ato": { + "totalBuyQuantity": 0, + "totalSellQuantity": 0 + }, + "IEP": 6184.85, + "totalTradedVolume": 5593, + "finalPrice": 6184.85, + "finalQuantity": 5593, + "lastUpdateTime": "05-Dec-2024 09:07:16", + "totalSellQuantity": 28798, + "totalBuyQuantity": 1074, + "atoBuyQty": 0, + "atoSellQty": 0, + "Change": -71.64999999999964, + "perChange": -1.1452089826580298, + "prevClose": 6256.5 + } + } + } + ], + "advances": 182, + "timestamp": "05-Dec-2024 09:07:10", + "totalTradedValue": 3902172353.4100003, + "totalmarketcap": 164780060242323.3, + "totalTradedVolume": 17541949 +} \ No newline at end of file diff --git a/nse/controllers/market/pre_market.py b/nse/controllers/market/pre_market.py new file mode 100644 index 0000000..de30174 --- /dev/null +++ b/nse/controllers/market/pre_market.py @@ -0,0 +1,305 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 5th Dec., 2024 + + OBJECTIVE: + + To provide a way to retrieve pre-market data from NSE. This is typically available by 9:10 AM. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse +from utils_v2.nse.models.pre_market import NSEPreMarketData, NSEPreMarketSymbol + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEPreMarket(AsyncNSEBase): + + # Symbol names: + PRE_MARKET_KEY_NIFTY = "NIFTY" + PRE_MARKET_KEY_BANK_NIFTY = "BANKNIFTY" + PRE_MARKET_KEY_SME = "SME" + PRE_MARKET_KEY_FO = "FO" + PRE_MARKET_KEY_OTHERS = "OTHERS" + PRE_MARKET_KEY_ALL = "ALL" + + def __init__( + self, + http_client: httpx.AsyncClient, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (CECal) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/market-data/pre-open-market-cm-and-emerge-market", + data_url = r"https://www.nseindia.com/api/market-data-pre-open", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + key: str, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the pre-open market trading. Useful for finding gaps and expected unusual activity in the + trading hours. + :param key: The type of pre-market data that you want. Choose from the class variables. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Make the API call: + api_response = await self.get( + params = {"key": key}, + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + key = key, + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + @staticmethod + def format_data( + raw_json: dict, + key: str = None, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> NSEPreMarketData | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param key: A choice between "NIFTY", "BANKNIFTY", "SME", "FO", "OTHERS", "ALL". + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_data = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Start by extracting basic data: + formatted_data = { + "scrapeTs": timestamp, + "ts": date_time.to_timezone( + date_time.as_if_timezone( + date_time.parse_date_time( + input_value = raw_json["timestamp"], + date_formats = ["%d-%b-%Y %H:%M:%S"] + ), + timezone = date_time.TIMEZONE_IST + ), + timezone = date_time.TIMEZONE_UTC + ), + "key": key, + "advances": raw_json["advances"], + "declines": raw_json["declines"], + "unchanged": raw_json["unchanged"], + "totalMarketCap": raw_json["totalmarketcap"], + "totalTradedValue": raw_json["totalTradedValue"], + "totalTradedVolume": raw_json["totalTradedVolume"], + "symbols": [] + } + + # Now we iterate through the symbol-wise data and extract what we need: + for raw_symbol_data in raw_json["data"]: + raw_symbol_metadata = raw_symbol_data["metadata"] + raw_symbol_detail = raw_symbol_data["detail"]["preOpenMarket"] + market_cap = regex.find_first(text = str(raw_symbol_metadata["marketCap"]), pattern = r"[\d,]+\.?[\d,]*") + formatted_data["symbols"].append({ + "symbol": raw_symbol_metadata["symbol"], + "ffmc": float(market_cap) if market_cap else None, + "trigger": raw_symbol_metadata["purpose"], + "yearHigh": raw_symbol_metadata["yearHigh"], + "yearLow": raw_symbol_metadata["yearLow"], + "prevClose": raw_symbol_metadata["previousClose"], + "preMarketPrice": raw_symbol_metadata["iep"], + "chg": raw_symbol_metadata["change"], + "pChg": raw_symbol_metadata["pChange"], + "totalTradedVolume": raw_symbol_detail["totalTradedVolume"], + "totalBuyVolume": raw_symbol_detail["totalBuyQuantity"], + "totalSellVolume": raw_symbol_detail["totalSellQuantity"], + }) + + # Data sorting (descending order of percent change): + formatted_data["symbols"] = sorted( + formatted_data["symbols"], + key = lambda x: x["pChg"], + reverse = True + ) + + # Model the data: + formatted_data = NSEPreMarketData(**formatted_data) + + # If something goes wrong: + except Exception as exception: + formatted_data = None + if raise_exception: raise + + # Done here: + return formatted_data + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an HTTP client: + test_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 2.5, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 9.9 # ....... Time to wait for receiving data. + ) + ) + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSEPreMarket(http_client = test_client) + + # Get and show the data: + api_response = await my_nse.get_data(key = my_nse.PRE_MARKET_KEY_FO, return_raw = False) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("PRE-MARKET DATA:", json.to_string(api_response.data, default = str)) + if api_response.exception: raise api_response.exception + print("COUNT:", len(api_response.data.symbols)) + + asyncio.run(main()) diff --git a/nse/controllers/options/__init__.py b/nse/controllers/options/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/controllers/options/examples/20241122_raw_nse_nifty_option_chain.json b/nse/controllers/options/examples/20241122_raw_nse_nifty_option_chain.json new file mode 100644 index 0000000..79194de --- /dev/null +++ b/nse/controllers/options/examples/20241122_raw_nse_nifty_option_chain.json @@ -0,0 +1,40750 @@ +{ + "records": { + "expiryDates": [ + "28-Nov-2024", + "05-Dec-2024", + "12-Dec-2024", + "19-Dec-2024", + "26-Dec-2024", + "02-Jan-2025", + "30-Jan-2025", + "27-Mar-2025", + "26-Jun-2025", + "25-Sep-2025", + "24-Dec-2025", + "25-Jun-2026", + "31-Dec-2026", + "24-Jun-2027", + "30-Dec-2027", + "29-Jun-2028", + "28-Dec-2028", + "28-Jun-2029" + ], + "data": [ + { + "strikePrice": 12000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 12000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE12000.00", + "openInterest": 20, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 12000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 12000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE12000.00", + "openInterest": 32, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 13000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 13000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE13000.00", + "openInterest": 9, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 13000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 13000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE13000.00", + "openInterest": 8, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 21.6, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 13000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 13000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE13000.00", + "openInterest": 6, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 21.4, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 14000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 14000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE14000.00", + "openInterest": 13994, + "changeinOpenInterest": -129, + "pchangeinOpenInterest": -0.913403667775968, + "totalTradedVolume": 420, + "impliedVolatility": 63.28, + "lastPrice": 2.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 62150, + "totalSellQuantity": 22800, + "bidQty": 1125, + "bidprice": 2.5, + "askQty": 600, + "askPrice": 3.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 14000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE14000.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 9805.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 2800, + "bidQty": 900, + "bidprice": 9016.3, + "askQty": 25, + "askPrice": 10222.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 14000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 14000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE14000.00", + "openInterest": 83, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 200, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 20.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 14000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 14000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE14000.00", + "openInterest": 37, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 200, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 20.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 14000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 14000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE14000.00", + "openInterest": 47, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.3, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 500, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 20.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 15000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 15000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE15000.00", + "openInterest": 3367, + "changeinOpenInterest": 22, + "pchangeinOpenInterest": 0.657698056801196, + "totalTradedVolume": 823, + "impliedVolatility": 56.61, + "lastPrice": 2.9, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 64550, + "totalSellQuantity": 13625, + "bidQty": 1800, + "bidprice": 2.8, + "askQty": 525, + "askPrice": 3.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 15000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE15000.00", + "openInterest": 602, + "changeinOpenInterest": -7, + "pchangeinOpenInterest": -1.14942528735632, + "totalTradedVolume": 10, + "impliedVolatility": 0, + "lastPrice": 8891.7, + "change": 441.700000000001, + "pChange": 5.22721893491125, + "totalBuyQuantity": 2800, + "totalSellQuantity": 1125, + "bidQty": 25, + "bidprice": 8933.05, + "askQty": 125, + "askPrice": 9241.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 15000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 15000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE15000.00", + "openInterest": 69, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 200, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 20.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 15000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 15000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE15000.00", + "openInterest": 47, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.8, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 20.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 15000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 15000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE15000.00", + "openInterest": 34, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 21.9, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 200, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 20.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 15000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 15000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE15000.00", + "openInterest": 86, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 21.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 700, + "totalSellQuantity": 0, + "bidQty": 450, + "bidprice": 21.3, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 15000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 15000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE15000.00", + "openInterest": 14, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 37.4, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 200, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 23.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 16000, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 16000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE16000.00", + "openInterest": 13252, + "changeinOpenInterest": -1998, + "pchangeinOpenInterest": -13.1016393442623, + "totalTradedVolume": 2388, + "impliedVolatility": 0, + "lastPrice": 7934, + "change": 518.2, + "pChange": 6.98778284203997, + "totalBuyQuantity": 6300, + "totalSellQuantity": 3425, + "bidQty": 250, + "bidprice": 7939.45, + "askQty": 25, + "askPrice": 7976.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 16000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE16000.00", + "openInterest": 6418, + "changeinOpenInterest": -970, + "pchangeinOpenInterest": -13.1293990254467, + "totalTradedVolume": 3435, + "impliedVolatility": 51.08, + "lastPrice": 3.95, + "change": 0.15, + "pChange": 3.94736842105264, + "totalBuyQuantity": 71825, + "totalSellQuantity": 19450, + "bidQty": 150, + "bidprice": 3.75, + "askQty": 200, + "askPrice": 4.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 16000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 16000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE16000.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 275, + "totalSellQuantity": 0, + "bidQty": 275, + "bidprice": 20.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 16000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 16000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE16000.00", + "openInterest": 86, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.25, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 275, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 20.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 16000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 16000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE16000.00", + "openInterest": 20, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 32.4, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 200, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 21.9, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 16000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 16000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE16000.00", + "openInterest": 96, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 58.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1000, + "totalSellQuantity": 0, + "bidQty": 450, + "bidprice": 24.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 16500, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 16500, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE16500.00", + "openInterest": 104, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 22.6, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 21, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 17000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 17000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE17000.00", + "openInterest": 7046, + "changeinOpenInterest": 24, + "pchangeinOpenInterest": 0.341782967815437, + "totalTradedVolume": 1311, + "impliedVolatility": 45.55, + "lastPrice": 5.25, + "change": -0.9, + "pChange": -14.6341463414634, + "totalBuyQuantity": 38450, + "totalSellQuantity": 15375, + "bidQty": 125, + "bidprice": 5.05, + "askQty": 175, + "askPrice": 5.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 17000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE17000.00", + "openInterest": 996, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.100300902708124, + "totalTradedVolume": 9, + "impliedVolatility": 0, + "lastPrice": 6993.2, + "change": 548.2, + "pChange": 8.50581846392552, + "totalBuyQuantity": 3750, + "totalSellQuantity": 1775, + "bidQty": 50, + "bidprice": 6940.3, + "askQty": 25, + "askPrice": 7010.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 17000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 17000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE17000.00", + "openInterest": 117, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 20.85, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1375, + "totalSellQuantity": 25, + "bidQty": 450, + "bidprice": 22.15, + "askQty": 25, + "askPrice": 30, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 17000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE17000.00", + "openInterest": 25, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 8340, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 17000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 17000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE17000.00", + "openInterest": 120, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 66.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1250, + "totalSellQuantity": 50, + "bidQty": 700, + "bidprice": 31.15, + "askQty": 50, + "askPrice": 169.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 17000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 17000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE17000.00", + "openInterest": 568, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 90, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 35.6, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 18000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE18000.00", + "openInterest": 17142, + "changeinOpenInterest": -1000, + "pchangeinOpenInterest": -5.51207143644582, + "totalTradedVolume": 4259, + "impliedVolatility": 39.39, + "lastPrice": 6, + "change": -1.9, + "pChange": -24.0506329113924, + "totalBuyQuantity": 63800, + "totalSellQuantity": 21775, + "bidQty": 725, + "bidprice": 6, + "askQty": 25, + "askPrice": 6.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 18000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE18000.00", + "openInterest": 2273, + "changeinOpenInterest": -82, + "pchangeinOpenInterest": -3.48195329087049, + "totalTradedVolume": 103, + "impliedVolatility": 0, + "lastPrice": 5942.55, + "change": 494.95, + "pChange": 9.085652397386, + "totalBuyQuantity": 4100, + "totalSellQuantity": 4950, + "bidQty": 25, + "bidprice": 5956.7, + "askQty": 125, + "askPrice": 6177.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "27-Mar-2025", + "PE": { + "strikePrice": 18000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE18000.00", + "openInterest": 106, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 6, + "impliedVolatility": 25.9, + "lastPrice": 20.05, + "change": -8.4, + "pChange": -29.5254833040422, + "totalBuyQuantity": 14050, + "totalSellQuantity": 0, + "bidQty": 575, + "bidprice": 20.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 18000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE18000.00", + "openInterest": 12, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 110.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 500, + "totalSellQuantity": 0, + "bidQty": 200, + "bidprice": 21.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "25-Sep-2025", + "PE": { + "strikePrice": 18000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE18000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 18000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE18000.00", + "openInterest": 119, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 123.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 225, + "totalSellQuantity": 25, + "bidQty": 200, + "bidprice": 27.85, + "askQty": 25, + "askPrice": 70, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 18000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE18000.00", + "openInterest": 266, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0.377358490566038, + "totalTradedVolume": 4, + "impliedVolatility": 0, + "lastPrice": 6600, + "change": 331.4, + "pChange": 5.286666879367, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 18000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE18000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 32.55, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 18000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE18000.00", + "openInterest": 211, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 135.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1050, + "totalSellQuantity": 0, + "bidQty": 500, + "bidprice": 46.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 18000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE18000.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 264.2, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 46.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 18000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE18000.00", + "openInterest": 404, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 169, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 500, + "totalSellQuantity": 0, + "bidQty": 500, + "bidprice": 51.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 18000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE18000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 18000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE18000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 18000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE18000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 18500, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 18500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE18500.00", + "openInterest": 42, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 5199, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 4500, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 19000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE19000.00", + "openInterest": 24778, + "changeinOpenInterest": -211, + "pchangeinOpenInterest": -0.844371523470327, + "totalTradedVolume": 6231, + "impliedVolatility": 33.74, + "lastPrice": 7.5, + "change": -2.15, + "pChange": -22.279792746114, + "totalBuyQuantity": 46850, + "totalSellQuantity": 19050, + "bidQty": 725, + "bidprice": 7.5, + "askQty": 275, + "askPrice": 8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 19000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE19000.00", + "openInterest": 3548, + "changeinOpenInterest": -67, + "pchangeinOpenInterest": -1.85338865836791, + "totalTradedVolume": 187, + "impliedVolatility": 0, + "lastPrice": 4942.2, + "change": 478.4, + "pChange": 10.7173260450737, + "totalBuyQuantity": 4050, + "totalSellQuantity": 3900, + "bidQty": 25, + "bidprice": 4971.65, + "askQty": 100, + "askPrice": 5091.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "27-Mar-2025", + "PE": { + "strikePrice": 19000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE19000.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 26.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 11725, + "totalSellQuantity": 375, + "bidQty": 3600, + "bidprice": 20.8, + "askQty": 100, + "askPrice": 29.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 19000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE19000.00", + "openInterest": 24017, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 68.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1525, + "totalSellQuantity": 150, + "bidQty": 975, + "bidprice": 26, + "askQty": 25, + "askPrice": 75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "25-Sep-2025", + "PE": { + "strikePrice": 19000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE19000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 29.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 19000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE19000.00", + "openInterest": 407, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 80, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 850, + "totalSellQuantity": 275, + "bidQty": 550, + "bidprice": 43.95, + "askQty": 250, + "askPrice": 152.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 19000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE19000.00", + "openInterest": 129, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 5315.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 4585.4, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 19000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE19000.00", + "openInterest": 7, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 160.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 550, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 51.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 19000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE19000.00", + "openInterest": 97, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 234.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1450, + "totalSellQuantity": 0, + "bidQty": 700, + "bidprice": 78.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 19000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE19000.00", + "openInterest": 21, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 201.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 450, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 74.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 19000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE19000.00", + "openInterest": 31, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 204.7, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 82.95, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 19000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE19000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 87.8, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 19000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE19000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 90.2, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 19000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE19000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 90.55, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 19500, + "expiryDate": "24-Dec-2025", + "CE": { + "strikePrice": 19500, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE19500.00", + "openInterest": 67, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 6000, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 125, + "totalSellQuantity": 0, + "bidQty": 75, + "bidprice": 4250, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 20000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE20000.00", + "openInterest": 11927, + "changeinOpenInterest": 124, + "pchangeinOpenInterest": 1.05058036092519, + "totalTradedVolume": 792, + "impliedVolatility": 0, + "lastPrice": 3985.95, + "change": 511.95, + "pChange": 14.7366148531952, + "totalBuyQuantity": 4350, + "totalSellQuantity": 3825, + "bidQty": 25, + "bidprice": 3996.55, + "askQty": 25, + "askPrice": 4026.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 20000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE20000.00", + "openInterest": 76692, + "changeinOpenInterest": 1170, + "pchangeinOpenInterest": 1.54921744657186, + "totalTradedVolume": 23492, + "impliedVolatility": 28.44, + "lastPrice": 10.25, + "change": -3.8, + "pChange": -27.0462633451957, + "totalBuyQuantity": 164925, + "totalSellQuantity": 20950, + "bidQty": 875, + "bidprice": 10.25, + "askQty": 250, + "askPrice": 10.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "27-Mar-2025", + "CE": { + "strikePrice": 20000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE20000.00", + "openInterest": 3159, + "changeinOpenInterest": 47, + "pchangeinOpenInterest": 1.51028277634961, + "totalTradedVolume": 160, + "impliedVolatility": 0, + "lastPrice": 4261.1, + "change": 446.900000000001, + "pChange": 11.7167426983378, + "totalBuyQuantity": 175, + "totalSellQuantity": 800, + "bidQty": 50, + "bidprice": 4255.4, + "askQty": 50, + "askPrice": 4316.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 20000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE20000.00", + "openInterest": 10630, + "changeinOpenInterest": 358, + "pchangeinOpenInterest": 3.48520249221184, + "totalTradedVolume": 1508, + "impliedVolatility": 21.21, + "lastPrice": 47.1, + "change": -8.45, + "pChange": -15.2115211521152, + "totalBuyQuantity": 30625, + "totalSellQuantity": 9475, + "bidQty": 25, + "bidprice": 47.15, + "askQty": 150, + "askPrice": 48.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 20000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE20000.00", + "openInterest": 18294, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 99, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1075, + "totalSellQuantity": 25, + "bidQty": 500, + "bidprice": 44.4, + "askQty": 25, + "askPrice": 99, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "25-Sep-2025", + "PE": { + "strikePrice": 20000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE20000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 50, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "24-Dec-2025", + "CE": { + "strikePrice": 20000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE20000.00", + "openInterest": 183, + "changeinOpenInterest": -5, + "pchangeinOpenInterest": -2.65957446808511, + "totalTradedVolume": 14, + "impliedVolatility": 0, + "lastPrice": 5057.25, + "change": 399.55, + "pChange": 8.57826824398309, + "totalBuyQuantity": 300, + "totalSellQuantity": 50, + "bidQty": 25, + "bidprice": 5035.25, + "askQty": 25, + "askPrice": 5152.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 20000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE20000.00", + "openInterest": 1489, + "changeinOpenInterest": -7, + "pchangeinOpenInterest": -0.467914438502674, + "totalTradedVolume": 184, + "impliedVolatility": 20.27, + "lastPrice": 175, + "change": -28.8, + "pChange": -14.1315014720314, + "totalBuyQuantity": 6125, + "totalSellQuantity": 3575, + "bidQty": 75, + "bidprice": 166, + "askQty": 200, + "askPrice": 175, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 20000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE20000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 550, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 96.7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 20000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE20000.00", + "openInterest": 172, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.578034682080925, + "totalTradedVolume": 1, + "impliedVolatility": 19.74, + "lastPrice": 225, + "change": 42, + "pChange": 22.9508196721311, + "totalBuyQuantity": 850, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 230.25, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 20000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE20000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 136.6, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 20000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE20000.00", + "openInterest": 106, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 311.25, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 144.8, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 20000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE20000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 400, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 147.6, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 20000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE20000.00", + "openInterest": 62, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 405, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 575, + "totalSellQuantity": 525, + "bidQty": 550, + "bidprice": 145.35, + "askQty": 25, + "askPrice": 750, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 20000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 20000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE20000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 325, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 144.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 21000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21000.00", + "openInterest": 24062, + "changeinOpenInterest": 70, + "pchangeinOpenInterest": 0.291763921307102, + "totalTradedVolume": 831, + "impliedVolatility": 0, + "lastPrice": 3015.05, + "change": 509.4, + "pChange": 20.3300540777842, + "totalBuyQuantity": 6850, + "totalSellQuantity": 6550, + "bidQty": 25, + "bidprice": 3005.95, + "askQty": 25, + "askPrice": 3066.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21000.00", + "openInterest": 100131, + "changeinOpenInterest": -1955, + "pchangeinOpenInterest": -1.91505201496777, + "totalTradedVolume": 53009, + "impliedVolatility": 23.96, + "lastPrice": 18, + "change": -9.55, + "pChange": -34.6642468239565, + "totalBuyQuantity": 55750, + "totalSellQuantity": 32775, + "bidQty": 25, + "bidprice": 17.65, + "askQty": 1500, + "askPrice": 18.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "27-Mar-2025", + "CE": { + "strikePrice": 21000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE21000.00", + "openInterest": 610, + "changeinOpenInterest": 46, + "pchangeinOpenInterest": 8.15602836879433, + "totalTradedVolume": 77, + "impliedVolatility": 0, + "lastPrice": 3360, + "change": 458.75, + "pChange": 15.8121499353727, + "totalBuyQuantity": 700, + "totalSellQuantity": 975, + "bidQty": 25, + "bidprice": 3331.1, + "askQty": 25, + "askPrice": 3384.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE21000.00", + "openInterest": 13678, + "changeinOpenInterest": 140, + "pchangeinOpenInterest": 1.03412616339193, + "totalTradedVolume": 4670, + "impliedVolatility": 18.65, + "lastPrice": 70.15, + "change": -22.75, + "pChange": -24.4886975242196, + "totalBuyQuantity": 24225, + "totalSellQuantity": 12625, + "bidQty": 50, + "bidprice": 71.1, + "askQty": 25, + "askPrice": 72.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 21000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE21000.00", + "openInterest": 1123, + "changeinOpenInterest": 54, + "pchangeinOpenInterest": 5.05144995322732, + "totalTradedVolume": 200, + "impliedVolatility": 18.54, + "lastPrice": 134, + "change": -25.6, + "pChange": -16.0401002506266, + "totalBuyQuantity": 2050, + "totalSellQuantity": 3525, + "bidQty": 25, + "bidprice": 134, + "askQty": 675, + "askPrice": 134.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "25-Sep-2025", + "PE": { + "strikePrice": 21000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE21000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 112.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 21000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE21000.00", + "openInterest": 1223, + "changeinOpenInterest": 3, + "pchangeinOpenInterest": 0.245901639344262, + "totalTradedVolume": 170, + "impliedVolatility": 19.47, + "lastPrice": 254, + "change": -38.9, + "pChange": -13.2809832707409, + "totalBuyQuantity": 3975, + "totalSellQuantity": 1400, + "bidQty": 25, + "bidprice": 250, + "askQty": 325, + "askPrice": 254, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE21000.00", + "openInterest": 15, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 4148, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 4001, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 21000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE21000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 550, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 191.45, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 21000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE21000.00", + "openInterest": 28, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 333.65, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 800, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 222.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 21000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE21000.00", + "openInterest": 8, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 500, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 233.6, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 21000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE21000.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 582.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 237.45, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 21000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE21000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 234.85, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 21000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE21000.00", + "openInterest": 49, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 490, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 25, + "bidQty": 250, + "bidprice": 228.8, + "askQty": 25, + "askPrice": 990, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 21000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE21000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 220.3, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21600, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 21600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21600.00", + "openInterest": 170799, + "changeinOpenInterest": 170799, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1251412, + "impliedVolatility": 32.5, + "lastPrice": 2.05, + "change": -12.35, + "pChange": -85.7638888888889, + "totalBuyQuantity": 1114350, + "totalSellQuantity": 99125, + "bidQty": 475, + "bidprice": 2.05, + "askQty": 1050, + "askPrice": 2.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2164.8, + "askQty": 1000, + "askPrice": 2433.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21600, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 21600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE21600.00", + "openInterest": 1518, + "changeinOpenInterest": 1518, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8968, + "impliedVolatility": 25.96, + "lastPrice": 6.35, + "change": 2.5, + "pChange": 64.9350649350649, + "totalBuyQuantity": 24975, + "totalSellQuantity": 5300, + "bidQty": 1350, + "bidprice": 4.85, + "askQty": 1350, + "askPrice": 6.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2074.85, + "askQty": 1000, + "askPrice": 2602.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21600, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 21600, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 11025, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 6.6, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21600, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 21600, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5675, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21600, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 21600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1943.9, + "askQty": 1000, + "askPrice": 2637.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21600.00", + "openInterest": 1725, + "changeinOpenInterest": 1725, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 7762, + "impliedVolatility": 21.28, + "lastPrice": 26.45, + "change": 23.65, + "pChange": 844.642857142857, + "totalBuyQuantity": 14625, + "totalSellQuantity": 1975, + "bidQty": 125, + "bidprice": 23.8, + "askQty": 1800, + "askPrice": 27.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21600, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 21600, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6900, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21600, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 21600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 925, + "totalSellQuantity": 50, + "bidQty": 900, + "bidprice": 41.5, + "askQty": 50, + "askPrice": 65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 2091.8, + "askQty": 1775, + "askPrice": 2878.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21650, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 21650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2117.25, + "askQty": 1000, + "askPrice": 2382.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21650.00", + "openInterest": 27527, + "changeinOpenInterest": 27527, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 352050, + "impliedVolatility": 32.29, + "lastPrice": 2.3, + "change": -13.25, + "pChange": -85.2090032154341, + "totalBuyQuantity": 127825, + "totalSellQuantity": 31150, + "bidQty": 600, + "bidprice": 2.2, + "askQty": 1500, + "askPrice": 2.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21650, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 21650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE21650.00", + "openInterest": 158, + "changeinOpenInterest": 158, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 461, + "impliedVolatility": 25.52, + "lastPrice": 6.45, + "change": 2.05, + "pChange": 46.5909090909091, + "totalBuyQuantity": 17775, + "totalSellQuantity": 4000, + "bidQty": 50, + "bidprice": 5.35, + "askQty": 200, + "askPrice": 6.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE21650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2250, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2040.5, + "askQty": 1000, + "askPrice": 2549.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21650, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 21650, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE21650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 14075, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 8.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21650, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 21650, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE21650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4650, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21650, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 21650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1000, + "totalSellQuantity": 2775, + "bidQty": 1000, + "bidprice": 1936.2, + "askQty": 1000, + "askPrice": 2613, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21650.00", + "openInterest": 117, + "changeinOpenInterest": 117, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 990, + "impliedVolatility": 21.28, + "lastPrice": 28.9, + "change": 25.8, + "pChange": 832.258064516129, + "totalBuyQuantity": 13175, + "totalSellQuantity": 0, + "bidQty": 1500, + "bidprice": 23, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21650, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 21650, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE21650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6225, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 12, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21650, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 21650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE21650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 2045.65, + "askQty": 1775, + "askPrice": 2823.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE21650.00", + "openInterest": 346, + "changeinOpenInterest": 346, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 365, + "impliedVolatility": 18.32, + "lastPrice": 54.75, + "change": 12.9, + "pChange": 30.8243727598566, + "totalBuyQuantity": 900, + "totalSellQuantity": 2225, + "bidQty": 900, + "bidprice": 39.5, + "askQty": 50, + "askPrice": 68.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21700, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 21700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21700.00", + "openInterest": 318402, + "changeinOpenInterest": 56264, + "pchangeinOpenInterest": 21.4635039559316, + "totalTradedVolume": 969104, + "impliedVolatility": 32.11, + "lastPrice": 2.6, + "change": -1.65, + "pChange": -38.8235294117647, + "totalBuyQuantity": 1143850, + "totalSellQuantity": 111500, + "bidQty": 2100, + "bidprice": 2.5, + "askQty": 1200, + "askPrice": 2.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21700.00", + "openInterest": 9, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 6, + "impliedVolatility": 0, + "lastPrice": 2235, + "change": 545, + "pChange": 32.2485207100592, + "totalBuyQuantity": 5550, + "totalSellQuantity": 5550, + "bidQty": 225, + "bidprice": 2142.9, + "askQty": 75, + "askPrice": 2241.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21700, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 21700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE21700.00", + "openInterest": 2902, + "changeinOpenInterest": 1434, + "pchangeinOpenInterest": 97.6839237057221, + "totalTradedVolume": 11868, + "impliedVolatility": 25.38, + "lastPrice": 7.1, + "change": -3.6, + "pChange": -33.6448598130841, + "totalBuyQuantity": 37925, + "totalSellQuantity": 6250, + "bidQty": 250, + "bidprice": 7.15, + "askQty": 1350, + "askPrice": 7.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE21700.00", + "openInterest": 14, + "changeinOpenInterest": 8, + "pchangeinOpenInterest": 133.333333333333, + "totalTradedVolume": 8, + "impliedVolatility": 0, + "lastPrice": 2035, + "change": 335, + "pChange": 19.7058823529412, + "totalBuyQuantity": 3300, + "totalSellQuantity": 3175, + "bidQty": 150, + "bidprice": 2218.75, + "askQty": 150, + "askPrice": 2393.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21700, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 21700, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE21700.00", + "openInterest": 212, + "changeinOpenInterest": 111, + "pchangeinOpenInterest": 109.90099009901, + "totalTradedVolume": 301, + "impliedVolatility": 22.86, + "lastPrice": 13, + "change": -9.75, + "pChange": -42.8571428571429, + "totalBuyQuantity": 27350, + "totalSellQuantity": 825, + "bidQty": 100, + "bidprice": 12, + "askQty": 125, + "askPrice": 16.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21700, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 21700, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE21700.00", + "openInterest": 15, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 34.75, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8875, + "totalSellQuantity": 25, + "bidQty": 750, + "bidprice": 10.4, + "askQty": 25, + "askPrice": 27.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21700, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 21700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 425, + "bidprice": 1991.45, + "askQty": 1775, + "askPrice": 2547.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 10800, + "totalSellQuantity": 0, + "bidQty": 400, + "bidprice": 26.3, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21700, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 21700, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE21700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4500, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 17, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21700, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 21700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE21700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1974.25, + "askQty": 1775, + "askPrice": 2779.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE21700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2300, + "totalSellQuantity": 300, + "bidQty": 200, + "bidprice": 44.6, + "askQty": 300, + "askPrice": 95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 21750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2041.55, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 1775, + "bidprice": 1919.5, + "askQty": 1000, + "askPrice": 2250.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21750.00", + "openInterest": 52721, + "changeinOpenInterest": 16931, + "pchangeinOpenInterest": 47.3065101983794, + "totalTradedVolume": 185028, + "impliedVolatility": 31.66, + "lastPrice": 2.75, + "change": -1.8, + "pChange": -39.5604395604396, + "totalBuyQuantity": 132800, + "totalSellQuantity": 19900, + "bidQty": 50, + "bidprice": 2.65, + "askQty": 275, + "askPrice": 2.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21750, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 21750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE21750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1944.45, + "askQty": 1000, + "askPrice": 2448.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE21750.00", + "openInterest": 135, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -1.45985401459854, + "totalTradedVolume": 1349, + "impliedVolatility": 25.08, + "lastPrice": 7.5, + "change": -7.5, + "pChange": -50, + "totalBuyQuantity": 30525, + "totalSellQuantity": 2075, + "bidQty": 275, + "bidprice": 5.7, + "askQty": 275, + "askPrice": 7.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21750, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 21750, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE21750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 16900, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 11.3, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21750, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 21750, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE21750.00", + "openInterest": 16, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 33.3333333333333, + "totalTradedVolume": 5, + "impliedVolatility": 21.34, + "lastPrice": 20.95, + "change": -11.3, + "pChange": -35.0387596899225, + "totalBuyQuantity": 9125, + "totalSellQuantity": 25, + "bidQty": 25, + "bidprice": 20, + "askQty": 25, + "askPrice": 29.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21750, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 21750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1425, + "totalSellQuantity": 3675, + "bidQty": 425, + "bidprice": 1955.9, + "askQty": 900, + "askPrice": 2494.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21750.00", + "openInterest": 428, + "changeinOpenInterest": -300, + "pchangeinOpenInterest": -41.2087912087912, + "totalTradedVolume": 3005, + "impliedVolatility": 20.9, + "lastPrice": 31.45, + "change": -21.65, + "pChange": -40.7721280602637, + "totalBuyQuantity": 11600, + "totalSellQuantity": 2700, + "bidQty": 25, + "bidprice": 30, + "askQty": 1000, + "askPrice": 46.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21750, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 21750, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE21750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 16, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21750, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 21750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE21750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1925.25, + "askQty": 1775, + "askPrice": 2723.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE21750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 225, + "totalSellQuantity": 325, + "bidQty": 225, + "bidprice": 46.5, + "askQty": 325, + "askPrice": 71.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21800, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 21800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21800.00", + "openInterest": 146752, + "changeinOpenInterest": 30088, + "pchangeinOpenInterest": 25.7903037783721, + "totalTradedVolume": 456356, + "impliedVolatility": 31.13, + "lastPrice": 2.85, + "change": -1.75, + "pChange": -38.0434782608696, + "totalBuyQuantity": 224200, + "totalSellQuantity": 35350, + "bidQty": 750, + "bidprice": 2.75, + "askQty": 5075, + "askPrice": 3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21800.00", + "openInterest": 17, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 6, + "impliedVolatility": 0, + "lastPrice": 2070, + "change": 500, + "pChange": 31.8471337579618, + "totalBuyQuantity": 5525, + "totalSellQuantity": 5300, + "bidQty": 225, + "bidprice": 2057.3, + "askQty": 150, + "askPrice": 2115.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21800, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 21800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE21800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1899.05, + "askQty": 1000, + "askPrice": 2383.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE21800.00", + "openInterest": 2387, + "changeinOpenInterest": 851, + "pchangeinOpenInterest": 55.4036458333333, + "totalTradedVolume": 10637, + "impliedVolatility": 25, + "lastPrice": 8.4, + "change": -5.1, + "pChange": -37.7777777777778, + "totalBuyQuantity": 41075, + "totalSellQuantity": 3700, + "bidQty": 25, + "bidprice": 7.4, + "askQty": 1350, + "askPrice": 8.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21800, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 21800, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE21800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 19050, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 11.6, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21800, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 21800, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE21800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8050, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 13.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21800, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 21800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21800.00", + "openInterest": 6182, + "changeinOpenInterest": 1026, + "pchangeinOpenInterest": 19.8991466252909, + "totalTradedVolume": 17250, + "impliedVolatility": 20.6, + "lastPrice": 32, + "change": -23.5, + "pChange": -42.3423423423423, + "totalBuyQuantity": 8150, + "totalSellQuantity": 4150, + "bidQty": 250, + "bidprice": 33, + "askQty": 75, + "askPrice": 40.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21800.00", + "openInterest": 43, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1735, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2975, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 1911.7, + "askQty": 900, + "askPrice": 2408, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21800, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 21800, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE21800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6300, + "totalSellQuantity": 0, + "bidQty": 900, + "bidprice": 16, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21800, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 21800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE21800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2325, + "totalSellQuantity": 2200, + "bidQty": 550, + "bidprice": 1951.45, + "askQty": 1775, + "askPrice": 2925.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE21800.00", + "openInterest": 1766, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.0565930956423316, + "totalTradedVolume": 1366, + "impliedVolatility": 18.14, + "lastPrice": 64, + "change": -32.65, + "pChange": -33.781686497672, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3775, + "bidQty": 25, + "bidprice": 63.05, + "askQty": 150, + "askPrice": 64.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21850, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 21850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21850.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1510.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 1775, + "bidprice": 1823.7, + "askQty": 625, + "askPrice": 2113.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21850.00", + "openInterest": 29719, + "changeinOpenInterest": 6317, + "pchangeinOpenInterest": 26.9934193658662, + "totalTradedVolume": 115146, + "impliedVolatility": 30.53, + "lastPrice": 2.9, + "change": -1.9, + "pChange": -39.5833333333333, + "totalBuyQuantity": 129275, + "totalSellQuantity": 13625, + "bidQty": 600, + "bidprice": 2.7, + "askQty": 625, + "askPrice": 3.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21850, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 21850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE21850.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 17, + "change": 0.399999999999999, + "pChange": 2.40963855421686, + "totalBuyQuantity": 22925, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 7.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE21850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 525, + "totalSellQuantity": 2775, + "bidQty": 525, + "bidprice": 1780.2, + "askQty": 1000, + "askPrice": 2349.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21850, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 21850, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE21850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 16200, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 10.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21850, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 21850, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE21850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8700, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 11, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21850, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 21850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21850.00", + "openInterest": 190, + "changeinOpenInterest": -136, + "pchangeinOpenInterest": -41.7177914110429, + "totalTradedVolume": 211, + "impliedVolatility": 20.67, + "lastPrice": 35.45, + "change": -24.6, + "pChange": -40.9658617818485, + "totalBuyQuantity": 7775, + "totalSellQuantity": 3825, + "bidQty": 900, + "bidprice": 27.05, + "askQty": 150, + "askPrice": 46, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21850.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1822.9, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 1895.95, + "askQty": 900, + "askPrice": 2384.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21850, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 21850, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE21850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6150, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 16, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21850, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 21850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE21850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1873.7, + "askQty": 1775, + "askPrice": 2624.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE21850.00", + "openInterest": 81, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 87.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5025, + "totalSellQuantity": 900, + "bidQty": 25, + "bidprice": 60, + "askQty": 900, + "askPrice": 90.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21900, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 21900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21900.00", + "openInterest": 6, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 200, + "totalTradedVolume": 5, + "impliedVolatility": 0, + "lastPrice": 1972.15, + "change": 512.15, + "pChange": 35.0787671232877, + "totalBuyQuantity": 5450, + "totalSellQuantity": 5275, + "bidQty": 100, + "bidprice": 1987.55, + "askQty": 900, + "askPrice": 2055.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21900.00", + "openInterest": 64241, + "changeinOpenInterest": 19322, + "pchangeinOpenInterest": 43.0152051470425, + "totalTradedVolume": 284141, + "impliedVolatility": 30.11, + "lastPrice": 3.1, + "change": -2.3, + "pChange": -42.5925925925926, + "totalBuyQuantity": 115200, + "totalSellQuantity": 17000, + "bidQty": 125, + "bidprice": 3.1, + "askQty": 625, + "askPrice": 3.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21900, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 21900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE21900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 525, + "totalSellQuantity": 2775, + "bidQty": 525, + "bidprice": 1748.55, + "askQty": 1000, + "askPrice": 2293.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE21900.00", + "openInterest": 509, + "changeinOpenInterest": 409, + "pchangeinOpenInterest": 409, + "totalTradedVolume": 4187, + "impliedVolatility": 24.2, + "lastPrice": 8.9, + "change": -5.25, + "pChange": -37.1024734982332, + "totalBuyQuantity": 41275, + "totalSellQuantity": 5200, + "bidQty": 225, + "bidprice": 8.75, + "askQty": 525, + "askPrice": 10.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21900, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 21900, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE21900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 15175, + "totalSellQuantity": 0, + "bidQty": 700, + "bidprice": 12.3, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21900, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 21900, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE21900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8725, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 12, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21900, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 21900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21900.00", + "openInterest": 17, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1654, + "change": -0.25, + "pChange": -0.0151125887864591, + "totalBuyQuantity": 3200, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 1815.15, + "askQty": 1775, + "askPrice": 2355.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21900.00", + "openInterest": 4772, + "changeinOpenInterest": 2397, + "pchangeinOpenInterest": 100.926315789474, + "totalTradedVolume": 8329, + "impliedVolatility": 20.48, + "lastPrice": 37, + "change": -25.35, + "pChange": -40.6575781876504, + "totalBuyQuantity": 14925, + "totalSellQuantity": 1075, + "bidQty": 50, + "bidprice": 29.05, + "askQty": 50, + "askPrice": 42, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21900, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 21900, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE21900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8400, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 16, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21900, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 21900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE21900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2650, + "totalSellQuantity": 2350, + "bidQty": 875, + "bidprice": 1901.15, + "askQty": 1775, + "askPrice": 2653.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE21900.00", + "openInterest": 1131, + "changeinOpenInterest": 87, + "pchangeinOpenInterest": 8.33333333333333, + "totalTradedVolume": 267, + "impliedVolatility": 17.86, + "lastPrice": 68.4, + "change": -34.75, + "pChange": -33.6888027144935, + "totalBuyQuantity": 3825, + "totalSellQuantity": 2675, + "bidQty": 50, + "bidprice": 62.1, + "askQty": 50, + "askPrice": 89.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21950, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 21950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21950.00", + "openInterest": 13536, + "changeinOpenInterest": 705, + "pchangeinOpenInterest": 5.49450549450549, + "totalTradedVolume": 90336, + "impliedVolatility": 29.62, + "lastPrice": 3.25, + "change": -2.5, + "pChange": -43.4782608695652, + "totalBuyQuantity": 105275, + "totalSellQuantity": 17425, + "bidQty": 750, + "bidprice": 2.8, + "askQty": 625, + "askPrice": 3.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21950.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1534.8, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 625, + "bidprice": 1879.35, + "askQty": 1000, + "askPrice": 2008.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21950, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 21950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE21950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1718.6, + "askQty": 1000, + "askPrice": 2281.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE21950.00", + "openInterest": 224, + "changeinOpenInterest": 30, + "pchangeinOpenInterest": 15.4639175257732, + "totalTradedVolume": 926, + "impliedVolatility": 24.11, + "lastPrice": 9.95, + "change": -7.25, + "pChange": -42.1511627906977, + "totalBuyQuantity": 49225, + "totalSellQuantity": 3050, + "bidQty": 1000, + "bidprice": 8.5, + "askQty": 275, + "askPrice": 11.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21950, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 21950, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE21950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13550, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 13.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21950, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 21950, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE21950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8700, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 10.4, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21950, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 21950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE21950.00", + "openInterest": 305, + "changeinOpenInterest": 104, + "pchangeinOpenInterest": 51.7412935323383, + "totalTradedVolume": 425, + "impliedVolatility": 20.31, + "lastPrice": 38.8, + "change": -26.55, + "pChange": -40.6273909716909, + "totalBuyQuantity": 8600, + "totalSellQuantity": 3050, + "bidQty": 75, + "bidprice": 30, + "askQty": 275, + "askPrice": 46.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE21950.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1729.3, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 1769.95, + "askQty": 900, + "askPrice": 2438.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21950, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 21950, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE21950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 9150, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 10.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21950, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 21950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE21950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1784.05, + "askQty": 1775, + "askPrice": 2522.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE21950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1425, + "totalSellQuantity": 200, + "bidQty": 25, + "bidprice": 65.45, + "askQty": 100, + "askPrice": 114.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22000.00", + "openInterest": 1560, + "changeinOpenInterest": -130, + "pchangeinOpenInterest": -7.69230769230769, + "totalTradedVolume": 1067, + "impliedVolatility": 0, + "lastPrice": 1895.65, + "change": 544.55, + "pChange": 40.304196580564, + "totalBuyQuantity": 7450, + "totalSellQuantity": 7000, + "bidQty": 75, + "bidprice": 1899.65, + "askQty": 250, + "askPrice": 1911.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22000.00", + "openInterest": 229969, + "changeinOpenInterest": 64138, + "pchangeinOpenInterest": 38.6767250996496, + "totalTradedVolume": 1098157, + "impliedVolatility": 29.28, + "lastPrice": 3.55, + "change": -3.05, + "pChange": -46.2121212121212, + "totalBuyQuantity": 1458850, + "totalSellQuantity": 117150, + "bidQty": 225, + "bidprice": 3.5, + "askQty": 325, + "askPrice": 3.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22000.00", + "openInterest": 17787, + "changeinOpenInterest": 8738, + "pchangeinOpenInterest": 96.5631561498508, + "totalTradedVolume": 57165, + "impliedVolatility": 23.72, + "lastPrice": 10.3, + "change": -9.3, + "pChange": -47.4489795918367, + "totalBuyQuantity": 126150, + "totalSellQuantity": 27625, + "bidQty": 1050, + "bidprice": 10.3, + "askQty": 75, + "askPrice": 10.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22000.00", + "openInterest": 21, + "changeinOpenInterest": 6, + "pchangeinOpenInterest": 40, + "totalTradedVolume": 30, + "impliedVolatility": 0, + "lastPrice": 1978, + "change": 567.95, + "pChange": 40.2787135207971, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3600, + "bidQty": 200, + "bidprice": 1783.95, + "askQty": 25, + "askPrice": 1979.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22000, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22000.00", + "openInterest": 1370, + "changeinOpenInterest": 643, + "pchangeinOpenInterest": 88.4456671251719, + "totalTradedVolume": 3039, + "impliedVolatility": 21.33, + "lastPrice": 17.35, + "change": -17.5, + "pChange": -50.2152080344333, + "totalBuyQuantity": 30250, + "totalSellQuantity": 1950, + "bidQty": 250, + "bidprice": 17.35, + "askQty": 50, + "askPrice": 22.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22000, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8700, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 15.7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 22000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22000.00", + "openInterest": 22609, + "changeinOpenInterest": 1199, + "pchangeinOpenInterest": 5.60018682858477, + "totalTradedVolume": 3062, + "impliedVolatility": 0, + "lastPrice": 2050.65, + "change": 500.7, + "pChange": 32.304267879609, + "totalBuyQuantity": 6525, + "totalSellQuantity": 7925, + "bidQty": 250, + "bidprice": 2053.45, + "askQty": 125, + "askPrice": 2075.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22000.00", + "openInterest": 147496, + "changeinOpenInterest": 7497, + "pchangeinOpenInterest": 5.35503825027322, + "totalTradedVolume": 116297, + "impliedVolatility": 20.05, + "lastPrice": 39.95, + "change": -29.6, + "pChange": -42.5593098490295, + "totalBuyQuantity": 59950, + "totalSellQuantity": 47300, + "bidQty": 50, + "bidprice": 39.95, + "askQty": 50, + "askPrice": 41.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22000, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 16050, + "totalSellQuantity": 0, + "bidQty": 900, + "bidprice": 17, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22000.00", + "openInterest": 124, + "changeinOpenInterest": 47, + "pchangeinOpenInterest": 61.038961038961, + "totalTradedVolume": 80, + "impliedVolatility": 0, + "lastPrice": 2200, + "change": 459.8, + "pChange": 26.4222503160556, + "totalBuyQuantity": 3825, + "totalSellQuantity": 3625, + "bidQty": 650, + "bidprice": 2217.1, + "askQty": 25, + "askPrice": 2250, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22000.00", + "openInterest": 13819, + "changeinOpenInterest": 4458, + "pchangeinOpenInterest": 47.6231171883346, + "totalTradedVolume": 14779, + "impliedVolatility": 17.75, + "lastPrice": 76.05, + "change": -41.45, + "pChange": -35.2765957446809, + "totalBuyQuantity": 18350, + "totalSellQuantity": 5350, + "bidQty": 200, + "bidprice": 76, + "askQty": 325, + "askPrice": 77, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "27-Mar-2025", + "CE": { + "strikePrice": 22000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE22000.00", + "openInterest": 7057, + "changeinOpenInterest": 253, + "pchangeinOpenInterest": 3.71840094062316, + "totalTradedVolume": 2129, + "impliedVolatility": 0, + "lastPrice": 2456.3, + "change": 414.05, + "pChange": 20.2742073693231, + "totalBuyQuantity": 13150, + "totalSellQuantity": 1575, + "bidQty": 675, + "bidprice": 2446.25, + "askQty": 25, + "askPrice": 2492.7, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE22000.00", + "openInterest": 31818, + "changeinOpenInterest": -1297, + "pchangeinOpenInterest": -3.91665408425185, + "totalTradedVolume": 11366, + "impliedVolatility": 17.23, + "lastPrice": 137, + "change": -50.1, + "pChange": -26.7771245323356, + "totalBuyQuantity": 26950, + "totalSellQuantity": 10000, + "bidQty": 25, + "bidprice": 135.2, + "askQty": 300, + "askPrice": 141.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 22000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE22000.00", + "openInterest": 5827, + "changeinOpenInterest": 174, + "pchangeinOpenInterest": 3.0780116752167, + "totalTradedVolume": 868, + "impliedVolatility": 17.46, + "lastPrice": 222, + "change": -55.15, + "pChange": -19.8989716759877, + "totalBuyQuantity": 3650, + "totalSellQuantity": 2200, + "bidQty": 25, + "bidprice": 217.2, + "askQty": 25, + "askPrice": 226.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "25-Sep-2025", + "PE": { + "strikePrice": 22000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE22000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 125.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 22000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE22000.00", + "openInterest": 9789, + "changeinOpenInterest": 374, + "pchangeinOpenInterest": 3.97238449283059, + "totalTradedVolume": 986, + "impliedVolatility": 18.83, + "lastPrice": 370, + "change": -75.4, + "pChange": -16.9286035024697, + "totalBuyQuantity": 4100, + "totalSellQuantity": 3625, + "bidQty": 900, + "bidprice": 366.25, + "askQty": 950, + "askPrice": 370, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE22000.00", + "openInterest": 139, + "changeinOpenInterest": 24, + "pchangeinOpenInterest": 20.8695652173913, + "totalTradedVolume": 27, + "impliedVolatility": 0, + "lastPrice": 3553.6, + "change": 378.6, + "pChange": 11.9244094488189, + "totalBuyQuantity": 75, + "totalSellQuantity": 775, + "bidQty": 50, + "bidprice": 3534.85, + "askQty": 25, + "askPrice": 3550, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 22000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE22000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 550, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 346.95, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 22000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE22000.00", + "openInterest": 8, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 374.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 800, + "totalSellQuantity": 75, + "bidQty": 250, + "bidprice": 373.7, + "askQty": 75, + "askPrice": 595, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 22000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE22000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 275, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 376.2, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 22000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE22000.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 329, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 369.4, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 22000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE22000.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 520.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 356.45, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 22000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE22000.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 446.15, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 340.45, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 22000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE22000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 322.6, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22050, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22050.00", + "openInterest": 8676, + "changeinOpenInterest": -823, + "pchangeinOpenInterest": -8.66406990209496, + "totalTradedVolume": 166227, + "impliedVolatility": 28.54, + "lastPrice": 3.5, + "change": -3.6, + "pChange": -50.7042253521127, + "totalBuyQuantity": 104050, + "totalSellQuantity": 11450, + "bidQty": 225, + "bidprice": 3.45, + "askQty": 1250, + "askPrice": 3.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22050.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1483.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 1797.55, + "askQty": 625, + "askPrice": 1906.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22050, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 2775, + "bidprice": 1653.95, + "askQty": 1000, + "askPrice": 2164.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22050.00", + "openInterest": 291, + "changeinOpenInterest": 88, + "pchangeinOpenInterest": 43.3497536945813, + "totalTradedVolume": 1169, + "impliedVolatility": 23.18, + "lastPrice": 10.25, + "change": -11.1, + "pChange": -51.9906323185012, + "totalBuyQuantity": 48475, + "totalSellQuantity": 3175, + "bidQty": 400, + "bidprice": 9.55, + "askQty": 400, + "askPrice": 12.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22050, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22050, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22050.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 21.44, + "lastPrice": 20, + "change": 10, + "pChange": 100, + "totalBuyQuantity": 14325, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 16, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22050, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22050, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 9700, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 11.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22050, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8100, + "totalSellQuantity": 200, + "bidQty": 600, + "bidprice": 37.1, + "askQty": 200, + "askPrice": 61, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22050.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1636.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 2775, + "bidQty": 425, + "bidprice": 1731.35, + "askQty": 1000, + "askPrice": 2094.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22050, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22050, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5100, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 17.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22050, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2650, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1700.75, + "askQty": 1775, + "askPrice": 2419.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1600, + "totalSellQuantity": 200, + "bidQty": 300, + "bidprice": 51.15, + "askQty": 100, + "askPrice": 137.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22100, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22100.00", + "openInterest": 83, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 2.46913580246914, + "totalTradedVolume": 5, + "impliedVolatility": 0, + "lastPrice": 1809.7, + "change": 535, + "pChange": 41.9706597630815, + "totalBuyQuantity": 5700, + "totalSellQuantity": 5950, + "bidQty": 225, + "bidprice": 1749.5, + "askQty": 50, + "askPrice": 1823.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22100.00", + "openInterest": 40647, + "changeinOpenInterest": 20424, + "pchangeinOpenInterest": 100.993917816348, + "totalTradedVolume": 390397, + "impliedVolatility": 27.9, + "lastPrice": 3.55, + "change": -4.4, + "pChange": -55.3459119496855, + "totalBuyQuantity": 172575, + "totalSellQuantity": 12225, + "bidQty": 200, + "bidprice": 3.55, + "askQty": 625, + "askPrice": 3.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22100, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22100.00", + "openInterest": 587, + "changeinOpenInterest": 413, + "pchangeinOpenInterest": 237.35632183908, + "totalTradedVolume": 3524, + "impliedVolatility": 22.96, + "lastPrice": 11.1, + "change": -10.45, + "pChange": -48.491879350348, + "totalBuyQuantity": 46025, + "totalSellQuantity": 1875, + "bidQty": 600, + "bidprice": 10.65, + "askQty": 525, + "askPrice": 14.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 2775, + "bidprice": 1622.6, + "askQty": 1000, + "askPrice": 2071.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22100, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22100, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13675, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 16.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22100, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22100, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 9475, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 20.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22100, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8675, + "totalSellQuantity": 200, + "bidQty": 600, + "bidprice": 38, + "askQty": 200, + "askPrice": 60, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22100.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1575.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 0, + "bidQty": 425, + "bidprice": 1676.4, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22100, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22100, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5100, + "totalSellQuantity": 150, + "bidQty": 150, + "bidprice": 45.85, + "askQty": 150, + "askPrice": 145, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22100, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22100.00", + "openInterest": 548, + "changeinOpenInterest": 31, + "pchangeinOpenInterest": 5.99613152804642, + "totalTradedVolume": 75, + "impliedVolatility": 17.41, + "lastPrice": 80.35, + "change": -48.4, + "pChange": -37.5922330097087, + "totalBuyQuantity": 7800, + "totalSellQuantity": 100, + "bidQty": 100, + "bidprice": 63.6, + "askQty": 100, + "askPrice": 98.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1573.6, + "askQty": 1775, + "askPrice": 2393.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22150, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22150.00", + "openInterest": 8, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1196.35, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4950, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 1702.75, + "askQty": 625, + "askPrice": 1805.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22150.00", + "openInterest": 12825, + "changeinOpenInterest": 3634, + "pchangeinOpenInterest": 39.5386791426395, + "totalTradedVolume": 107828, + "impliedVolatility": 27.67, + "lastPrice": 4, + "change": -4.65, + "pChange": -53.757225433526, + "totalBuyQuantity": 104825, + "totalSellQuantity": 7525, + "bidQty": 125, + "bidprice": 3.85, + "askQty": 1125, + "askPrice": 4.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22150, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22150.00", + "openInterest": 581, + "changeinOpenInterest": 93, + "pchangeinOpenInterest": 19.0573770491803, + "totalTradedVolume": 2939, + "impliedVolatility": 22.85, + "lastPrice": 12.35, + "change": -11.4, + "pChange": -48, + "totalBuyQuantity": 31150, + "totalSellQuantity": 3575, + "bidQty": 525, + "bidprice": 10.6, + "askQty": 525, + "askPrice": 24.05, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 2775, + "bidprice": 1591.3, + "askQty": 1775, + "askPrice": 2073.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22150, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22150, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13200, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 16.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22150, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22150, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22150, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8700, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 13, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22150, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 22150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22150.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1544.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3250, + "totalSellQuantity": 3100, + "bidQty": 475, + "bidprice": 1632.6, + "askQty": 325, + "askPrice": 2071.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22150.00", + "openInterest": 146, + "changeinOpenInterest": -80, + "pchangeinOpenInterest": -35.3982300884956, + "totalTradedVolume": 587, + "impliedVolatility": 18.93, + "lastPrice": 40.35, + "change": -39.25, + "pChange": -49.3090452261307, + "totalBuyQuantity": 6150, + "totalSellQuantity": 1275, + "bidQty": 25, + "bidprice": 40, + "askQty": 900, + "askPrice": 58.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22150, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22150, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5475, + "totalSellQuantity": 0, + "bidQty": 225, + "bidprice": 26.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22150, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22150.00", + "openInterest": 538, + "changeinOpenInterest": -4, + "pchangeinOpenInterest": -0.738007380073801, + "totalTradedVolume": 157, + "impliedVolatility": 16.77, + "lastPrice": 74.65, + "change": -59.35, + "pChange": -44.2910447761194, + "totalBuyQuantity": 950, + "totalSellQuantity": 900, + "bidQty": 900, + "bidprice": 50.15, + "askQty": 425, + "askPrice": 112.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1654.4, + "askQty": 1775, + "askPrice": 2402.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22200.00", + "openInterest": 111586, + "changeinOpenInterest": 52617, + "pchangeinOpenInterest": 89.2282385660262, + "totalTradedVolume": 710783, + "impliedVolatility": 26.92, + "lastPrice": 3.95, + "change": -5.6, + "pChange": -58.6387434554974, + "totalBuyQuantity": 114975, + "totalSellQuantity": 28875, + "bidQty": 50, + "bidprice": 3.95, + "askQty": 1125, + "askPrice": 4.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22200.00", + "openInterest": 42, + "changeinOpenInterest": 3, + "pchangeinOpenInterest": 7.69230769230769, + "totalTradedVolume": 4, + "impliedVolatility": 0, + "lastPrice": 1530, + "change": 368.9, + "pChange": 31.7715959004392, + "totalBuyQuantity": 5600, + "totalSellQuantity": 5950, + "bidQty": 75, + "bidprice": 1698.3, + "askQty": 100, + "askPrice": 1719.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22200, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 625, + "totalSellQuantity": 2775, + "bidQty": 625, + "bidprice": 1560.2, + "askQty": 1775, + "askPrice": 2015.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22200.00", + "openInterest": 2713, + "changeinOpenInterest": 219, + "pchangeinOpenInterest": 8.78107457898958, + "totalTradedVolume": 19485, + "impliedVolatility": 22.57, + "lastPrice": 13.2, + "change": -12.9, + "pChange": -49.4252873563218, + "totalBuyQuantity": 51425, + "totalSellQuantity": 4325, + "bidQty": 300, + "bidprice": 12.8, + "askQty": 650, + "askPrice": 16.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22200, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22200, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 12325, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 17, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22200, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22200, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22200, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 7300, + "totalSellQuantity": 150, + "bidQty": 100, + "bidprice": 17.25, + "askQty": 150, + "askPrice": 83.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22200, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22200.00", + "openInterest": 6706, + "changeinOpenInterest": 531, + "pchangeinOpenInterest": 8.59919028340081, + "totalTradedVolume": 20049, + "impliedVolatility": 19.35, + "lastPrice": 48.35, + "change": -35.85, + "pChange": -42.5771971496437, + "totalBuyQuantity": 6325, + "totalSellQuantity": 3500, + "bidQty": 50, + "bidprice": 44.6, + "askQty": 100, + "askPrice": 55.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22200.00", + "openInterest": 8, + "changeinOpenInterest": 3, + "pchangeinOpenInterest": 60, + "totalTradedVolume": 3, + "impliedVolatility": 0, + "lastPrice": 1570, + "change": 70.3499999999999, + "pChange": 4.69109458873737, + "totalBuyQuantity": 3750, + "totalSellQuantity": 4725, + "bidQty": 75, + "bidprice": 1820.75, + "askQty": 75, + "askPrice": 1949.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22200, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22200, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22200.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 21.39, + "lastPrice": 93.9, + "change": 4.45, + "pChange": 4.97484628283958, + "totalBuyQuantity": 6900, + "totalSellQuantity": 375, + "bidQty": 150, + "bidprice": 26.1, + "askQty": 75, + "askPrice": 128.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22200, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 2675, + "bidQty": 1775, + "bidprice": 1486.15, + "askQty": 1775, + "askPrice": 2454.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22200.00", + "openInterest": 1249, + "changeinOpenInterest": 71, + "pchangeinOpenInterest": 6.02716468590832, + "totalTradedVolume": 589, + "impliedVolatility": 17.33, + "lastPrice": 89.85, + "change": -47.4, + "pChange": -34.5355191256831, + "totalBuyQuantity": 2225, + "totalSellQuantity": 425, + "bidQty": 25, + "bidprice": 75, + "askQty": 25, + "askPrice": 110.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22250, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22250.00", + "openInterest": 23354, + "changeinOpenInterest": 7360, + "pchangeinOpenInterest": 46.0172564711767, + "totalTradedVolume": 165455, + "impliedVolatility": 26.72, + "lastPrice": 4.5, + "change": -6.25, + "pChange": -58.1395348837209, + "totalBuyQuantity": 169450, + "totalSellQuantity": 24125, + "bidQty": 250, + "bidprice": 4.45, + "askQty": 525, + "askPrice": 4.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22250.00", + "openInterest": 10, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1290.35, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 1775, + "bidprice": 1502.3, + "askQty": 1000, + "askPrice": 1716.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22250, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 600, + "totalSellQuantity": 2775, + "bidQty": 600, + "bidprice": 1528.95, + "askQty": 1000, + "askPrice": 1949.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22250.00", + "openInterest": 865, + "changeinOpenInterest": 185, + "pchangeinOpenInterest": 27.2058823529412, + "totalTradedVolume": 2604, + "impliedVolatility": 22.34, + "lastPrice": 14.25, + "change": -12.15, + "pChange": -46.0227272727273, + "totalBuyQuantity": 32300, + "totalSellQuantity": 3750, + "bidQty": 525, + "bidprice": 12.05, + "askQty": 525, + "askPrice": 21.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22250, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 22250, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22250, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 14150, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 18.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22250, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22250, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8750, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 27.7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22250, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 22250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22250.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1454.55, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3300, + "totalSellQuantity": 2775, + "bidQty": 525, + "bidprice": 1540.5, + "askQty": 1000, + "askPrice": 1934.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22250.00", + "openInterest": 317, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 86.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 950, + "totalSellQuantity": 1850, + "bidQty": 50, + "bidprice": 42.5, + "askQty": 900, + "askPrice": 58.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22250, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22250, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3900, + "totalSellQuantity": 0, + "bidQty": 150, + "bidprice": 25.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22250, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22250.00", + "openInterest": 66, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 125.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1175, + "totalSellQuantity": 1800, + "bidQty": 25, + "bidprice": 88, + "askQty": 1800, + "askPrice": 136.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22250.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1685, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1550.9, + "askQty": 1775, + "askPrice": 2216.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22300.00", + "openInterest": 142, + "changeinOpenInterest": 10, + "pchangeinOpenInterest": 7.57575757575758, + "totalTradedVolume": 45, + "impliedVolatility": 0, + "lastPrice": 1600, + "change": 538.15, + "pChange": 50.6804162546499, + "totalBuyQuantity": 5825, + "totalSellQuantity": 6050, + "bidQty": 275, + "bidprice": 1600.05, + "askQty": 900, + "askPrice": 1656.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22300.00", + "openInterest": 82519, + "changeinOpenInterest": 19315, + "pchangeinOpenInterest": 30.5597746978039, + "totalTradedVolume": 616706, + "impliedVolatility": 26.29, + "lastPrice": 4.85, + "change": -7.4, + "pChange": -60.4081632653061, + "totalBuyQuantity": 105100, + "totalSellQuantity": 25525, + "bidQty": 100, + "bidprice": 4.55, + "askQty": 1100, + "askPrice": 4.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22300, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22300, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22300.00", + "openInterest": 4, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 4, + "impliedVolatility": 0, + "lastPrice": 1435, + "change": -869.55, + "pChange": -37.7318782408713, + "totalBuyQuantity": 2875, + "totalSellQuantity": 2925, + "bidQty": 100, + "bidprice": 1635.9, + "askQty": 150, + "askPrice": 1809, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22300, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22300.00", + "openInterest": 4054, + "changeinOpenInterest": 1138, + "pchangeinOpenInterest": 39.0260631001372, + "totalTradedVolume": 25803, + "impliedVolatility": 22.34, + "lastPrice": 16.3, + "change": -15.2, + "pChange": -48.2539682539682, + "totalBuyQuantity": 45450, + "totalSellQuantity": 1525, + "bidQty": 1350, + "bidprice": 13.25, + "askQty": 1350, + "askPrice": 17.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22300, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22300, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22300.00", + "openInterest": 283, + "changeinOpenInterest": 259, + "pchangeinOpenInterest": 1079.16666666667, + "totalTradedVolume": 552, + "impliedVolatility": 20.36, + "lastPrice": 27.05, + "change": -26.5, + "pChange": -49.4864612511671, + "totalBuyQuantity": 14775, + "totalSellQuantity": 125, + "bidQty": 50, + "bidprice": 25, + "askQty": 25, + "askPrice": 31.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22300, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22300.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22300, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22300, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22300.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 11250, + "totalSellQuantity": 100, + "bidQty": 600, + "bidprice": 18.5, + "askQty": 100, + "askPrice": 97.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22300, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22300.00", + "openInterest": 9371, + "changeinOpenInterest": -185, + "pchangeinOpenInterest": -1.93595646714106, + "totalTradedVolume": 14959, + "impliedVolatility": 18.89, + "lastPrice": 52, + "change": -41.15, + "pChange": -44.1760601180891, + "totalBuyQuantity": 5000, + "totalSellQuantity": 3850, + "bidQty": 2525, + "bidprice": 50, + "askQty": 425, + "askPrice": 52, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22300.00", + "openInterest": 142, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1292.7, + "change": 1.54999999999995, + "pChange": 0.12004801920768, + "totalBuyQuantity": 4575, + "totalSellQuantity": 4575, + "bidQty": 900, + "bidprice": 1693.85, + "askQty": 900, + "askPrice": 1847.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22300, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22300, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22300.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3750, + "totalSellQuantity": 0, + "bidQty": 150, + "bidprice": 25.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22300, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22300, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22300.00", + "openInterest": 3096, + "changeinOpenInterest": 298, + "pchangeinOpenInterest": 10.650464617584, + "totalTradedVolume": 1234, + "impliedVolatility": 16.93, + "lastPrice": 93.95, + "change": -54.4, + "pChange": -36.670037074486, + "totalBuyQuantity": 925, + "totalSellQuantity": 3925, + "bidQty": 625, + "bidprice": 85.1, + "askQty": 1800, + "askPrice": 108.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22300, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22300.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2650, + "totalSellQuantity": 2675, + "bidQty": 1775, + "bidprice": 1389.3, + "askQty": 1775, + "askPrice": 2352.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22350.00", + "openInterest": 9141, + "changeinOpenInterest": -1037, + "pchangeinOpenInterest": -10.1886421693849, + "totalTradedVolume": 191795, + "impliedVolatility": 26.31, + "lastPrice": 5.85, + "change": -7.9, + "pChange": -57.4545454545455, + "totalBuyQuantity": 86650, + "totalSellQuantity": 18975, + "bidQty": 1175, + "bidprice": 5, + "askQty": 1125, + "askPrice": 5.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22350.00", + "openInterest": 6, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 0, + "lastPrice": 1444.15, + "change": 424.65, + "pChange": 41.6527709661599, + "totalBuyQuantity": 5050, + "totalSellQuantity": 5025, + "bidQty": 100, + "bidprice": 1537.8, + "askQty": 100, + "askPrice": 1571.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22350, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22350, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 2775, + "bidQty": 0, + "bidprice": 0, + "askQty": 1000, + "askPrice": 1841.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22350, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22350.00", + "openInterest": 3150, + "changeinOpenInterest": 2784, + "pchangeinOpenInterest": 760.655737704918, + "totalTradedVolume": 9295, + "impliedVolatility": 22.38, + "lastPrice": 18.75, + "change": -15.9, + "pChange": -45.8874458874459, + "totalBuyQuantity": 25775, + "totalSellQuantity": 1850, + "bidQty": 775, + "bidprice": 14.1, + "askQty": 775, + "askPrice": 29.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22350, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22350, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22350.00", + "openInterest": 40, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 49.15, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 15950, + "totalSellQuantity": 25, + "bidQty": 600, + "bidprice": 26.15, + "askQty": 25, + "askPrice": 49.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22350, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22350, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22350, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5725, + "totalSellQuantity": 100, + "bidQty": 25, + "bidprice": 30.55, + "askQty": 100, + "askPrice": 114.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22350, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22350.00", + "openInterest": 352, + "changeinOpenInterest": 106, + "pchangeinOpenInterest": 43.0894308943089, + "totalTradedVolume": 673, + "impliedVolatility": 18.75, + "lastPrice": 55.05, + "change": -43.4, + "pChange": -44.0832910106653, + "totalBuyQuantity": 4350, + "totalSellQuantity": 1950, + "bidQty": 25, + "bidprice": 50, + "askQty": 150, + "askPrice": 70.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22350.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1364.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 3675, + "bidQty": 425, + "bidprice": 1447.4, + "askQty": 900, + "askPrice": 1886.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22350, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22350, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3075, + "totalSellQuantity": 0, + "bidQty": 225, + "bidprice": 30.6, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22350, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22350, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1414.1, + "askQty": 1775, + "askPrice": 2137, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22350, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22350.00", + "openInterest": 40, + "changeinOpenInterest": -30, + "pchangeinOpenInterest": -42.8571428571429, + "totalTradedVolume": 34, + "impliedVolatility": 16.87, + "lastPrice": 99, + "change": -36.7, + "pChange": -27.0449521002211, + "totalBuyQuantity": 4400, + "totalSellQuantity": 375, + "bidQty": 900, + "bidprice": 83.15, + "askQty": 250, + "askPrice": 165, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22400, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22400.00", + "openInterest": 82588, + "changeinOpenInterest": 31251, + "pchangeinOpenInterest": 60.8742232697664, + "totalTradedVolume": 699939, + "impliedVolatility": 25.2, + "lastPrice": 5.3, + "change": -10.3, + "pChange": -66.025641025641, + "totalBuyQuantity": 83525, + "totalSellQuantity": 36175, + "bidQty": 250, + "bidprice": 5.3, + "askQty": 1150, + "askPrice": 6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22400.00", + "openInterest": 210, + "changeinOpenInterest": 33, + "pchangeinOpenInterest": 18.6440677966102, + "totalTradedVolume": 222, + "impliedVolatility": 0, + "lastPrice": 1476.45, + "change": 513.8, + "pChange": 53.3735002337298, + "totalBuyQuantity": 5850, + "totalSellQuantity": 5225, + "bidQty": 150, + "bidprice": 1501.1, + "askQty": 50, + "askPrice": 1514.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22400, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22400, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22400.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1167.65, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1091.3, + "askQty": 1000, + "askPrice": 1749.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22400, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22400.00", + "openInterest": 3876, + "changeinOpenInterest": 1484, + "pchangeinOpenInterest": 62.0401337792642, + "totalTradedVolume": 27517, + "impliedVolatility": 21.83, + "lastPrice": 18.85, + "change": -18.8, + "pChange": -49.933598937583, + "totalBuyQuantity": 37150, + "totalSellQuantity": 3825, + "bidQty": 1350, + "bidprice": 15.7, + "askQty": 1800, + "askPrice": 22.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22400, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22400, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22400.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 9875, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 27.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22400, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22400.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2076.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22400, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22400, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22400.00", + "openInterest": 54, + "changeinOpenInterest": 41, + "pchangeinOpenInterest": 315.384615384615, + "totalTradedVolume": 89, + "impliedVolatility": 19.33, + "lastPrice": 46.5, + "change": -26.8, + "pChange": -36.5620736698499, + "totalBuyQuantity": 10125, + "totalSellQuantity": 1125, + "bidQty": 50, + "bidprice": 43.1, + "askQty": 125, + "askPrice": 47.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22400, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 22400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22400.00", + "openInterest": 22, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1205.8, + "change": 1.89999999999986, + "pChange": 0.157820416978143, + "totalBuyQuantity": 4100, + "totalSellQuantity": 3675, + "bidQty": 425, + "bidprice": 1414.5, + "askQty": 1000, + "askPrice": 1795.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22400.00", + "openInterest": 10676, + "changeinOpenInterest": 1755, + "pchangeinOpenInterest": 19.6726824347046, + "totalTradedVolume": 22451, + "impliedVolatility": 18.81, + "lastPrice": 60.6, + "change": -44.2, + "pChange": -42.175572519084, + "totalBuyQuantity": 100, + "totalSellQuantity": 4075, + "bidQty": 25, + "bidprice": 55, + "askQty": 250, + "askPrice": 65.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22400, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22400, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22400.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2550, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 28.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22400, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22400, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22400.00", + "openInterest": 2060, + "changeinOpenInterest": 68, + "pchangeinOpenInterest": 3.4136546184739, + "totalTradedVolume": 767, + "impliedVolatility": 16.85, + "lastPrice": 104.95, + "change": -58.95, + "pChange": -35.967053081147, + "totalBuyQuantity": 400, + "totalSellQuantity": 125, + "bidQty": 100, + "bidprice": 100, + "askQty": 75, + "askPrice": 137.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22400, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22400.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 2675, + "bidQty": 1775, + "bidprice": 1369.15, + "askQty": 1775, + "askPrice": 2250.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22450, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22450.00", + "openInterest": 30606, + "changeinOpenInterest": 22246, + "pchangeinOpenInterest": 266.1004784689, + "totalTradedVolume": 303692, + "impliedVolatility": 24.72, + "lastPrice": 5.65, + "change": -11.85, + "pChange": -67.7142857142857, + "totalBuyQuantity": 92150, + "totalSellQuantity": 32950, + "bidQty": 50, + "bidprice": 5.65, + "askQty": 1000, + "askPrice": 6.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22450.00", + "openInterest": 655, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -0.30441400304414, + "totalTradedVolume": 90, + "impliedVolatility": 0, + "lastPrice": 1463.3, + "change": 543.9, + "pChange": 59.1581466173591, + "totalBuyQuantity": 5375, + "totalSellQuantity": 5325, + "bidQty": 25, + "bidprice": 1439.85, + "askQty": 75, + "askPrice": 1474.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22450, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22450, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22450.00", + "openInterest": 922, + "changeinOpenInterest": 497, + "pchangeinOpenInterest": 116.941176470588, + "totalTradedVolume": 2619, + "impliedVolatility": 21.67, + "lastPrice": 20.7, + "change": -20.85, + "pChange": -50.1805054151625, + "totalBuyQuantity": 36925, + "totalSellQuantity": 975, + "bidQty": 400, + "bidprice": 16.05, + "askQty": 400, + "askPrice": 27.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22450, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22450.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1120.7, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1000, + "bidQty": 1000, + "bidprice": 1057.15, + "askQty": 1000, + "askPrice": 1676, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22450, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22450, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 12550, + "totalSellQuantity": 0, + "bidQty": 100, + "bidprice": 30.45, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22450, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22450, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22450, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 9000, + "totalSellQuantity": 100, + "bidQty": 750, + "bidprice": 29, + "askQty": 100, + "askPrice": 99.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22450, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22450.00", + "openInterest": 334, + "changeinOpenInterest": 104, + "pchangeinOpenInterest": 45.2173913043478, + "totalTradedVolume": 574, + "impliedVolatility": 18.36, + "lastPrice": 60.3, + "change": -50.8, + "pChange": -45.7245724572457, + "totalBuyQuantity": 1875, + "totalSellQuantity": 2450, + "bidQty": 1775, + "bidprice": 41.65, + "askQty": 625, + "askPrice": 74.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22450.00", + "openInterest": 13, + "changeinOpenInterest": 9, + "pchangeinOpenInterest": 225, + "totalTradedVolume": 9, + "impliedVolatility": 0, + "lastPrice": 1607.7, + "change": 330.2, + "pChange": 25.8473581213307, + "totalBuyQuantity": 3750, + "totalSellQuantity": 3700, + "bidQty": 75, + "bidprice": 1575.35, + "askQty": 25, + "askPrice": 1708.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22450, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22450, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1950, + "totalSellQuantity": 0, + "bidQty": 450, + "bidprice": 28, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22450, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22450, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22450.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1701, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1324, + "askQty": 1775, + "askPrice": 2022.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22450, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22450.00", + "openInterest": 8, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 152.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2700, + "totalSellQuantity": 2725, + "bidQty": 800, + "bidprice": 50.2, + "askQty": 900, + "askPrice": 163.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22500, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22500.00", + "openInterest": 266048, + "changeinOpenInterest": 63660, + "pchangeinOpenInterest": 31.4544340573552, + "totalTradedVolume": 1400953, + "impliedVolatility": 24.82, + "lastPrice": 7, + "change": -13.35, + "pChange": -65.6019656019656, + "totalBuyQuantity": 908200, + "totalSellQuantity": 137075, + "bidQty": 8900, + "bidprice": 7, + "askQty": 50, + "askPrice": 7.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22500.00", + "openInterest": 17574, + "changeinOpenInterest": -2465, + "pchangeinOpenInterest": -12.301013024602, + "totalTradedVolume": 6780, + "impliedVolatility": 0, + "lastPrice": 1405, + "change": 541.8, + "pChange": 62.7664504170528, + "totalBuyQuantity": 10075, + "totalSellQuantity": 7175, + "bidQty": 50, + "bidprice": 1403.8, + "askQty": 75, + "askPrice": 1415.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22500, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22500, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22500.00", + "openInterest": 112, + "changeinOpenInterest": 35, + "pchangeinOpenInterest": 45.4545454545455, + "totalTradedVolume": 198, + "impliedVolatility": 0, + "lastPrice": 1416.75, + "change": 462.75, + "pChange": 48.5062893081761, + "totalBuyQuantity": 4300, + "totalSellQuantity": 1975, + "bidQty": 125, + "bidprice": 1320.95, + "askQty": 125, + "askPrice": 1608.7, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22500, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22500.00", + "openInterest": 9554, + "changeinOpenInterest": 1402, + "pchangeinOpenInterest": 17.198233562316, + "totalTradedVolume": 72997, + "impliedVolatility": 21.48, + "lastPrice": 22.6, + "change": -24, + "pChange": -51.5021459227468, + "totalBuyQuantity": 43475, + "totalSellQuantity": 7975, + "bidQty": 1800, + "bidprice": 20.05, + "askQty": 50, + "askPrice": 22.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22500, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 22500, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22500.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22500, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22500.00", + "openInterest": 2208, + "changeinOpenInterest": 423, + "pchangeinOpenInterest": 23.6974789915966, + "totalTradedVolume": 11748, + "impliedVolatility": 19.36, + "lastPrice": 33.65, + "change": -37.25, + "pChange": -52.5387870239774, + "totalBuyQuantity": 13450, + "totalSellQuantity": 2575, + "bidQty": 250, + "bidprice": 32.1, + "askQty": 1375, + "askPrice": 34, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22500, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 22500, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE22500.00", + "openInterest": 0, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -100, + "totalTradedVolume": 2, + "impliedVolatility": 16.2, + "lastPrice": 1600, + "change": 500, + "pChange": 45.4545454545455, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22500, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22500.00", + "openInterest": 35, + "changeinOpenInterest": 35, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 55, + "impliedVolatility": 18.77, + "lastPrice": 50, + "change": -31, + "pChange": -38.2716049382716, + "totalBuyQuantity": 7100, + "totalSellQuantity": 1975, + "bidQty": 900, + "bidprice": 26.05, + "askQty": 25, + "askPrice": 67.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22500, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22500.00", + "openInterest": 59886, + "changeinOpenInterest": 1738, + "pchangeinOpenInterest": 2.98892481254729, + "totalTradedVolume": 112885, + "impliedVolatility": 18.21, + "lastPrice": 63.7, + "change": -56.05, + "pChange": -46.8058455114823, + "totalBuyQuantity": 17200, + "totalSellQuantity": 18825, + "bidQty": 1800, + "bidprice": 62, + "askQty": 25, + "askPrice": 66, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22500.00", + "openInterest": 4340, + "changeinOpenInterest": 196, + "pchangeinOpenInterest": 4.72972972972973, + "totalTradedVolume": 2252, + "impliedVolatility": 0, + "lastPrice": 1587.65, + "change": 475.95, + "pChange": 42.8128092111181, + "totalBuyQuantity": 5500, + "totalSellQuantity": 8950, + "bidQty": 25, + "bidprice": 1577.4, + "askQty": 250, + "askPrice": 1604.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22500, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22500, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22500.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2550, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 31, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22500, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22500, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22500.00", + "openInterest": 18168, + "changeinOpenInterest": 2896, + "pchangeinOpenInterest": 18.9628077527501, + "totalTradedVolume": 12945, + "impliedVolatility": 16.73, + "lastPrice": 116, + "change": -69.3, + "pChange": -37.3988127361036, + "totalBuyQuantity": 14375, + "totalSellQuantity": 3875, + "bidQty": 425, + "bidprice": 116, + "askQty": 125, + "askPrice": 120.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22500, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22500.00", + "openInterest": 595, + "changeinOpenInterest": 45, + "pchangeinOpenInterest": 8.18181818181818, + "totalTradedVolume": 385, + "impliedVolatility": 0, + "lastPrice": 1760.1, + "change": 411.2, + "pChange": 30.4840981540514, + "totalBuyQuantity": 4250, + "totalSellQuantity": 4300, + "bidQty": 200, + "bidprice": 1771.9, + "askQty": 225, + "askPrice": 1813.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22550, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22550.00", + "openInterest": 2978, + "changeinOpenInterest": 48, + "pchangeinOpenInterest": 1.6382252559727, + "totalTradedVolume": 171, + "impliedVolatility": 0, + "lastPrice": 1353.95, + "change": 525.55, + "pChange": 63.4415741187832, + "totalBuyQuantity": 7750, + "totalSellQuantity": 7150, + "bidQty": 150, + "bidprice": 1354.55, + "askQty": 150, + "askPrice": 1368.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22550.00", + "openInterest": 21505, + "changeinOpenInterest": 12363, + "pchangeinOpenInterest": 135.232990592868, + "totalTradedVolume": 289413, + "impliedVolatility": 24.29, + "lastPrice": 7.4, + "change": -15.75, + "pChange": -68.0345572354212, + "totalBuyQuantity": 78925, + "totalSellQuantity": 27200, + "bidQty": 25, + "bidprice": 7.65, + "askQty": 1000, + "askPrice": 8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22550, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22550, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22550.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1028.6, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1000, + "bidprice": 987.25, + "askQty": 1000, + "askPrice": 1590.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22550, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22550.00", + "openInterest": 1321, + "changeinOpenInterest": 1320, + "pchangeinOpenInterest": 132000, + "totalTradedVolume": 3164, + "impliedVolatility": 21.03, + "lastPrice": 23.35, + "change": 2.35, + "pChange": 11.1904761904762, + "totalBuyQuantity": 12300, + "totalSellQuantity": 3400, + "bidQty": 525, + "bidprice": 22.05, + "askQty": 525, + "askPrice": 30.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22550, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22550, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22550.00", + "openInterest": 3, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 50, + "totalTradedVolume": 5, + "impliedVolatility": 20.76, + "lastPrice": 49.55, + "change": -11.6, + "pChange": -18.9697465249387, + "totalBuyQuantity": 11850, + "totalSellQuantity": 275, + "bidQty": 900, + "bidprice": 28.15, + "askQty": 275, + "askPrice": 119.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22550, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22550, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22550, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 7350, + "totalSellQuantity": 0, + "bidQty": 150, + "bidprice": 33.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22550, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22550.00", + "openInterest": 449, + "changeinOpenInterest": 136, + "pchangeinOpenInterest": 43.4504792332268, + "totalTradedVolume": 1044, + "impliedVolatility": 18.25, + "lastPrice": 69.75, + "change": -58.3, + "pChange": -45.529090199141, + "totalBuyQuantity": 1775, + "totalSellQuantity": 3650, + "bidQty": 1775, + "bidprice": 44.1, + "askQty": 900, + "askPrice": 82.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22550.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1191.35, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3325, + "totalSellQuantity": 3675, + "bidQty": 550, + "bidprice": 1261.2, + "askQty": 900, + "askPrice": 1776.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22550, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22550, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 21.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22550, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22550, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22550.00", + "openInterest": 45, + "changeinOpenInterest": 42, + "pchangeinOpenInterest": 1400, + "totalTradedVolume": 57, + "impliedVolatility": 16.63, + "lastPrice": 121, + "change": -63.3, + "pChange": -34.3461747151384, + "totalBuyQuantity": 3525, + "totalSellQuantity": 925, + "bidQty": 900, + "bidprice": 112.95, + "askQty": 900, + "askPrice": 154.05, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22550, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1235.05, + "askQty": 1775, + "askPrice": 1941.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22600, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22600.00", + "openInterest": 81478, + "changeinOpenInterest": 44424, + "pchangeinOpenInterest": 119.889890430183, + "totalTradedVolume": 821226, + "impliedVolatility": 24.07, + "lastPrice": 8.45, + "change": -18.15, + "pChange": -68.2330827067669, + "totalBuyQuantity": 81225, + "totalSellQuantity": 36500, + "bidQty": 1500, + "bidprice": 8.35, + "askQty": 550, + "askPrice": 8.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22600.00", + "openInterest": 669, + "changeinOpenInterest": -196, + "pchangeinOpenInterest": -22.6589595375723, + "totalTradedVolume": 1243, + "impliedVolatility": 0, + "lastPrice": 1303.5, + "change": 531.95, + "pChange": 68.9456289287797, + "totalBuyQuantity": 12050, + "totalSellQuantity": 8750, + "bidQty": 150, + "bidprice": 1306.05, + "askQty": 25, + "askPrice": 1316.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22600, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22600.00", + "openInterest": 6214, + "changeinOpenInterest": 3374, + "pchangeinOpenInterest": 118.802816901408, + "totalTradedVolume": 39956, + "impliedVolatility": 20.66, + "lastPrice": 24.55, + "change": -31.3, + "pChange": -56.0429722470904, + "totalBuyQuantity": 17600, + "totalSellQuantity": 3800, + "bidQty": 25, + "bidprice": 23, + "askQty": 25, + "askPrice": 27.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22600.00", + "openInterest": 11, + "changeinOpenInterest": 9, + "pchangeinOpenInterest": 450, + "totalTradedVolume": 43, + "impliedVolatility": 0, + "lastPrice": 1160, + "change": 176.75, + "pChange": 17.9760996694635, + "totalBuyQuantity": 2825, + "totalSellQuantity": 2825, + "bidQty": 50, + "bidprice": 1349.3, + "askQty": 50, + "askPrice": 1395.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22600, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 22600, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22600, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22600.00", + "openInterest": 196, + "changeinOpenInterest": 72, + "pchangeinOpenInterest": 58.0645161290323, + "totalTradedVolume": 763, + "impliedVolatility": 19.1, + "lastPrice": 39.7, + "change": -43.55, + "pChange": -52.3123123123123, + "totalBuyQuantity": 9475, + "totalSellQuantity": 275, + "bidQty": 25, + "bidprice": 32.4, + "askQty": 25, + "askPrice": 87.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22600, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22600, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 10650, + "totalSellQuantity": 2075, + "bidQty": 900, + "bidprice": 28.15, + "askQty": 275, + "askPrice": 173.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22600, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 22600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22600.00", + "openInterest": 218, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 0.925925925925926, + "totalTradedVolume": 150, + "impliedVolatility": 0, + "lastPrice": 1492.1, + "change": 456.45, + "pChange": 44.0737700960749, + "totalBuyQuantity": 5025, + "totalSellQuantity": 4150, + "bidQty": 900, + "bidprice": 1228.25, + "askQty": 100, + "askPrice": 1537.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22600.00", + "openInterest": 9486, + "changeinOpenInterest": 2419, + "pchangeinOpenInterest": 34.2295174755908, + "totalTradedVolume": 22649, + "impliedVolatility": 17.9, + "lastPrice": 70.95, + "change": -61.55, + "pChange": -46.4528301886792, + "totalBuyQuantity": 5125, + "totalSellQuantity": 6000, + "bidQty": 25, + "bidprice": 52.1, + "askQty": 25, + "askPrice": 71.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22600, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22600, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2250, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 32.95, + "askQty": 900, + "askPrice": 112.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22600, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 2175, + "bidQty": 900, + "bidprice": 1189.35, + "askQty": 1775, + "askPrice": 2053, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22600.00", + "openInterest": 891, + "changeinOpenInterest": -124, + "pchangeinOpenInterest": -12.2167487684729, + "totalTradedVolume": 480, + "impliedVolatility": 16.48, + "lastPrice": 125.1, + "change": -75.8, + "pChange": -37.7302140368343, + "totalBuyQuantity": 1650, + "totalSellQuantity": 1950, + "bidQty": 450, + "bidprice": 116.2, + "askQty": 25, + "askPrice": 139.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22650, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22650.00", + "openInterest": 470, + "changeinOpenInterest": 21, + "pchangeinOpenInterest": 4.67706013363029, + "totalTradedVolume": 177, + "impliedVolatility": 0, + "lastPrice": 1232.55, + "change": 500.95, + "pChange": 68.4732094040459, + "totalBuyQuantity": 8200, + "totalSellQuantity": 6175, + "bidQty": 50, + "bidprice": 1256.5, + "askQty": 50, + "askPrice": 1267.7, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22650.00", + "openInterest": 41599, + "changeinOpenInterest": 30918, + "pchangeinOpenInterest": 289.467278344724, + "totalTradedVolume": 439130, + "impliedVolatility": 23.79, + "lastPrice": 9.5, + "change": -20.9, + "pChange": -68.75, + "totalBuyQuantity": 77250, + "totalSellQuantity": 38300, + "bidQty": 1875, + "bidprice": 9.5, + "askQty": 1000, + "askPrice": 9.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22650, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22650.00", + "openInterest": 958, + "changeinOpenInterest": 220, + "pchangeinOpenInterest": 29.810298102981, + "totalTradedVolume": 4762, + "impliedVolatility": 20.57, + "lastPrice": 27.45, + "change": -34.45, + "pChange": -55.654281098546, + "totalBuyQuantity": 10850, + "totalSellQuantity": 3600, + "bidQty": 650, + "bidprice": 21.8, + "askQty": 650, + "askPrice": 35.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22650.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 938.6, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 892.3, + "askQty": 1000, + "askPrice": 1480.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22650, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 22650, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22650, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22650.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 44.25, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 9025, + "totalSellQuantity": 900, + "bidQty": 900, + "bidprice": 33.3, + "askQty": 900, + "askPrice": 74.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22650, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22650, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5450, + "totalSellQuantity": 0, + "bidQty": 750, + "bidprice": 32.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22650, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22650.00", + "openInterest": 2070, + "changeinOpenInterest": 691, + "pchangeinOpenInterest": 50.1087744742567, + "totalTradedVolume": 2797, + "impliedVolatility": 17.83, + "lastPrice": 76.05, + "change": -65.15, + "pChange": -46.1402266288952, + "totalBuyQuantity": 2675, + "totalSellQuantity": 700, + "bidQty": 900, + "bidprice": 52.2, + "askQty": 375, + "askPrice": 89.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22650.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1107.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1550, + "totalSellQuantity": 3675, + "bidQty": 550, + "bidprice": 1159.2, + "askQty": 1000, + "askPrice": 1555, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22650, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22650, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 375, + "totalSellQuantity": 0, + "bidQty": 375, + "bidprice": 25.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22650, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22650.00", + "openInterest": 4, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 33.3333333333333, + "totalTradedVolume": 1, + "impliedVolatility": 18.73, + "lastPrice": 190, + "change": 5.94999999999999, + "pChange": 3.23281716924748, + "totalBuyQuantity": 900, + "totalSellQuantity": 700, + "bidQty": 900, + "bidprice": 104.6, + "askQty": 650, + "askPrice": 199.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22650.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1336.7, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2650, + "totalSellQuantity": 1775, + "bidQty": 875, + "bidprice": 1143.2, + "askQty": 1775, + "askPrice": 1828.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22700, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22700.00", + "openInterest": 314, + "changeinOpenInterest": -33, + "pchangeinOpenInterest": -9.51008645533141, + "totalTradedVolume": 739, + "impliedVolatility": 0, + "lastPrice": 1198.65, + "change": 518.9, + "pChange": 76.3368885619713, + "totalBuyQuantity": 8800, + "totalSellQuantity": 7875, + "bidQty": 175, + "bidprice": 1209, + "askQty": 1800, + "askPrice": 1222.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22700.00", + "openInterest": 92963, + "changeinOpenInterest": 32670, + "pchangeinOpenInterest": 54.1853946560961, + "totalTradedVolume": 982139, + "impliedVolatility": 23.63, + "lastPrice": 11, + "change": -24.1, + "pChange": -68.6609686609687, + "totalBuyQuantity": 91725, + "totalSellQuantity": 48125, + "bidQty": 50, + "bidprice": 10.5, + "askQty": 1000, + "askPrice": 10.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22700, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22700.00", + "openInterest": 4381, + "changeinOpenInterest": 1252, + "pchangeinOpenInterest": 40.0127836369447, + "totalTradedVolume": 43540, + "impliedVolatility": 20.5, + "lastPrice": 30.75, + "change": -37.3, + "pChange": -54.8126377663483, + "totalBuyQuantity": 15625, + "totalSellQuantity": 15800, + "bidQty": 25, + "bidprice": 28.7, + "askQty": 1800, + "askPrice": 31.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22700.00", + "openInterest": 16, + "changeinOpenInterest": 15, + "pchangeinOpenInterest": 1500, + "totalTradedVolume": 71, + "impliedVolatility": 0, + "lastPrice": 1244, + "change": 350.2, + "pChange": 39.1810248377713, + "totalBuyQuantity": 3000, + "totalSellQuantity": 3000, + "bidQty": 25, + "bidprice": 1121.15, + "askQty": 25, + "askPrice": 1400.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22700, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22700, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22700.00", + "openInterest": 1468, + "changeinOpenInterest": 1156, + "pchangeinOpenInterest": 370.512820512821, + "totalTradedVolume": 3981, + "impliedVolatility": 18.44, + "lastPrice": 43.05, + "change": -57.3, + "pChange": -57.1001494768311, + "totalBuyQuantity": 10150, + "totalSellQuantity": 1250, + "bidQty": 100, + "bidprice": 40.6, + "askQty": 75, + "askPrice": 59.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22700, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22700, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22700, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 7700, + "totalSellQuantity": 1575, + "bidQty": 900, + "bidprice": 22.45, + "askQty": 375, + "askPrice": 88.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22700, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 22700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22700.00", + "openInterest": 161, + "changeinOpenInterest": 18, + "pchangeinOpenInterest": 12.5874125874126, + "totalTradedVolume": 105, + "impliedVolatility": 0, + "lastPrice": 1401.9, + "change": 453.15, + "pChange": 47.7628458498024, + "totalBuyQuantity": 4800, + "totalSellQuantity": 4900, + "bidQty": 75, + "bidprice": 1359.5, + "askQty": 75, + "askPrice": 1444.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22700.00", + "openInterest": 13455, + "changeinOpenInterest": 1955, + "pchangeinOpenInterest": 17, + "totalTradedVolume": 21263, + "impliedVolatility": 17.83, + "lastPrice": 82.7, + "change": -68.25, + "pChange": -45.213646902948, + "totalBuyQuantity": 2250, + "totalSellQuantity": 1675, + "bidQty": 50, + "bidprice": 75, + "askQty": 25, + "askPrice": 86.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22700, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22700, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 375, + "totalSellQuantity": 750, + "bidQty": 375, + "bidprice": 81.2, + "askQty": 375, + "askPrice": 115.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22700, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 2175, + "bidQty": 900, + "bidprice": 1099.65, + "askQty": 1775, + "askPrice": 1955.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22700.00", + "openInterest": 1834, + "changeinOpenInterest": 191, + "pchangeinOpenInterest": 11.6250760803408, + "totalTradedVolume": 1484, + "impliedVolatility": 16.19, + "lastPrice": 134.2, + "change": -85.8, + "pChange": -39, + "totalBuyQuantity": 725, + "totalSellQuantity": 1450, + "bidQty": 300, + "bidprice": 119.45, + "askQty": 25, + "askPrice": 154.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22750, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22750.00", + "openInterest": 38866, + "changeinOpenInterest": 24284, + "pchangeinOpenInterest": 166.534083116171, + "totalTradedVolume": 433621, + "impliedVolatility": 23.47, + "lastPrice": 12.7, + "change": -27.6, + "pChange": -68.4863523573201, + "totalBuyQuantity": 81075, + "totalSellQuantity": 26675, + "bidQty": 125, + "bidprice": 12.15, + "askQty": 1000, + "askPrice": 12.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22750.00", + "openInterest": 658, + "changeinOpenInterest": -24, + "pchangeinOpenInterest": -3.51906158357771, + "totalTradedVolume": 328, + "impliedVolatility": 0, + "lastPrice": 1144.8, + "change": 516.75, + "pChange": 82.2784810126582, + "totalBuyQuantity": 10400, + "totalSellQuantity": 7150, + "bidQty": 1800, + "bidprice": 1159.2, + "askQty": 1800, + "askPrice": 1172.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22750, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22750.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 852.65, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1000, + "bidprice": 822.3, + "askQty": 1000, + "askPrice": 1447.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22750.00", + "openInterest": 592, + "changeinOpenInterest": -110, + "pchangeinOpenInterest": -15.6695156695157, + "totalTradedVolume": 10580, + "impliedVolatility": 20.16, + "lastPrice": 32.65, + "change": -41.35, + "pChange": -55.8783783783784, + "totalBuyQuantity": 11600, + "totalSellQuantity": 4650, + "bidQty": 1350, + "bidprice": 30.05, + "askQty": 1350, + "askPrice": 39.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22750, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22750, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6600, + "totalSellQuantity": 800, + "bidQty": 600, + "bidprice": 42.2, + "askQty": 800, + "askPrice": 82.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22750, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22750, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22750, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 10.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22750, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 22750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22750.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1023.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3325, + "totalSellQuantity": 3675, + "bidQty": 550, + "bidprice": 1080.95, + "askQty": 900, + "askPrice": 1572.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22750.00", + "openInterest": 797, + "changeinOpenInterest": 183, + "pchangeinOpenInterest": 29.8045602605863, + "totalTradedVolume": 2042, + "impliedVolatility": 17.49, + "lastPrice": 84.35, + "change": -74.45, + "pChange": -46.8828715365239, + "totalBuyQuantity": 2225, + "totalSellQuantity": 2775, + "bidQty": 25, + "bidprice": 80, + "askQty": 100, + "askPrice": 84.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22750, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22750, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 40.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22750, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22750.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1255.8, + "change": 1.20000000000005, + "pChange": 0.0956480153036861, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1206.05, + "askQty": 1775, + "askPrice": 1818.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22750.00", + "openInterest": 5, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 25, + "totalTradedVolume": 1, + "impliedVolatility": 18.73, + "lastPrice": 210, + "change": 8.90000000000001, + "pChange": 4.42565887618101, + "totalBuyQuantity": 1500, + "totalSellQuantity": 2025, + "bidQty": 1450, + "bidprice": 34.9, + "askQty": 1300, + "askPrice": 210.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22800, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22800.00", + "openInterest": 1789, + "changeinOpenInterest": 244, + "pchangeinOpenInterest": 15.7928802588997, + "totalTradedVolume": 3072, + "impliedVolatility": 0, + "lastPrice": 1105, + "change": 508.8, + "pChange": 85.340489768534, + "totalBuyQuantity": 13125, + "totalSellQuantity": 9500, + "bidQty": 1800, + "bidprice": 1111.2, + "askQty": 1800, + "askPrice": 1121.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22800.00", + "openInterest": 85464, + "changeinOpenInterest": 3052, + "pchangeinOpenInterest": 3.70334417317866, + "totalTradedVolume": 977648, + "impliedVolatility": 22.92, + "lastPrice": 13.5, + "change": -32.8, + "pChange": -70.8423326133909, + "totalBuyQuantity": 92700, + "totalSellQuantity": 53425, + "bidQty": 850, + "bidprice": 13.5, + "askQty": 675, + "askPrice": 13.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22800, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22800.00", + "openInterest": 7302, + "changeinOpenInterest": 2165, + "pchangeinOpenInterest": 42.1452209460775, + "totalTradedVolume": 48960, + "impliedVolatility": 19.96, + "lastPrice": 35.6, + "change": -45.85, + "pChange": -56.292203806016, + "totalBuyQuantity": 19100, + "totalSellQuantity": 9900, + "bidQty": 1800, + "bidprice": 31.75, + "askQty": 50, + "askPrice": 35.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22800.00", + "openInterest": 110, + "changeinOpenInterest": 45, + "pchangeinOpenInterest": 69.2307692307692, + "totalTradedVolume": 327, + "impliedVolatility": 0, + "lastPrice": 1165.65, + "change": 492.75, + "pChange": 73.2278198840838, + "totalBuyQuantity": 4625, + "totalSellQuantity": 2000, + "bidQty": 50, + "bidprice": 1161, + "askQty": 25, + "askPrice": 1309.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22800, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 22800, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22800, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22800.00", + "openInterest": 902, + "changeinOpenInterest": -41, + "pchangeinOpenInterest": -4.34782608695652, + "totalTradedVolume": 1973, + "impliedVolatility": 18.34, + "lastPrice": 52.5, + "change": -63.55, + "pChange": -54.7608789314951, + "totalBuyQuantity": 4975, + "totalSellQuantity": 2300, + "bidQty": 25, + "bidprice": 50.5, + "askQty": 25, + "askPrice": 61.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22800, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22800, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4075, + "totalSellQuantity": 1650, + "bidQty": 900, + "bidprice": 21.3, + "askQty": 825, + "askPrice": 95.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22800, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE22800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22800, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22800.00", + "openInterest": 23220, + "changeinOpenInterest": 7374, + "pchangeinOpenInterest": 46.5354032563423, + "totalTradedVolume": 33180, + "impliedVolatility": 18, + "lastPrice": 99.95, + "change": -70.05, + "pChange": -41.2058823529412, + "totalBuyQuantity": 5575, + "totalSellQuantity": 2725, + "bidQty": 25, + "bidprice": 85, + "askQty": 25, + "askPrice": 89.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22800.00", + "openInterest": 181, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 218, + "impliedVolatility": 0, + "lastPrice": 1298.75, + "change": 433.5, + "pChange": 50.1011268419532, + "totalBuyQuantity": 5125, + "totalSellQuantity": 3675, + "bidQty": 300, + "bidprice": 1213.8, + "askQty": 100, + "askPrice": 1338.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22800, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22800, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 825, + "bidQty": 0, + "bidprice": 0, + "askQty": 825, + "askPrice": 127.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22800, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 2375, + "bidQty": 900, + "bidprice": 1200.3, + "askQty": 1775, + "askPrice": 1859.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22800.00", + "openInterest": 1338, + "changeinOpenInterest": 175, + "pchangeinOpenInterest": 15.0472914875322, + "totalTradedVolume": 713, + "impliedVolatility": 16.07, + "lastPrice": 148, + "change": -96.2, + "pChange": -39.3939393939394, + "totalBuyQuantity": 1375, + "totalSellQuantity": 1225, + "bidQty": 300, + "bidprice": 127.15, + "askQty": 825, + "askPrice": 171.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22850, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22850.00", + "openInterest": 1094, + "changeinOpenInterest": -58, + "pchangeinOpenInterest": -5.03472222222222, + "totalTradedVolume": 749, + "impliedVolatility": 0, + "lastPrice": 1045, + "change": 500.55, + "pChange": 91.9368169712554, + "totalBuyQuantity": 11950, + "totalSellQuantity": 6450, + "bidQty": 175, + "bidprice": 1063.35, + "askQty": 175, + "askPrice": 1075.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22850.00", + "openInterest": 19392, + "changeinOpenInterest": 7144, + "pchangeinOpenInterest": 58.3278902677988, + "totalTradedVolume": 363965, + "impliedVolatility": 22.62, + "lastPrice": 15.15, + "change": -38.05, + "pChange": -71.5225563909774, + "totalBuyQuantity": 73900, + "totalSellQuantity": 31475, + "bidQty": 50, + "bidprice": 14.3, + "askQty": 200, + "askPrice": 15.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22850, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22850.00", + "openInterest": 2251, + "changeinOpenInterest": 1722, + "pchangeinOpenInterest": 325.519848771267, + "totalTradedVolume": 11002, + "impliedVolatility": 19.21, + "lastPrice": 34.9, + "change": -55.85, + "pChange": -61.5426997245179, + "totalBuyQuantity": 8925, + "totalSellQuantity": 5100, + "bidQty": 1350, + "bidprice": 34.05, + "askQty": 1350, + "askPrice": 46.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22850.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 758.25, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4575, + "totalSellQuantity": 1725, + "bidQty": 1775, + "bidprice": 932.3, + "askQty": 25, + "askPrice": 1326.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22850, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22850, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6000, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 42.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22850, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22850, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 22850, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE22850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22850, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 325, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 21.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22850, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22850.00", + "openInterest": 910, + "changeinOpenInterest": 204, + "pchangeinOpenInterest": 28.8951841359773, + "totalTradedVolume": 2020, + "impliedVolatility": 17.22, + "lastPrice": 94.75, + "change": -85.55, + "pChange": -47.4486966167499, + "totalBuyQuantity": 3750, + "totalSellQuantity": 1200, + "bidQty": 900, + "bidprice": 63.8, + "askQty": 500, + "askPrice": 95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22850.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 943.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3325, + "totalSellQuantity": 3275, + "bidQty": 1775, + "bidprice": 941.6, + "askQty": 500, + "askPrice": 1485.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22850, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22850, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 40.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22850, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 22850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22850.00", + "openInterest": 5, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 25, + "totalTradedVolume": 2, + "impliedVolatility": 16.33, + "lastPrice": 164, + "change": -91.2, + "pChange": -35.7366771159875, + "totalBuyQuantity": 3600, + "totalSellQuantity": 1850, + "bidQty": 900, + "bidprice": 13, + "askQty": 675, + "askPrice": 189.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22850.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1164.55, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2650, + "totalSellQuantity": 1775, + "bidQty": 875, + "bidprice": 963, + "askQty": 1775, + "askPrice": 1709.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22900.00", + "openInterest": 100159, + "changeinOpenInterest": 36565, + "pchangeinOpenInterest": 57.4975626631443, + "totalTradedVolume": 961386, + "impliedVolatility": 22.12, + "lastPrice": 16.3, + "change": -45.15, + "pChange": -73.4743694060212, + "totalBuyQuantity": 85775, + "totalSellQuantity": 59025, + "bidQty": 3800, + "bidprice": 16.1, + "askQty": 1725, + "askPrice": 16.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22900.00", + "openInterest": 848, + "changeinOpenInterest": -122, + "pchangeinOpenInterest": -12.5773195876289, + "totalTradedVolume": 2947, + "impliedVolatility": 0, + "lastPrice": 1010, + "change": 500.9, + "pChange": 98.3893144765272, + "totalBuyQuantity": 17425, + "totalSellQuantity": 10075, + "bidQty": 600, + "bidprice": 1014, + "askQty": 1800, + "askPrice": 1027.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22900, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 22900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22900.00", + "openInterest": 4859, + "changeinOpenInterest": 1090, + "pchangeinOpenInterest": 28.9201379676307, + "totalTradedVolume": 48994, + "impliedVolatility": 19, + "lastPrice": 38.15, + "change": -61.1, + "pChange": -61.5617128463476, + "totalBuyQuantity": 10825, + "totalSellQuantity": 10125, + "bidQty": 1800, + "bidprice": 38.2, + "askQty": 25, + "askPrice": 41.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22900.00", + "openInterest": 119, + "changeinOpenInterest": 17, + "pchangeinOpenInterest": 16.6666666666667, + "totalTradedVolume": 164, + "impliedVolatility": 0, + "lastPrice": 1065.95, + "change": 471.25, + "pChange": 79.2416344375315, + "totalBuyQuantity": 5375, + "totalSellQuantity": 3250, + "bidQty": 125, + "bidprice": 941.5, + "askQty": 125, + "askPrice": 1120.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22900, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 22900, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22900.00", + "openInterest": 237, + "changeinOpenInterest": 199, + "pchangeinOpenInterest": 523.684210526316, + "totalTradedVolume": 559, + "impliedVolatility": 17.78, + "lastPrice": 58.35, + "change": -77.65, + "pChange": -57.0955882352941, + "totalBuyQuantity": 2225, + "totalSellQuantity": 425, + "bidQty": 25, + "bidprice": 54.85, + "askQty": 25, + "askPrice": 67.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22900, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22900, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 22900, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE22900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22900, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4625, + "totalSellQuantity": 700, + "bidQty": 900, + "bidprice": 26.5, + "askQty": 350, + "askPrice": 109.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22900, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 22900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22900.00", + "openInterest": 17320, + "changeinOpenInterest": 1822, + "pchangeinOpenInterest": 11.7563556587947, + "totalTradedVolume": 17517, + "impliedVolatility": 16.96, + "lastPrice": 98.25, + "change": -93.3, + "pChange": -48.7079091620987, + "totalBuyQuantity": 3450, + "totalSellQuantity": 650, + "bidQty": 25, + "bidprice": 97.35, + "askQty": 25, + "askPrice": 109.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22900.00", + "openInterest": 332, + "changeinOpenInterest": -27, + "pchangeinOpenInterest": -7.52089136490251, + "totalTradedVolume": 97, + "impliedVolatility": 7.74, + "lastPrice": 1222.15, + "change": 431.75, + "pChange": 54.6242408906883, + "totalBuyQuantity": 4900, + "totalSellQuantity": 5075, + "bidQty": 75, + "bidprice": 1171.85, + "askQty": 150, + "askPrice": 1275.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22900, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22900, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6450, + "totalSellQuantity": 300, + "bidQty": 900, + "bidprice": 51.3, + "askQty": 300, + "askPrice": 141.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22900, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22900.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1143.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 2350, + "bidQty": 900, + "bidprice": 1091.65, + "askQty": 1775, + "askPrice": 1766.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22900.00", + "openInterest": 809, + "changeinOpenInterest": 19, + "pchangeinOpenInterest": 2.40506329113924, + "totalTradedVolume": 408, + "impliedVolatility": 16.08, + "lastPrice": 166.85, + "change": -103.95, + "pChange": -38.3862629246677, + "totalBuyQuantity": 1100, + "totalSellQuantity": 1425, + "bidQty": 200, + "bidprice": 150, + "askQty": 25, + "askPrice": 182.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22950, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22950.00", + "openInterest": 37047, + "changeinOpenInterest": 23043, + "pchangeinOpenInterest": 164.545844044559, + "totalTradedVolume": 470638, + "impliedVolatility": 21.94, + "lastPrice": 18.8, + "change": -50.65, + "pChange": -72.9301655867531, + "totalBuyQuantity": 75525, + "totalSellQuantity": 39125, + "bidQty": 700, + "bidprice": 18, + "askQty": 1000, + "askPrice": 18.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22950.00", + "openInterest": 709, + "changeinOpenInterest": -93, + "pchangeinOpenInterest": -11.5960099750623, + "totalTradedVolume": 1268, + "impliedVolatility": 0, + "lastPrice": 963.35, + "change": 497.25, + "pChange": 106.683115211328, + "totalBuyQuantity": 176625, + "totalSellQuantity": 8900, + "bidQty": 175, + "bidprice": 966.85, + "askQty": 1800, + "askPrice": 977.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22950, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 22950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE22950.00", + "openInterest": 11, + "changeinOpenInterest": 6, + "pchangeinOpenInterest": 120, + "totalTradedVolume": 37, + "impliedVolatility": 0, + "lastPrice": 712.5, + "change": 156.65, + "pChange": 28.1820635063416, + "totalBuyQuantity": 4950, + "totalSellQuantity": 1100, + "bidQty": 50, + "bidprice": 899.75, + "askQty": 125, + "askPrice": 1221.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE22950.00", + "openInterest": 1308, + "changeinOpenInterest": 436, + "pchangeinOpenInterest": 50, + "totalTradedVolume": 11830, + "impliedVolatility": 19.19, + "lastPrice": 44.95, + "change": -64.7, + "pChange": -59.0059279525764, + "totalBuyQuantity": 7125, + "totalSellQuantity": 3800, + "bidQty": 250, + "bidprice": 36.1, + "askQty": 500, + "askPrice": 54.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22950, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 22950, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE22950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22950, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE22950.00", + "openInterest": 39, + "changeinOpenInterest": 36, + "pchangeinOpenInterest": 1200, + "totalTradedVolume": 56, + "impliedVolatility": 19.51, + "lastPrice": 86.45, + "change": -64.95, + "pChange": -42.8996036988111, + "totalBuyQuantity": 1825, + "totalSellQuantity": 925, + "bidQty": 25, + "bidprice": 37.4, + "askQty": 900, + "askPrice": 120.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22950, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 22950, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE22950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 325, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 25.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22950, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE22950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22950, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 22950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE22950.00", + "openInterest": 510, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 0, + "lastPrice": 1026.4, + "change": 269.75, + "pChange": 35.6505649904183, + "totalBuyQuantity": 1925, + "totalSellQuantity": 3675, + "bidQty": 25, + "bidprice": 996.5, + "askQty": 1000, + "askPrice": 1281.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE22950.00", + "openInterest": 796, + "changeinOpenInterest": -209, + "pchangeinOpenInterest": -20.7960199004975, + "totalTradedVolume": 1285, + "impliedVolatility": 16.89, + "lastPrice": 105.35, + "change": -98.35, + "pChange": -48.2817869415808, + "totalBuyQuantity": 3800, + "totalSellQuantity": 3250, + "bidQty": 25, + "bidprice": 102, + "askQty": 900, + "askPrice": 120.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22950, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 22950, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE22950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22950, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 22950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE22950.00", + "openInterest": 9, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1098.35, + "change": -2.15000000000009, + "pChange": -0.19536574284417, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1083.45, + "askQty": 1775, + "askPrice": 1551.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE22950.00", + "openInterest": 10, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 25, + "totalTradedVolume": 2, + "impliedVolatility": 16.31, + "lastPrice": 183.1, + "change": -60.6, + "pChange": -24.8666393106278, + "totalBuyQuantity": 2800, + "totalSellQuantity": 1925, + "bidQty": 900, + "bidprice": 137.05, + "askQty": 525, + "askPrice": 193.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23000.00", + "openInterest": 39085, + "changeinOpenInterest": -4108, + "pchangeinOpenInterest": -9.51080036116963, + "totalTradedVolume": 75959, + "impliedVolatility": 0, + "lastPrice": 918.25, + "change": 493.05, + "pChange": 115.957196613358, + "totalBuyQuantity": 183900, + "totalSellQuantity": 13325, + "bidQty": 1800, + "bidprice": 919.35, + "askQty": 1800, + "askPrice": 928.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23000.00", + "openInterest": 283955, + "changeinOpenInterest": 63506, + "pchangeinOpenInterest": 28.8075700048537, + "totalTradedVolume": 2107105, + "impliedVolatility": 21.65, + "lastPrice": 21.2, + "change": -58.75, + "pChange": -73.4834271419637, + "totalBuyQuantity": 82450, + "totalSellQuantity": 522000, + "bidQty": 50, + "bidprice": 20.75, + "askQty": 425, + "askPrice": 21.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23000.00", + "openInterest": 16576, + "changeinOpenInterest": 6949, + "pchangeinOpenInterest": 72.1824036563831, + "totalTradedVolume": 110523, + "impliedVolatility": 18.86, + "lastPrice": 48, + "change": -73.5, + "pChange": -60.4938271604938, + "totalBuyQuantity": 14975, + "totalSellQuantity": 27675, + "bidQty": 1300, + "bidprice": 48, + "askQty": 50, + "askPrice": 48.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23000.00", + "openInterest": 1419, + "changeinOpenInterest": -240, + "pchangeinOpenInterest": -14.4665461121157, + "totalTradedVolume": 3365, + "impliedVolatility": 0, + "lastPrice": 984.35, + "change": 464.9, + "pChange": 89.4985080373472, + "totalBuyQuantity": 10225, + "totalSellQuantity": 4525, + "bidQty": 50, + "bidprice": 987.2, + "askQty": 50, + "askPrice": 1006, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 23000, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23000.00", + "openInterest": 3517, + "changeinOpenInterest": 2374, + "pchangeinOpenInterest": 207.699037620297, + "totalTradedVolume": 15861, + "impliedVolatility": 17.6, + "lastPrice": 69.85, + "change": -90.1, + "pChange": -56.3301031572366, + "totalBuyQuantity": 5225, + "totalSellQuantity": 5450, + "bidQty": 25, + "bidprice": 68.1, + "askQty": 500, + "askPrice": 71.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23000, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23000.00", + "openInterest": 93, + "changeinOpenInterest": 54, + "pchangeinOpenInterest": 138.461538461538, + "totalTradedVolume": 190, + "impliedVolatility": 0, + "lastPrice": 1013.8, + "change": 423.8, + "pChange": 71.8305084745763, + "totalBuyQuantity": 2225, + "totalSellQuantity": 550, + "bidQty": 125, + "bidprice": 1026.1, + "askQty": 400, + "askPrice": 1086.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23000, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23000, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23000.00", + "openInterest": 484, + "changeinOpenInterest": 325, + "pchangeinOpenInterest": 204.40251572327, + "totalTradedVolume": 844, + "impliedVolatility": 17.39, + "lastPrice": 96.55, + "change": -98.15, + "pChange": -50.4108885464818, + "totalBuyQuantity": 2600, + "totalSellQuantity": 3250, + "bidQty": 25, + "bidprice": 87.05, + "askQty": 25, + "askPrice": 103.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23000.00", + "openInterest": 175166, + "changeinOpenInterest": 16020, + "pchangeinOpenInterest": 10.0662284945899, + "totalTradedVolume": 164641, + "impliedVolatility": 16.9, + "lastPrice": 114.15, + "change": -105.65, + "pChange": -48.066424021838, + "totalBuyQuantity": 36700, + "totalSellQuantity": 62850, + "bidQty": 25, + "bidprice": 114.05, + "askQty": 250, + "askPrice": 115, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23000.00", + "openInterest": 34279, + "changeinOpenInterest": 2849, + "pchangeinOpenInterest": 9.06458797327394, + "totalTradedVolume": 19713, + "impliedVolatility": 9.92, + "lastPrice": 1137.5, + "change": 419, + "pChange": 58.3159359777314, + "totalBuyQuantity": 9850, + "totalSellQuantity": 6325, + "bidQty": 25, + "bidprice": 1137, + "askQty": 50, + "askPrice": 1150, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23000, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 450, + "totalSellQuantity": 900, + "bidQty": 225, + "bidprice": 124.8, + "askQty": 900, + "askPrice": 150.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 23000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23000.00", + "openInterest": 36805, + "changeinOpenInterest": 1147, + "pchangeinOpenInterest": 3.21666947108643, + "totalTradedVolume": 19652, + "impliedVolatility": 15.9, + "lastPrice": 181.9, + "change": -112.6, + "pChange": -38.2342954159593, + "totalBuyQuantity": 7725, + "totalSellQuantity": 7475, + "bidQty": 25, + "bidprice": 178.8, + "askQty": 50, + "askPrice": 184.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23000.00", + "openInterest": 3129, + "changeinOpenInterest": -108, + "pchangeinOpenInterest": -3.33642261353105, + "totalTradedVolume": 2470, + "impliedVolatility": 8.33, + "lastPrice": 1358, + "change": 408, + "pChange": 42.9473684210526, + "totalBuyQuantity": 3950, + "totalSellQuantity": 4925, + "bidQty": 600, + "bidprice": 1346.5, + "askQty": 50, + "askPrice": 1380, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "27-Mar-2025", + "CE": { + "strikePrice": 23000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE23000.00", + "openInterest": 6762, + "changeinOpenInterest": -108, + "pchangeinOpenInterest": -1.57205240174672, + "totalTradedVolume": 1293, + "impliedVolatility": 0, + "lastPrice": 1644, + "change": 369.65, + "pChange": 29.0069447169145, + "totalBuyQuantity": 3750, + "totalSellQuantity": 1000, + "bidQty": 425, + "bidprice": 1626.75, + "askQty": 25, + "askPrice": 1661, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE23000.00", + "openInterest": 46184, + "changeinOpenInterest": -1403, + "pchangeinOpenInterest": -2.94828419526341, + "totalTradedVolume": 12500, + "impliedVolatility": 16.15, + "lastPrice": 275.05, + "change": -104.05, + "pChange": -27.4465840147718, + "totalBuyQuantity": 8725, + "totalSellQuantity": 16325, + "bidQty": 1050, + "bidprice": 275, + "askQty": 300, + "askPrice": 279, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "26-Jun-2025", + "CE": { + "strikePrice": 23000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE23000.00", + "openInterest": 1166, + "changeinOpenInterest": 217, + "pchangeinOpenInterest": 22.8661749209694, + "totalTradedVolume": 423, + "impliedVolatility": 0, + "lastPrice": 2000.25, + "change": 334.25, + "pChange": 20.063025210084, + "totalBuyQuantity": 3650, + "totalSellQuantity": 450, + "bidQty": 50, + "bidprice": 2002.55, + "askQty": 25, + "askPrice": 2025, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE23000.00", + "openInterest": 7968, + "changeinOpenInterest": 344, + "pchangeinOpenInterest": 4.51206715634837, + "totalTradedVolume": 1569, + "impliedVolatility": 16.8, + "lastPrice": 380.55, + "change": -100.2, + "pChange": -20.8424336973479, + "totalBuyQuantity": 4275, + "totalSellQuantity": 7950, + "bidQty": 25, + "bidprice": 381, + "askQty": 50, + "askPrice": 391.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "25-Sep-2025", + "PE": { + "strikePrice": 23000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE23000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 230.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "24-Dec-2025", + "CE": { + "strikePrice": 23000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE23000.00", + "openInterest": 1551, + "changeinOpenInterest": 309, + "pchangeinOpenInterest": 24.8792270531401, + "totalTradedVolume": 487, + "impliedVolatility": 0, + "lastPrice": 2833.05, + "change": 353.75, + "pChange": 14.2681402008631, + "totalBuyQuantity": 6200, + "totalSellQuantity": 725, + "bidQty": 25, + "bidprice": 2831.55, + "askQty": 25, + "askPrice": 2871, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE23000.00", + "openInterest": 8864, + "changeinOpenInterest": 243, + "pchangeinOpenInterest": 2.81869852685303, + "totalTradedVolume": 1199, + "impliedVolatility": 18.91, + "lastPrice": 575, + "change": -97.4500000000001, + "pChange": -14.4917837757454, + "totalBuyQuantity": 9350, + "totalSellQuantity": 8700, + "bidQty": 250, + "bidprice": 575, + "askQty": 250, + "askPrice": 580, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "25-Jun-2026", + "CE": { + "strikePrice": 23000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE23000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE23000.00", + "openInterest": 14, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 710, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 600, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 581.7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 23000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE23000.00", + "openInterest": 497, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 706.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2600, + "totalSellQuantity": 650, + "bidQty": 250, + "bidprice": 590.95, + "askQty": 100, + "askPrice": 850, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE23000.00", + "openInterest": 20, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2020, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 75, + "totalSellQuantity": 50, + "bidQty": 25, + "bidprice": 2917.45, + "askQty": 50, + "askPrice": 4500, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 23000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE23000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 574.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 23000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE23000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 548.7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 23000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE23000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 518.85, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 23000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE23000.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 700, + "change": 56.65, + "pChange": 8.80547136084557, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 487.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 23000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE23000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 375, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 456, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23050, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23050.00", + "openInterest": 1436, + "changeinOpenInterest": -52, + "pchangeinOpenInterest": -3.49462365591398, + "totalTradedVolume": 5866, + "impliedVolatility": 0, + "lastPrice": 857.9, + "change": 467.7, + "pChange": 119.861609431061, + "totalBuyQuantity": 104400, + "totalSellQuantity": 7400, + "bidQty": 175, + "bidprice": 872.35, + "askQty": 100, + "askPrice": 882.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23050.00", + "openInterest": 35884, + "changeinOpenInterest": 23339, + "pchangeinOpenInterest": 186.042247907533, + "totalTradedVolume": 532282, + "impliedVolatility": 21.16, + "lastPrice": 23, + "change": -67.9, + "pChange": -74.6974697469747, + "totalBuyQuantity": 15225, + "totalSellQuantity": 96275, + "bidQty": 2250, + "bidprice": 23, + "askQty": 1000, + "askPrice": 23.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23050, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23050.00", + "openInterest": 387, + "changeinOpenInterest": -145, + "pchangeinOpenInterest": -27.2556390977444, + "totalTradedVolume": 293, + "impliedVolatility": 0, + "lastPrice": 935.15, + "change": 457.4, + "pChange": 95.7404500261643, + "totalBuyQuantity": 6700, + "totalSellQuantity": 3100, + "bidQty": 100, + "bidprice": 805.9, + "askQty": 250, + "askPrice": 976.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23050.00", + "openInterest": 1004, + "changeinOpenInterest": 211, + "pchangeinOpenInterest": 26.6078184110971, + "totalTradedVolume": 18014, + "impliedVolatility": 18.39, + "lastPrice": 50, + "change": -83.65, + "pChange": -62.5888514777404, + "totalBuyQuantity": 4025, + "totalSellQuantity": 4275, + "bidQty": 1625, + "bidprice": 50, + "askQty": 500, + "askPrice": 56.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23050, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23050, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23050.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 700, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 0, + "bidQty": 1800, + "bidprice": 150.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23050, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23050.00", + "openInterest": 41, + "changeinOpenInterest": 28, + "pchangeinOpenInterest": 215.384615384615, + "totalTradedVolume": 71, + "impliedVolatility": 17.98, + "lastPrice": 82.45, + "change": -87.55, + "pChange": -51.5, + "totalBuyQuantity": 800, + "totalSellQuantity": 225, + "bidQty": 800, + "bidprice": 65.85, + "askQty": 175, + "askPrice": 99.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23050, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23050, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23050, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 3, + "impliedVolatility": 17.98, + "lastPrice": 115.3, + "change": -84.1, + "pChange": -42.1765295887663, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23050, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 23050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23050.00", + "openInterest": 479, + "changeinOpenInterest": -3, + "pchangeinOpenInterest": -0.622406639004149, + "totalTradedVolume": 14, + "impliedVolatility": 0, + "lastPrice": 960.2, + "change": 275.5, + "pChange": 40.2365999707901, + "totalBuyQuantity": 2000, + "totalSellQuantity": 1925, + "bidQty": 75, + "bidprice": 1075.3, + "askQty": 25, + "askPrice": 1178.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23050.00", + "openInterest": 1034, + "changeinOpenInterest": -29, + "pchangeinOpenInterest": -2.72812793979304, + "totalTradedVolume": 1280, + "impliedVolatility": 16.84, + "lastPrice": 122.4, + "change": -111.4, + "pChange": -47.6475620188195, + "totalBuyQuantity": 3900, + "totalSellQuantity": 1825, + "bidQty": 250, + "bidprice": 114.2, + "askQty": 900, + "askPrice": 132.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23050, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23050, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 600, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 50.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23050, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 23050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23050.00", + "openInterest": 50, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 8.69565217391304, + "totalTradedVolume": 12, + "impliedVolatility": 15.8, + "lastPrice": 189.7, + "change": -78.8, + "pChange": -29.3482309124767, + "totalBuyQuantity": 350, + "totalSellQuantity": 1800, + "bidQty": 350, + "bidprice": 168.15, + "askQty": 900, + "askPrice": 222.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23050.00", + "openInterest": 10, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1018.35, + "change": 1.55000000000007, + "pChange": 0.152439024390251, + "totalBuyQuantity": 925, + "totalSellQuantity": 2700, + "bidQty": 25, + "bidprice": 1222.85, + "askQty": 25, + "askPrice": 1404.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23100, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23100.00", + "openInterest": 99867, + "changeinOpenInterest": 35212, + "pchangeinOpenInterest": 54.4613718969917, + "totalTradedVolume": 1149061, + "impliedVolatility": 20.98, + "lastPrice": 26.5, + "change": -77.15, + "pChange": -74.433188615533, + "totalBuyQuantity": 23550, + "totalSellQuantity": 126450, + "bidQty": 1200, + "bidprice": 26, + "askQty": 1000, + "askPrice": 27.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23100.00", + "openInterest": 6532, + "changeinOpenInterest": -2768, + "pchangeinOpenInterest": -29.7634408602151, + "totalTradedVolume": 31498, + "impliedVolatility": 0, + "lastPrice": 827.55, + "change": 476, + "pChange": 135.400369790926, + "totalBuyQuantity": 36575, + "totalSellQuantity": 9200, + "bidQty": 175, + "bidprice": 825.8, + "askQty": 1800, + "askPrice": 835.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23100, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23100.00", + "openInterest": 553, + "changeinOpenInterest": -178, + "pchangeinOpenInterest": -24.3502051983584, + "totalTradedVolume": 832, + "impliedVolatility": 0, + "lastPrice": 885.9, + "change": 443.9, + "pChange": 100.429864253394, + "totalBuyQuantity": 9175, + "totalSellQuantity": 1375, + "bidQty": 50, + "bidprice": 884.65, + "askQty": 50, + "askPrice": 1029.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23100.00", + "openInterest": 5176, + "changeinOpenInterest": 2181, + "pchangeinOpenInterest": 72.8213689482471, + "totalTradedVolume": 48276, + "impliedVolatility": 18.55, + "lastPrice": 58.25, + "change": -87.85, + "pChange": -60.1300479123888, + "totalBuyQuantity": 7125, + "totalSellQuantity": 10400, + "bidQty": 100, + "bidprice": 55, + "askQty": 500, + "askPrice": 60.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23100, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23100, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23100.00", + "openInterest": 9, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -10, + "totalTradedVolume": 1, + "impliedVolatility": 0, + "lastPrice": 801, + "change": 281, + "pChange": 54.0384615384615, + "totalBuyQuantity": 2775, + "totalSellQuantity": 475, + "bidQty": 975, + "bidprice": 150.15, + "askQty": 475, + "askPrice": 1113.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23100, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23100.00", + "openInterest": 364, + "changeinOpenInterest": 194, + "pchangeinOpenInterest": 114.117647058824, + "totalTradedVolume": 1532, + "impliedVolatility": 17.07, + "lastPrice": 78.5, + "change": -107.75, + "pChange": -57.8523489932886, + "totalBuyQuantity": 2300, + "totalSellQuantity": 1225, + "bidQty": 50, + "bidprice": 77.05, + "askQty": 25, + "askPrice": 88.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23100, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23100, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23100, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23100.00", + "openInterest": 10, + "changeinOpenInterest": 8, + "pchangeinOpenInterest": 400, + "totalTradedVolume": 30, + "impliedVolatility": 17.27, + "lastPrice": 112.65, + "change": -72.35, + "pChange": -39.1081081081081, + "totalBuyQuantity": 4025, + "totalSellQuantity": 1275, + "bidQty": 25, + "bidprice": 53.25, + "askQty": 25, + "askPrice": 121.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23100, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23100.00", + "openInterest": 6627, + "changeinOpenInterest": 686, + "pchangeinOpenInterest": 11.5468776300286, + "totalTradedVolume": 15874, + "impliedVolatility": 16.34, + "lastPrice": 122.55, + "change": -124.85, + "pChange": -50.4648342764753, + "totalBuyQuantity": 1475, + "totalSellQuantity": 2950, + "bidQty": 50, + "bidprice": 120, + "askQty": 50, + "askPrice": 128, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23100.00", + "openInterest": 673, + "changeinOpenInterest": -100, + "pchangeinOpenInterest": -12.9366106080207, + "totalTradedVolume": 585, + "impliedVolatility": 10.67, + "lastPrice": 1053.25, + "change": 406.45, + "pChange": 62.8401360544218, + "totalBuyQuantity": 2875, + "totalSellQuantity": 4300, + "bidQty": 25, + "bidprice": 1056.85, + "askQty": 250, + "askPrice": 1080.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23100, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23100, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23100, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23100.00", + "openInterest": 6, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 50, + "totalTradedVolume": 5, + "impliedVolatility": 8.86, + "lastPrice": 1274, + "change": 384, + "pChange": 43.1460674157303, + "totalBuyQuantity": 2650, + "totalSellQuantity": 3150, + "bidQty": 25, + "bidprice": 1191.25, + "askQty": 25, + "askPrice": 1317.7, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23100.00", + "openInterest": 497, + "changeinOpenInterest": 151, + "pchangeinOpenInterest": 43.6416184971098, + "totalTradedVolume": 508, + "impliedVolatility": 15.76, + "lastPrice": 199.4, + "change": -117.9, + "pChange": -37.1572644185314, + "totalBuyQuantity": 2625, + "totalSellQuantity": 3125, + "bidQty": 200, + "bidprice": 178.5, + "askQty": 350, + "askPrice": 218.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23150, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23150.00", + "openInterest": 23616, + "changeinOpenInterest": 6563, + "pchangeinOpenInterest": 38.4858969096347, + "totalTradedVolume": 613793, + "impliedVolatility": 20.63, + "lastPrice": 29.6, + "change": -87.35, + "pChange": -74.690038477982, + "totalBuyQuantity": 16850, + "totalSellQuantity": 74100, + "bidQty": 1425, + "bidprice": 29.6, + "askQty": 1000, + "askPrice": 30.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23150.00", + "openInterest": 3157, + "changeinOpenInterest": -306, + "pchangeinOpenInterest": -8.83626913081144, + "totalTradedVolume": 16325, + "impliedVolatility": 0, + "lastPrice": 779.45, + "change": 465.1, + "pChange": 147.956099888659, + "totalBuyQuantity": 32850, + "totalSellQuantity": 9200, + "bidQty": 600, + "bidprice": 779, + "askQty": 1800, + "askPrice": 788.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23150, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23150.00", + "openInterest": 2506, + "changeinOpenInterest": 1464, + "pchangeinOpenInterest": 140.499040307102, + "totalTradedVolume": 17486, + "impliedVolatility": 18.27, + "lastPrice": 62.85, + "change": -97.4, + "pChange": -60.7800312012481, + "totalBuyQuantity": 850, + "totalSellQuantity": 3275, + "bidQty": 25, + "bidprice": 61, + "askQty": 25, + "askPrice": 64.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23150.00", + "openInterest": 407, + "changeinOpenInterest": -3, + "pchangeinOpenInterest": -0.731707317073171, + "totalTradedVolume": 275, + "impliedVolatility": 8.2, + "lastPrice": 840.85, + "change": 435, + "pChange": 107.182456572625, + "totalBuyQuantity": 10825, + "totalSellQuantity": 3325, + "bidQty": 100, + "bidprice": 716.9, + "askQty": 50, + "askPrice": 884.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23150, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 23150, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23150.00", + "openInterest": 118, + "changeinOpenInterest": 112, + "pchangeinOpenInterest": 1866.66666666667, + "totalTradedVolume": 209, + "impliedVolatility": 17.34, + "lastPrice": 90.8, + "change": -104.2, + "pChange": -53.4358974358974, + "totalBuyQuantity": 2300, + "totalSellQuantity": 1025, + "bidQty": 1800, + "bidprice": 35.9, + "askQty": 25, + "askPrice": 119.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23150, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23150.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 471.2, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3600, + "totalSellQuantity": 950, + "bidQty": 1800, + "bidprice": 110.1, + "askQty": 25, + "askPrice": 1061.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23150, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23150, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23150, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23150.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 3, + "impliedVolatility": 20.74, + "lastPrice": 188.35, + "change": -41.85, + "pChange": -18.1798436142485, + "totalBuyQuantity": 2100, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 67.05, + "askQty": 900, + "askPrice": 146, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23150, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 23150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23150.00", + "openInterest": 616, + "changeinOpenInterest": 142, + "pchangeinOpenInterest": 29.957805907173, + "totalTradedVolume": 361, + "impliedVolatility": 11, + "lastPrice": 1012.85, + "change": 400.5, + "pChange": 65.4037723524128, + "totalBuyQuantity": 2425, + "totalSellQuantity": 2975, + "bidQty": 25, + "bidprice": 982.55, + "askQty": 75, + "askPrice": 1046.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23150.00", + "openInterest": 1147, + "changeinOpenInterest": 63, + "pchangeinOpenInterest": 5.81180811808118, + "totalTradedVolume": 1537, + "impliedVolatility": 16.57, + "lastPrice": 137.3, + "change": -124.3, + "pChange": -47.5152905198777, + "totalBuyQuantity": 4575, + "totalSellQuantity": 3450, + "bidQty": 900, + "bidprice": 116.3, + "askQty": 900, + "askPrice": 144.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23150, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23150, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23150, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 23150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23150.00", + "openInterest": 12, + "changeinOpenInterest": 6, + "pchangeinOpenInterest": 100, + "totalTradedVolume": 18, + "impliedVolatility": 16.18, + "lastPrice": 224.05, + "change": -70.3, + "pChange": -23.8831323254629, + "totalBuyQuantity": 2700, + "totalSellQuantity": 4800, + "bidQty": 900, + "bidprice": 172.85, + "askQty": 900, + "askPrice": 228, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23150.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 841.55, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 2975, + "bidQty": 900, + "bidprice": 798.05, + "askQty": 1775, + "askPrice": 1447.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23200, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23200.00", + "openInterest": 14620, + "changeinOpenInterest": -6747, + "pchangeinOpenInterest": -31.5767304722235, + "totalTradedVolume": 141244, + "impliedVolatility": 0, + "lastPrice": 733.4, + "change": 452.6, + "pChange": 161.182336182336, + "totalBuyQuantity": 41800, + "totalSellQuantity": 11500, + "bidQty": 50, + "bidprice": 733.1, + "askQty": 600, + "askPrice": 742.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23200.00", + "openInterest": 136799, + "changeinOpenInterest": 37683, + "pchangeinOpenInterest": 38.0190887445014, + "totalTradedVolume": 1653128, + "impliedVolatility": 20.44, + "lastPrice": 34, + "change": -99, + "pChange": -74.4360902255639, + "totalBuyQuantity": 27100, + "totalSellQuantity": 190275, + "bidQty": 25, + "bidprice": 33.15, + "askQty": 250, + "askPrice": 34, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23200, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23200.00", + "openInterest": 8554, + "changeinOpenInterest": 302, + "pchangeinOpenInterest": 3.6597188560349, + "totalTradedVolume": 70930, + "impliedVolatility": 17.78, + "lastPrice": 65.55, + "change": -109.15, + "pChange": -62.4785346307956, + "totalBuyQuantity": 4000, + "totalSellQuantity": 14975, + "bidQty": 75, + "bidprice": 65.55, + "askQty": 50, + "askPrice": 68.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23200.00", + "openInterest": 1155, + "changeinOpenInterest": -1150, + "pchangeinOpenInterest": -49.8915401301518, + "totalTradedVolume": 6903, + "impliedVolatility": 12.52, + "lastPrice": 809.15, + "change": 436.7, + "pChange": 117.250637669486, + "totalBuyQuantity": 15175, + "totalSellQuantity": 4650, + "bidQty": 75, + "bidprice": 801.2, + "askQty": 50, + "askPrice": 827.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23200, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 23200, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23200.00", + "openInterest": 1971, + "changeinOpenInterest": 1458, + "pchangeinOpenInterest": 284.21052631579, + "totalTradedVolume": 5562, + "impliedVolatility": 17.1, + "lastPrice": 96.6, + "change": -121.35, + "pChange": -55.6779077770131, + "totalBuyQuantity": 2150, + "totalSellQuantity": 2825, + "bidQty": 150, + "bidprice": 89.4, + "askQty": 25, + "askPrice": 105.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23200, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23200.00", + "openInterest": 228, + "changeinOpenInterest": 161, + "pchangeinOpenInterest": 240.298507462687, + "totalTradedVolume": 453, + "impliedVolatility": 11.42, + "lastPrice": 860.95, + "change": 414.35, + "pChange": 92.7787729511868, + "totalBuyQuantity": 4575, + "totalSellQuantity": 875, + "bidQty": 75, + "bidprice": 90.2, + "askQty": 25, + "askPrice": 920.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23200, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23200, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23200.00", + "openInterest": 157, + "changeinOpenInterest": 136, + "pchangeinOpenInterest": 647.619047619048, + "totalTradedVolume": 195, + "impliedVolatility": 16.3, + "lastPrice": 115.55, + "change": -129.65, + "pChange": -52.8752039151713, + "totalBuyQuantity": 3200, + "totalSellQuantity": 3050, + "bidQty": 200, + "bidprice": 109.45, + "askQty": 350, + "askPrice": 132.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23200, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23200, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23200.00", + "openInterest": 13397, + "changeinOpenInterest": 1273, + "pchangeinOpenInterest": 10.4998350379413, + "totalTradedVolume": 29467, + "impliedVolatility": 16.52, + "lastPrice": 146.95, + "change": -131.55, + "pChange": -47.2351885098743, + "totalBuyQuantity": 7850, + "totalSellQuantity": 14125, + "bidQty": 25, + "bidprice": 135, + "askQty": 1775, + "askPrice": 146.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23200.00", + "openInterest": 2875, + "changeinOpenInterest": -1179, + "pchangeinOpenInterest": -29.0823877651702, + "totalTradedVolume": 3544, + "impliedVolatility": 11.32, + "lastPrice": 973.75, + "change": 397.65, + "pChange": 69.024474917549, + "totalBuyQuantity": 4050, + "totalSellQuantity": 6025, + "bidQty": 50, + "bidprice": 963.55, + "askQty": 175, + "askPrice": 998.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23200, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23200, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 146.85, + "askQty": 900, + "askPrice": 187.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23200, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 23200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23200.00", + "openInterest": 820, + "changeinOpenInterest": 187, + "pchangeinOpenInterest": 29.5418641390205, + "totalTradedVolume": 817, + "impliedVolatility": 15.47, + "lastPrice": 214, + "change": -134.25, + "pChange": -38.5498923187365, + "totalBuyQuantity": 2475, + "totalSellQuantity": 4350, + "bidQty": 50, + "bidprice": 210, + "askQty": 25, + "askPrice": 225.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23200.00", + "openInterest": 36, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 5.88235294117647, + "totalTradedVolume": 31, + "impliedVolatility": 9.31, + "lastPrice": 1193.75, + "change": 376.55, + "pChange": 46.078071463534, + "totalBuyQuantity": 2825, + "totalSellQuantity": 5875, + "bidQty": 25, + "bidprice": 1163.4, + "askQty": 25, + "askPrice": 1236.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23250, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23250.00", + "openInterest": 6124, + "changeinOpenInterest": -1808, + "pchangeinOpenInterest": -22.7937468482098, + "totalTradedVolume": 56069, + "impliedVolatility": 0, + "lastPrice": 685.7, + "change": 437.35, + "pChange": 176.1022750151, + "totalBuyQuantity": 22600, + "totalSellQuantity": 9475, + "bidQty": 600, + "bidprice": 687.8, + "askQty": 1800, + "askPrice": 696.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23250.00", + "openInterest": 38966, + "changeinOpenInterest": 18394, + "pchangeinOpenInterest": 89.4127940890531, + "totalTradedVolume": 761718, + "impliedVolatility": 20.25, + "lastPrice": 39, + "change": -111.35, + "pChange": -74.0605254406385, + "totalBuyQuantity": 9025, + "totalSellQuantity": 86125, + "bidQty": 25, + "bidprice": 38, + "askQty": 1250, + "askPrice": 39, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23250, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23250.00", + "openInterest": 432, + "changeinOpenInterest": -47, + "pchangeinOpenInterest": -9.81210855949896, + "totalTradedVolume": 977, + "impliedVolatility": 12.05, + "lastPrice": 760.3, + "change": 418.9, + "pChange": 122.70064440539, + "totalBuyQuantity": 13150, + "totalSellQuantity": 3025, + "bidQty": 100, + "bidprice": 692.05, + "askQty": 75, + "askPrice": 792.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23250.00", + "openInterest": 3092, + "changeinOpenInterest": 2305, + "pchangeinOpenInterest": 292.884371029225, + "totalTradedVolume": 20478, + "impliedVolatility": 18.01, + "lastPrice": 76.75, + "change": -114.1, + "pChange": -59.7851716007336, + "totalBuyQuantity": 2575, + "totalSellQuantity": 10825, + "bidQty": 500, + "bidprice": 57.2, + "askQty": 500, + "askPrice": 78.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23250, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23250, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23250.00", + "openInterest": 68, + "changeinOpenInterest": 60, + "pchangeinOpenInterest": 750, + "totalTradedVolume": 88, + "impliedVolatility": 0, + "lastPrice": 567.95, + "change": 147.9, + "pChange": 35.2100940364242, + "totalBuyQuantity": 6300, + "totalSellQuantity": 925, + "bidQty": 900, + "bidprice": 80.15, + "askQty": 25, + "askPrice": 933.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23250, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23250.00", + "openInterest": 188, + "changeinOpenInterest": 122, + "pchangeinOpenInterest": 184.848484848485, + "totalTradedVolume": 844, + "impliedVolatility": 16.95, + "lastPrice": 104.25, + "change": -129.15, + "pChange": -55.3341902313625, + "totalBuyQuantity": 900, + "totalSellQuantity": 750, + "bidQty": 900, + "bidprice": 76.05, + "askQty": 425, + "askPrice": 125.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23250, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23250, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3125, + "totalSellQuantity": 1650, + "bidQty": 900, + "bidprice": 62.85, + "askQty": 900, + "askPrice": 152, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23250, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23250, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23250.00", + "openInterest": 1535, + "changeinOpenInterest": 110, + "pchangeinOpenInterest": 7.71929824561404, + "totalTradedVolume": 1705, + "impliedVolatility": 16.32, + "lastPrice": 154.15, + "change": -143.35, + "pChange": -48.1848739495798, + "totalBuyQuantity": 4925, + "totalSellQuantity": 2775, + "bidQty": 500, + "bidprice": 135.15, + "askQty": 900, + "askPrice": 167.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23250.00", + "openInterest": 407, + "changeinOpenInterest": 26, + "pchangeinOpenInterest": 6.8241469816273, + "totalTradedVolume": 265, + "impliedVolatility": 11.21, + "lastPrice": 929.35, + "change": 386.95, + "pChange": 71.3403392330384, + "totalBuyQuantity": 4575, + "totalSellQuantity": 4725, + "bidQty": 75, + "bidprice": 896.25, + "askQty": 75, + "askPrice": 985.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23250, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23250, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23250.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 21.09, + "lastPrice": 301.25, + "change": -71.6, + "pChange": -19.2034330159582, + "totalBuyQuantity": 1800, + "totalSellQuantity": 900, + "bidQty": 1800, + "bidprice": 143.55, + "askQty": 900, + "askPrice": 205.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23250, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23250.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 875.75, + "change": -8.95000000000005, + "pChange": -1.01164236464339, + "totalBuyQuantity": 875, + "totalSellQuantity": 2350, + "bidQty": 850, + "bidprice": 920.2, + "askQty": 200, + "askPrice": 1357.2, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23250.00", + "openInterest": 430, + "changeinOpenInterest": 378, + "pchangeinOpenInterest": 726.923076923077, + "totalTradedVolume": 596, + "impliedVolatility": 15.51, + "lastPrice": 227.4, + "change": -149.85, + "pChange": -39.7216699801193, + "totalBuyQuantity": 2350, + "totalSellQuantity": 4800, + "bidQty": 25, + "bidprice": 205, + "askQty": 1800, + "askPrice": 244.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23300.00", + "openInterest": 44881, + "changeinOpenInterest": -60593, + "pchangeinOpenInterest": -57.4482810929708, + "totalTradedVolume": 606621, + "impliedVolatility": 0, + "lastPrice": 644.25, + "change": 428.3, + "pChange": 198.332947441537, + "totalBuyQuantity": 65075, + "totalSellQuantity": 52225, + "bidQty": 25, + "bidprice": 643.8, + "askQty": 25, + "askPrice": 650.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23300.00", + "openInterest": 157849, + "changeinOpenInterest": 6783, + "pchangeinOpenInterest": 4.49009042405306, + "totalTradedVolume": 2216083, + "impliedVolatility": 19.88, + "lastPrice": 43.4, + "change": -127.5, + "pChange": -74.6050321825629, + "totalBuyQuantity": 45725, + "totalSellQuantity": 367525, + "bidQty": 50, + "bidprice": 42.75, + "askQty": 1000, + "askPrice": 43.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23300, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23300, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23300.00", + "openInterest": 12717, + "changeinOpenInterest": 5765, + "pchangeinOpenInterest": 82.9257767548907, + "totalTradedVolume": 82965, + "impliedVolatility": 17.46, + "lastPrice": 79.55, + "change": -132.2, + "pChange": -62.4321133412042, + "totalBuyQuantity": 7050, + "totalSellQuantity": 36100, + "bidQty": 100, + "bidprice": 76.05, + "askQty": 25, + "askPrice": 80.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23300, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23300.00", + "openInterest": 2973, + "changeinOpenInterest": -960, + "pchangeinOpenInterest": -24.4088482074752, + "totalTradedVolume": 21770, + "impliedVolatility": 13.07, + "lastPrice": 723.5, + "change": 418.45, + "pChange": 137.174233732175, + "totalBuyQuantity": 19675, + "totalSellQuantity": 5350, + "bidQty": 50, + "bidprice": 710.5, + "askQty": 25, + "askPrice": 739.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23300, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23300, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23300.00", + "openInterest": 181, + "changeinOpenInterest": -82, + "pchangeinOpenInterest": -31.1787072243346, + "totalTradedVolume": 1054, + "impliedVolatility": 12.41, + "lastPrice": 783.9, + "change": 392.6, + "pChange": 100.332225913621, + "totalBuyQuantity": 4950, + "totalSellQuantity": 525, + "bidQty": 25, + "bidprice": 401.15, + "askQty": 100, + "askPrice": 813.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23300, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23300.00", + "openInterest": 997, + "changeinOpenInterest": 560, + "pchangeinOpenInterest": 128.146453089245, + "totalTradedVolume": 4396, + "impliedVolatility": 16.48, + "lastPrice": 107.45, + "change": -148.7, + "pChange": -58.0519227015421, + "totalBuyQuantity": 1425, + "totalSellQuantity": 2175, + "bidQty": 100, + "bidprice": 107.45, + "askQty": 25, + "askPrice": 116.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23300, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23300, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23300.00", + "openInterest": 85, + "changeinOpenInterest": 75, + "pchangeinOpenInterest": 750, + "totalTradedVolume": 166, + "impliedVolatility": 16.56, + "lastPrice": 142.4, + "change": -144.9, + "pChange": -50.4350852767142, + "totalBuyQuantity": 3100, + "totalSellQuantity": 1950, + "bidQty": 200, + "bidprice": 130.1, + "askQty": 700, + "askPrice": 152.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23300, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23300.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 0, + "bidQty": 1800, + "bidprice": 100.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23300, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 23300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23300.00", + "openInterest": 2444, + "changeinOpenInterest": -1104, + "pchangeinOpenInterest": -31.1161217587373, + "totalTradedVolume": 5916, + "impliedVolatility": 11.59, + "lastPrice": 893.7, + "change": 378.85, + "pChange": 73.5845391861707, + "totalBuyQuantity": 5250, + "totalSellQuantity": 6900, + "bidQty": 100, + "bidprice": 871.25, + "askQty": 225, + "askPrice": 915.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23300.00", + "openInterest": 13235, + "changeinOpenInterest": 1472, + "pchangeinOpenInterest": 12.513814503103, + "totalTradedVolume": 28583, + "impliedVolatility": 15.79, + "lastPrice": 154.45, + "change": -157.7, + "pChange": -50.5205830530194, + "totalBuyQuantity": 7250, + "totalSellQuantity": 8575, + "bidQty": 1775, + "bidprice": 154.55, + "askQty": 25, + "askPrice": 163, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23300, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 23300, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23300.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23300, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23300.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 19.64, + "lastPrice": 277.1, + "change": -116.9, + "pChange": -29.6700507614213, + "totalBuyQuantity": 1800, + "totalSellQuantity": 1050, + "bidQty": 900, + "bidprice": 170.1, + "askQty": 300, + "askPrice": 201.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23300, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23300, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23300.00", + "openInterest": 745, + "changeinOpenInterest": -40, + "pchangeinOpenInterest": -5.09554140127389, + "totalTradedVolume": 864, + "impliedVolatility": 9.7, + "lastPrice": 1117.1, + "change": 358.3, + "pChange": 47.2192936215076, + "totalBuyQuantity": 2325, + "totalSellQuantity": 3800, + "bidQty": 100, + "bidprice": 1082.4, + "askQty": 25, + "askPrice": 1153.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23300, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23300.00", + "openInterest": 1616, + "changeinOpenInterest": 511, + "pchangeinOpenInterest": 46.2443438914027, + "totalTradedVolume": 2074, + "impliedVolatility": 15.3, + "lastPrice": 233.2, + "change": -153.95, + "pChange": -39.7649489861811, + "totalBuyQuantity": 3600, + "totalSellQuantity": 6825, + "bidQty": 25, + "bidprice": 218.35, + "askQty": 300, + "askPrice": 242, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23350.00", + "openInterest": 61717, + "changeinOpenInterest": 4977, + "pchangeinOpenInterest": 8.77158970743743, + "totalTradedVolume": 999230, + "impliedVolatility": 19.66, + "lastPrice": 49.5, + "change": -143.25, + "pChange": -74.3190661478599, + "totalBuyQuantity": 15775, + "totalSellQuantity": 156225, + "bidQty": 100, + "bidprice": 48, + "askQty": 1575, + "askPrice": 49.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23350.00", + "openInterest": 34510, + "changeinOpenInterest": -22464, + "pchangeinOpenInterest": -39.428511250746, + "totalTradedVolume": 353535, + "impliedVolatility": 11.66, + "lastPrice": 602.25, + "change": 413.95, + "pChange": 219.835369091875, + "totalBuyQuantity": 28450, + "totalSellQuantity": 9750, + "bidQty": 175, + "bidprice": 598.9, + "askQty": 1800, + "askPrice": 607.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23350, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23350, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23350.00", + "openInterest": 2762, + "changeinOpenInterest": 1245, + "pchangeinOpenInterest": 82.0698747528016, + "totalTradedVolume": 20069, + "impliedVolatility": 17.18, + "lastPrice": 86, + "change": -145.45, + "pChange": -62.8429466407431, + "totalBuyQuantity": 4575, + "totalSellQuantity": 6100, + "bidQty": 25, + "bidprice": 86, + "askQty": 500, + "askPrice": 93.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23350, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23350.00", + "openInterest": 895, + "changeinOpenInterest": -1080, + "pchangeinOpenInterest": -54.6835443037975, + "totalTradedVolume": 6370, + "impliedVolatility": 13.5, + "lastPrice": 684.35, + "change": 405.1, + "pChange": 145.067144136079, + "totalBuyQuantity": 17050, + "totalSellQuantity": 4350, + "bidQty": 100, + "bidprice": 668.75, + "askQty": 150, + "askPrice": 695.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23350, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23350, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23350.00", + "openInterest": 80, + "changeinOpenInterest": -65, + "pchangeinOpenInterest": -44.8275862068966, + "totalTradedVolume": 443, + "impliedVolatility": 12.08, + "lastPrice": 737.45, + "change": 382.5, + "pChange": 107.761656571348, + "totalBuyQuantity": 8675, + "totalSellQuantity": 0, + "bidQty": 500, + "bidprice": 529.3, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23350, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23350.00", + "openInterest": 140, + "changeinOpenInterest": 69, + "pchangeinOpenInterest": 97.1830985915493, + "totalTradedVolume": 571, + "impliedVolatility": 16.79, + "lastPrice": 123.6, + "change": -152, + "pChange": -55.1523947750363, + "totalBuyQuantity": 1225, + "totalSellQuantity": 1875, + "bidQty": 25, + "bidprice": 110.75, + "askQty": 300, + "askPrice": 140.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23350, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23350, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23350.00", + "openInterest": 11, + "changeinOpenInterest": 11, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 14, + "impliedVolatility": 20.63, + "lastPrice": 240.55, + "change": -61.1, + "pChange": -20.2552627216973, + "totalBuyQuantity": 2950, + "totalSellQuantity": 3000, + "bidQty": 900, + "bidprice": 85.55, + "askQty": 900, + "askPrice": 211.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23350, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23350.00", + "openInterest": 2, + "changeinOpenInterest": -8, + "pchangeinOpenInterest": -80, + "totalTradedVolume": 15, + "impliedVolatility": 0, + "lastPrice": 610, + "change": 165.75, + "pChange": 37.3100731570062, + "totalBuyQuantity": 2700, + "totalSellQuantity": 0, + "bidQty": 900, + "bidprice": 120.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23350, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23350.00", + "openInterest": 1162, + "changeinOpenInterest": -127, + "pchangeinOpenInterest": -9.85259891388673, + "totalTradedVolume": 2871, + "impliedVolatility": 16.65, + "lastPrice": 186.5, + "change": -143.3, + "pChange": -43.4505761067314, + "totalBuyQuantity": 5350, + "totalSellQuantity": 7325, + "bidQty": 900, + "bidprice": 159.1, + "askQty": 1800, + "askPrice": 186.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23350.00", + "openInterest": 584, + "changeinOpenInterest": -76, + "pchangeinOpenInterest": -11.5151515151515, + "totalTradedVolume": 993, + "impliedVolatility": 11.13, + "lastPrice": 844.3, + "change": 357.85, + "pChange": 73.5635728235173, + "totalBuyQuantity": 3125, + "totalSellQuantity": 4925, + "bidQty": 75, + "bidprice": 828.95, + "askQty": 100, + "askPrice": 909.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23350, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23350, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23350.00", + "openInterest": 4, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 5, + "impliedVolatility": 17, + "lastPrice": 221.7, + "change": -194.2, + "pChange": -46.6939168069247, + "totalBuyQuantity": 1800, + "totalSellQuantity": 975, + "bidQty": 900, + "bidprice": 175.65, + "askQty": 75, + "askPrice": 221.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23350, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23350, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23350, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23350.00", + "openInterest": 91, + "changeinOpenInterest": 30, + "pchangeinOpenInterest": 49.1803278688525, + "totalTradedVolume": 120, + "impliedVolatility": 9.01, + "lastPrice": 1059.25, + "change": 338.15, + "pChange": 46.8936347247261, + "totalBuyQuantity": 950, + "totalSellQuantity": 3575, + "bidQty": 25, + "bidprice": 1066.15, + "askQty": 900, + "askPrice": 1187, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23350, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23350.00", + "openInterest": 151, + "changeinOpenInterest": 119, + "pchangeinOpenInterest": 371.875, + "totalTradedVolume": 256, + "impliedVolatility": 15.36, + "lastPrice": 248.5, + "change": -152.6, + "pChange": -38.0453752181501, + "totalBuyQuantity": 3650, + "totalSellQuantity": 3925, + "bidQty": 25, + "bidprice": 241, + "askQty": 25, + "askPrice": 274.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23400, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23400.00", + "openInterest": 174634, + "changeinOpenInterest": 50682, + "pchangeinOpenInterest": 40.8884084161611, + "totalTradedVolume": 2832696, + "impliedVolatility": 19.28, + "lastPrice": 55.1, + "change": -160.35, + "pChange": -74.4256207936876, + "totalBuyQuantity": 45550, + "totalSellQuantity": 417650, + "bidQty": 25, + "bidprice": 55.15, + "askQty": 1000, + "askPrice": 55.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23400.00", + "openInterest": 67013, + "changeinOpenInterest": -44812, + "pchangeinOpenInterest": -40.0733288620613, + "totalTradedVolume": 1487702, + "impliedVolatility": 11.75, + "lastPrice": 555.35, + "change": 393.25, + "pChange": 242.597162245527, + "totalBuyQuantity": 47300, + "totalSellQuantity": 11700, + "bidQty": 25, + "bidprice": 555.35, + "askQty": 1800, + "askPrice": 562.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23400, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23400, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23400.00", + "openInterest": 5219, + "changeinOpenInterest": -261, + "pchangeinOpenInterest": -4.76277372262774, + "totalTradedVolume": 51600, + "impliedVolatility": 12.95, + "lastPrice": 636.4, + "change": 387.8, + "pChange": 155.993563958166, + "totalBuyQuantity": 19325, + "totalSellQuantity": 5525, + "bidQty": 25, + "bidprice": 638.2, + "askQty": 225, + "askPrice": 653, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23400, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23400.00", + "openInterest": 15834, + "changeinOpenInterest": 9989, + "pchangeinOpenInterest": 170.898203592814, + "totalTradedVolume": 121953, + "impliedVolatility": 17.12, + "lastPrice": 95.95, + "change": -157.6, + "pChange": -62.1573654111615, + "totalBuyQuantity": 6200, + "totalSellQuantity": 40925, + "bidQty": 25, + "bidprice": 94.5, + "askQty": 125, + "askPrice": 95.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23400, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23400, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23400.00", + "openInterest": 250, + "changeinOpenInterest": 91, + "pchangeinOpenInterest": 57.2327044025157, + "totalTradedVolume": 1599, + "impliedVolatility": 12.66, + "lastPrice": 704.2, + "change": 373.7, + "pChange": 113.071104387292, + "totalBuyQuantity": 10150, + "totalSellQuantity": 1000, + "bidQty": 25, + "bidprice": 668.85, + "askQty": 75, + "askPrice": 726.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23400, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23400.00", + "openInterest": 1131, + "changeinOpenInterest": 790, + "pchangeinOpenInterest": 231.671554252199, + "totalTradedVolume": 5287, + "impliedVolatility": 16.39, + "lastPrice": 128.9, + "change": -167.25, + "pChange": -56.4747594124599, + "totalBuyQuantity": 1950, + "totalSellQuantity": 2850, + "bidQty": 150, + "bidprice": 123.25, + "askQty": 50, + "askPrice": 130, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23400, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23400, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23400.00", + "openInterest": 64, + "changeinOpenInterest": 37, + "pchangeinOpenInterest": 137.037037037037, + "totalTradedVolume": 91, + "impliedVolatility": 16.37, + "lastPrice": 163.55, + "change": -165.7, + "pChange": -50.3264996203493, + "totalBuyQuantity": 2950, + "totalSellQuantity": 2600, + "bidQty": 25, + "bidprice": 151.2, + "askQty": 900, + "askPrice": 178, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23400, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23400.00", + "openInterest": 10, + "changeinOpenInterest": -11, + "pchangeinOpenInterest": -52.3809523809524, + "totalTradedVolume": 61, + "impliedVolatility": 13.25, + "lastPrice": 781.8, + "change": 383.8, + "pChange": 96.4321608040201, + "totalBuyQuantity": 5600, + "totalSellQuantity": 525, + "bidQty": 25, + "bidprice": 737.3, + "askQty": 275, + "askPrice": 836.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23400, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 23400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23400.00", + "openInterest": 3052, + "changeinOpenInterest": -1584, + "pchangeinOpenInterest": -34.167385677308, + "totalTradedVolume": 12385, + "impliedVolatility": 11.71, + "lastPrice": 815, + "change": 360.95, + "pChange": 79.4956502587821, + "totalBuyQuantity": 5375, + "totalSellQuantity": 5650, + "bidQty": 25, + "bidprice": 806.3, + "askQty": 25, + "askPrice": 826, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23400.00", + "openInterest": 13258, + "changeinOpenInterest": 1361, + "pchangeinOpenInterest": 11.4398587879297, + "totalTradedVolume": 42195, + "impliedVolatility": 15.76, + "lastPrice": 179, + "change": -169.25, + "pChange": -48.6001435750179, + "totalBuyQuantity": 5200, + "totalSellQuantity": 13900, + "bidQty": 25, + "bidprice": 176.4, + "askQty": 50, + "askPrice": 179, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23400, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 23400, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23400.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 0, + "bidQty": 900, + "bidprice": 788.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23400, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23400.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 900, + "bidQty": 300, + "bidprice": 183.15, + "askQty": 900, + "askPrice": 232.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23400, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 23400, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23400.00", + "openInterest": 1458, + "changeinOpenInterest": 991, + "pchangeinOpenInterest": 212.20556745182, + "totalTradedVolume": 2005, + "impliedVolatility": 15.65, + "lastPrice": 271.75, + "change": -149.75, + "pChange": -35.5278766310795, + "totalBuyQuantity": 2500, + "totalSellQuantity": 1825, + "bidQty": 125, + "bidprice": 250.8, + "askQty": 25, + "askPrice": 264.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23400, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23400.00", + "openInterest": 476, + "changeinOpenInterest": 114, + "pchangeinOpenInterest": 31.4917127071823, + "totalTradedVolume": 444, + "impliedVolatility": 9.92, + "lastPrice": 1040.5, + "change": 356.3, + "pChange": 52.0754165448699, + "totalBuyQuantity": 3100, + "totalSellQuantity": 4075, + "bidQty": 300, + "bidprice": 1000, + "askQty": 900, + "askPrice": 1086.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23450, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23450.00", + "openInterest": 30613, + "changeinOpenInterest": 9311, + "pchangeinOpenInterest": 43.7095108440522, + "totalTradedVolume": 948477, + "impliedVolatility": 12.78, + "lastPrice": 514.2, + "change": 374.6, + "pChange": 268.338108882522, + "totalBuyQuantity": 27550, + "totalSellQuantity": 7650, + "bidQty": 600, + "bidprice": 512.55, + "askQty": 25, + "askPrice": 518.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23450.00", + "openInterest": 57613, + "changeinOpenInterest": 43571, + "pchangeinOpenInterest": 310.290556900726, + "totalTradedVolume": 1371396, + "impliedVolatility": 19.15, + "lastPrice": 63.5, + "change": -177.8, + "pChange": -73.6842105263158, + "totalBuyQuantity": 18425, + "totalSellQuantity": 171775, + "bidQty": 1900, + "bidprice": 62, + "askQty": 25, + "askPrice": 63.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23450, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23450, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23450.00", + "openInterest": 4744, + "changeinOpenInterest": 4028, + "pchangeinOpenInterest": 562.569832402235, + "totalTradedVolume": 32937, + "impliedVolatility": 17.29, + "lastPrice": 110, + "change": -164.5, + "pChange": -59.9271402550091, + "totalBuyQuantity": 4475, + "totalSellQuantity": 10675, + "bidQty": 100, + "bidprice": 105.1, + "askQty": 25, + "askPrice": 111, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23450, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23450.00", + "openInterest": 685, + "changeinOpenInterest": -206, + "pchangeinOpenInterest": -23.1200897867565, + "totalTradedVolume": 12957, + "impliedVolatility": 12.18, + "lastPrice": 586.35, + "change": 361.4, + "pChange": 160.657923983107, + "totalBuyQuantity": 11050, + "totalSellQuantity": 4350, + "bidQty": 725, + "bidprice": 593.05, + "askQty": 150, + "askPrice": 615.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23450, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23450, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23450.00", + "openInterest": 86, + "changeinOpenInterest": -42, + "pchangeinOpenInterest": -32.8125, + "totalTradedVolume": 681, + "impliedVolatility": 12.27, + "lastPrice": 658.25, + "change": 354.4, + "pChange": 116.636498272174, + "totalBuyQuantity": 8775, + "totalSellQuantity": 1775, + "bidQty": 650, + "bidprice": 630.25, + "askQty": 25, + "askPrice": 1199.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23450, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23450.00", + "openInterest": 187, + "changeinOpenInterest": 113, + "pchangeinOpenInterest": 152.702702702703, + "totalTradedVolume": 708, + "impliedVolatility": 16.02, + "lastPrice": 135, + "change": -186.55, + "pChange": -58.0158606748562, + "totalBuyQuantity": 1225, + "totalSellQuantity": 2575, + "bidQty": 25, + "bidprice": 130, + "askQty": 900, + "askPrice": 152.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23450, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23450, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23450.00", + "openInterest": 2, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 18.32, + "lastPrice": 219.55, + "change": -41.45, + "pChange": -15.8812260536398, + "totalBuyQuantity": 2125, + "totalSellQuantity": 2800, + "bidQty": 100, + "bidprice": 138.8, + "askQty": 1800, + "askPrice": 208.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23450, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23450.00", + "openInterest": 1, + "changeinOpenInterest": -3, + "pchangeinOpenInterest": -75, + "totalTradedVolume": 13, + "impliedVolatility": 0, + "lastPrice": 630, + "change": 244.5, + "pChange": 63.4241245136187, + "totalBuyQuantity": 4075, + "totalSellQuantity": 0, + "bidQty": 475, + "bidprice": 65.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23450, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 23450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23450.00", + "openInterest": 786, + "changeinOpenInterest": 141, + "pchangeinOpenInterest": 21.8604651162791, + "totalTradedVolume": 1857, + "impliedVolatility": 11.53, + "lastPrice": 771.95, + "change": 346.15, + "pChange": 81.2940347581024, + "totalBuyQuantity": 3900, + "totalSellQuantity": 5425, + "bidQty": 25, + "bidprice": 754.55, + "askQty": 100, + "askPrice": 809.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23450.00", + "openInterest": 989, + "changeinOpenInterest": 295, + "pchangeinOpenInterest": 42.507204610951, + "totalTradedVolume": 2970, + "impliedVolatility": 15.64, + "lastPrice": 189.9, + "change": -180.8, + "pChange": -48.7725923927704, + "totalBuyQuantity": 4175, + "totalSellQuantity": 6150, + "bidQty": 500, + "bidprice": 181.55, + "askQty": 25, + "askPrice": 200, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23450, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23450, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23450.00", + "openInterest": 2, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 18.82, + "lastPrice": 300.9, + "change": -161.15, + "pChange": -34.877177794611, + "totalBuyQuantity": 1950, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 101.15, + "askQty": 900, + "askPrice": 240.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23450, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23450, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23450, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23450.00", + "openInterest": 32, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 14.2857142857143, + "totalTradedVolume": 31, + "impliedVolatility": 0, + "lastPrice": 825.75, + "change": 170.45, + "pChange": 26.0109873340455, + "totalBuyQuantity": 100, + "totalSellQuantity": 2825, + "bidQty": 25, + "bidprice": 965.1, + "askQty": 150, + "askPrice": 1051.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23450, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23450.00", + "openInterest": 133, + "changeinOpenInterest": 101, + "pchangeinOpenInterest": 315.625, + "totalTradedVolume": 166, + "impliedVolatility": 15.34, + "lastPrice": 275.4, + "change": -144.6, + "pChange": -34.4285714285714, + "totalBuyQuantity": 1200, + "totalSellQuantity": 3075, + "bidQty": 900, + "bidprice": 241.95, + "askQty": 900, + "askPrice": 280.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23500, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23500.00", + "openInterest": 307822, + "changeinOpenInterest": 154879, + "pchangeinOpenInterest": 101.265831061245, + "totalTradedVolume": 4386764, + "impliedVolatility": 18.78, + "lastPrice": 70.75, + "change": -198.6, + "pChange": -73.7330610729534, + "totalBuyQuantity": 498925, + "totalSellQuantity": 717500, + "bidQty": 775, + "bidprice": 69.2, + "askQty": 275, + "askPrice": 70.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23500.00", + "openInterest": 121711, + "changeinOpenInterest": -50772, + "pchangeinOpenInterest": -29.4359444119131, + "totalTradedVolume": 3718750, + "impliedVolatility": 13.06, + "lastPrice": 471.8, + "change": 355, + "pChange": 303.938356164384, + "totalBuyQuantity": 139625, + "totalSellQuantity": 24725, + "bidQty": 1800, + "bidprice": 471.6, + "askQty": 600, + "askPrice": 477.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23500, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23500, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23500.00", + "openInterest": 16013, + "changeinOpenInterest": 3301, + "pchangeinOpenInterest": 25.9675896790434, + "totalTradedVolume": 129327, + "impliedVolatility": 12.69, + "lastPrice": 551.3, + "change": 354.25, + "pChange": 179.77670641969, + "totalBuyQuantity": 20950, + "totalSellQuantity": 4950, + "bidQty": 700, + "bidprice": 557.15, + "askQty": 250, + "askPrice": 570, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23500, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23500.00", + "openInterest": 30467, + "changeinOpenInterest": 20327, + "pchangeinOpenInterest": 200.463510848126, + "totalTradedVolume": 181989, + "impliedVolatility": 16.54, + "lastPrice": 112.05, + "change": -190.05, + "pChange": -62.909632571996, + "totalBuyQuantity": 10800, + "totalSellQuantity": 85900, + "bidQty": 325, + "bidprice": 112.05, + "askQty": 250, + "askPrice": 114, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23500, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23500, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23500.00", + "openInterest": 1251, + "changeinOpenInterest": 472, + "pchangeinOpenInterest": 60.5905006418485, + "totalTradedVolume": 7130, + "impliedVolatility": 12.49, + "lastPrice": 622.5, + "change": 343.15, + "pChange": 122.838732772508, + "totalBuyQuantity": 9150, + "totalSellQuantity": 725, + "bidQty": 200, + "bidprice": 617.7, + "askQty": 150, + "askPrice": 647.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23500, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23500.00", + "openInterest": 2654, + "changeinOpenInterest": 1829, + "pchangeinOpenInterest": 221.69696969697, + "totalTradedVolume": 12259, + "impliedVolatility": 16.05, + "lastPrice": 149.05, + "change": -192, + "pChange": -56.2967306846503, + "totalBuyQuantity": 2400, + "totalSellQuantity": 6200, + "bidQty": 150, + "bidprice": 143.6, + "askQty": 25, + "askPrice": 154.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23500, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23500, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23500.00", + "openInterest": 272, + "changeinOpenInterest": 134, + "pchangeinOpenInterest": 97.1014492753623, + "totalTradedVolume": 677, + "impliedVolatility": 15.66, + "lastPrice": 176.15, + "change": -195.25, + "pChange": -52.571351642434, + "totalBuyQuantity": 3850, + "totalSellQuantity": 4450, + "bidQty": 250, + "bidprice": 171.35, + "askQty": 25, + "askPrice": 180, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23500, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23500.00", + "openInterest": 155, + "changeinOpenInterest": 30, + "pchangeinOpenInterest": 24, + "totalTradedVolume": 414, + "impliedVolatility": 11.47, + "lastPrice": 670.95, + "change": 325.5, + "pChange": 94.2249240121581, + "totalBuyQuantity": 5800, + "totalSellQuantity": 250, + "bidQty": 300, + "bidprice": 671.7, + "askQty": 125, + "askPrice": 718.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23500, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23500.00", + "openInterest": 93129, + "changeinOpenInterest": 19824, + "pchangeinOpenInterest": 27.0431757724575, + "totalTradedVolume": 160333, + "impliedVolatility": 15.47, + "lastPrice": 200, + "change": -195, + "pChange": -49.3670886075949, + "totalBuyQuantity": 15800, + "totalSellQuantity": 61050, + "bidQty": 4825, + "bidprice": 200, + "askQty": 50, + "askPrice": 205, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23500.00", + "openInterest": 35071, + "changeinOpenInterest": 1437, + "pchangeinOpenInterest": 4.27246238924897, + "totalTradedVolume": 77999, + "impliedVolatility": 11.88, + "lastPrice": 741, + "change": 343.6, + "pChange": 86.4620030196276, + "totalBuyQuantity": 12800, + "totalSellQuantity": 11375, + "bidQty": 25, + "bidprice": 737.05, + "askQty": 25, + "askPrice": 744.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23500, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23500, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23500.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2400, + "totalSellQuantity": 1050, + "bidQty": 900, + "bidprice": 218.9, + "askQty": 300, + "askPrice": 239.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23500, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23500.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 600, + "totalSellQuantity": 225, + "bidQty": 300, + "bidprice": 773.1, + "askQty": 225, + "askPrice": 826.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23500, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23500, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23500.00", + "openInterest": 4973, + "changeinOpenInterest": 25, + "pchangeinOpenInterest": 0.505254648342765, + "totalTradedVolume": 4056, + "impliedVolatility": 9.96, + "lastPrice": 962.65, + "change": 333.1, + "pChange": 52.9108093082361, + "totalBuyQuantity": 3025, + "totalSellQuantity": 4675, + "bidQty": 200, + "bidprice": 960, + "askQty": 25, + "askPrice": 984.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23500, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23500.00", + "openInterest": 21368, + "changeinOpenInterest": 2645, + "pchangeinOpenInterest": 14.1270095604337, + "totalTradedVolume": 14540, + "impliedVolatility": 15.13, + "lastPrice": 282.95, + "change": -177.25, + "pChange": -38.515862668405, + "totalBuyQuantity": 7400, + "totalSellQuantity": 8150, + "bidQty": 600, + "bidprice": 275.75, + "askQty": 25, + "askPrice": 284.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23550, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23550.00", + "openInterest": 29696, + "changeinOpenInterest": 5923, + "pchangeinOpenInterest": 24.9148193328566, + "totalTradedVolume": 1632316, + "impliedVolatility": 13.52, + "lastPrice": 432.65, + "change": 334.95, + "pChange": 342.835209825998, + "totalBuyQuantity": 28350, + "totalSellQuantity": 11375, + "bidQty": 200, + "bidprice": 432.65, + "askQty": 600, + "askPrice": 438.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23550.00", + "openInterest": 61518, + "changeinOpenInterest": 49050, + "pchangeinOpenInterest": 393.407122232916, + "totalTradedVolume": 1450609, + "impliedVolatility": 18.42, + "lastPrice": 79, + "change": -218.35, + "pChange": -73.431982512191, + "totalBuyQuantity": 18800, + "totalSellQuantity": 223500, + "bidQty": 1000, + "bidprice": 77.7, + "askQty": 1025, + "askPrice": 80.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23550, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23550, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23550.00", + "openInterest": 1225, + "changeinOpenInterest": 168, + "pchangeinOpenInterest": 15.8940397350993, + "totalTradedVolume": 23933, + "impliedVolatility": 13.27, + "lastPrice": 519.7, + "change": 342.4, + "pChange": 193.119007332205, + "totalBuyQuantity": 13300, + "totalSellQuantity": 4925, + "bidQty": 100, + "bidprice": 511.2, + "askQty": 600, + "askPrice": 535.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23550, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23550.00", + "openInterest": 2497, + "changeinOpenInterest": 2060, + "pchangeinOpenInterest": 471.395881006865, + "totalTradedVolume": 29601, + "impliedVolatility": 16.4, + "lastPrice": 123.4, + "change": -202.35, + "pChange": -62.1181887950883, + "totalBuyQuantity": 4050, + "totalSellQuantity": 10000, + "bidQty": 25, + "bidprice": 123.35, + "askQty": 25, + "askPrice": 129, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23550, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23550, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23550.00", + "openInterest": 216, + "changeinOpenInterest": 179, + "pchangeinOpenInterest": 483.783783783784, + "totalTradedVolume": 1046, + "impliedVolatility": 12.44, + "lastPrice": 583.5, + "change": 332.65, + "pChange": 132.609128961531, + "totalBuyQuantity": 13075, + "totalSellQuantity": 950, + "bidQty": 500, + "bidprice": 569.2, + "askQty": 25, + "askPrice": 623.2, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23550, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23550.00", + "openInterest": 237, + "changeinOpenInterest": 185, + "pchangeinOpenInterest": 355.769230769231, + "totalTradedVolume": 905, + "impliedVolatility": 15.86, + "lastPrice": 159.8, + "change": -196.35, + "pChange": -55.1312649164678, + "totalBuyQuantity": 1725, + "totalSellQuantity": 1775, + "bidQty": 500, + "bidprice": 137.3, + "askQty": 525, + "askPrice": 179.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23550, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23550, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23550.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 545.35, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6100, + "totalSellQuantity": 600, + "bidQty": 400, + "bidprice": 327.05, + "askQty": 500, + "askPrice": 722.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23550, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23550.00", + "openInterest": 116, + "changeinOpenInterest": 100, + "pchangeinOpenInterest": 625, + "totalTradedVolume": 152, + "impliedVolatility": 16.32, + "lastPrice": 205.75, + "change": -194.25, + "pChange": -48.5625, + "totalBuyQuantity": 1025, + "totalSellQuantity": 2200, + "bidQty": 25, + "bidprice": 180.05, + "askQty": 300, + "askPrice": 227.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23550, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 23550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23550.00", + "openInterest": 1487, + "changeinOpenInterest": 410, + "pchangeinOpenInterest": 38.0687093779016, + "totalTradedVolume": 3395, + "impliedVolatility": 11.5, + "lastPrice": 695.15, + "change": 322.25, + "pChange": 86.4172700455886, + "totalBuyQuantity": 5025, + "totalSellQuantity": 3400, + "bidQty": 25, + "bidprice": 680.4, + "askQty": 25, + "askPrice": 733.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23550.00", + "openInterest": 1464, + "changeinOpenInterest": -346, + "pchangeinOpenInterest": -19.1160220994475, + "totalTradedVolume": 4847, + "impliedVolatility": 15.41, + "lastPrice": 213.5, + "change": -201.45, + "pChange": -48.5480178334739, + "totalBuyQuantity": 4350, + "totalSellQuantity": 9450, + "bidQty": 525, + "bidprice": 206.6, + "askQty": 1775, + "askPrice": 215.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23550, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23550, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23550.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 23.77, + "lastPrice": 480, + "change": -31.2, + "pChange": -6.10328638497652, + "totalBuyQuantity": 2175, + "totalSellQuantity": 900, + "bidQty": 900, + "bidprice": 124.5, + "askQty": 900, + "askPrice": 270.05, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23550, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23550, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 23550, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23550.00", + "openInterest": 82, + "changeinOpenInterest": 43, + "pchangeinOpenInterest": 110.25641025641, + "totalTradedVolume": 122, + "impliedVolatility": 15.47, + "lastPrice": 310.2, + "change": -169.45, + "pChange": -35.3278432190139, + "totalBuyQuantity": 2300, + "totalSellQuantity": 4550, + "bidQty": 200, + "bidprice": 271.3, + "askQty": 25, + "askPrice": 318.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23550, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23550.00", + "openInterest": 175, + "changeinOpenInterest": 9, + "pchangeinOpenInterest": 5.42168674698795, + "totalTradedVolume": 129, + "impliedVolatility": 9.25, + "lastPrice": 903.15, + "change": 313.15, + "pChange": 53.0762711864407, + "totalBuyQuantity": 1700, + "totalSellQuantity": 2825, + "bidQty": 25, + "bidprice": 873.05, + "askQty": 25, + "askPrice": 980.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23600, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23600.00", + "openInterest": 71678, + "changeinOpenInterest": -32631, + "pchangeinOpenInterest": -31.2830148884564, + "totalTradedVolume": 3036181, + "impliedVolatility": 14.17, + "lastPrice": 397.6, + "change": 317.5, + "pChange": 396.379525593009, + "totalBuyQuantity": 67475, + "totalSellQuantity": 15850, + "bidQty": 600, + "bidprice": 392, + "askQty": 75, + "askPrice": 398.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23600.00", + "openInterest": 158077, + "changeinOpenInterest": 97365, + "pchangeinOpenInterest": 160.371919884043, + "totalTradedVolume": 2356407, + "impliedVolatility": 18.31, + "lastPrice": 90.8, + "change": -240.35, + "pChange": -72.580401630681, + "totalBuyQuantity": 47750, + "totalSellQuantity": 339150, + "bidQty": 150, + "bidprice": 89.55, + "askQty": 950, + "askPrice": 90.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23600, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23600.00", + "openInterest": 15636, + "changeinOpenInterest": 10944, + "pchangeinOpenInterest": 233.248081841432, + "totalTradedVolume": 107699, + "impliedVolatility": 16.28, + "lastPrice": 135.9, + "change": -221, + "pChange": -61.9221070327823, + "totalBuyQuantity": 5625, + "totalSellQuantity": 33625, + "bidQty": 150, + "bidprice": 133.05, + "askQty": 50, + "askPrice": 135.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23600.00", + "openInterest": 11887, + "changeinOpenInterest": 3821, + "pchangeinOpenInterest": 47.3716836102157, + "totalTradedVolume": 95033, + "impliedVolatility": 13.79, + "lastPrice": 489.6, + "change": 336.15, + "pChange": 219.061583577713, + "totalBuyQuantity": 22025, + "totalSellQuantity": 7850, + "bidQty": 1300, + "bidprice": 477.5, + "askQty": 100, + "askPrice": 492.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23600, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 23600, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23600.00", + "openInterest": 1343, + "changeinOpenInterest": 1160, + "pchangeinOpenInterest": 633.879781420765, + "totalTradedVolume": 5912, + "impliedVolatility": 15.86, + "lastPrice": 174.95, + "change": -216.8, + "pChange": -55.3414167198469, + "totalBuyQuantity": 1475, + "totalSellQuantity": 4425, + "bidQty": 100, + "bidprice": 166.6, + "askQty": 25, + "askPrice": 175, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23600, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23600.00", + "openInterest": 659, + "changeinOpenInterest": 463, + "pchangeinOpenInterest": 236.224489795918, + "totalTradedVolume": 3340, + "impliedVolatility": 12.53, + "lastPrice": 548.2, + "change": 323.85, + "pChange": 144.350345442389, + "totalBuyQuantity": 12525, + "totalSellQuantity": 1100, + "bidQty": 25, + "bidprice": 545, + "askQty": 25, + "askPrice": 565, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23600, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23600, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23600.00", + "openInterest": 7, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 295, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8425, + "totalSellQuantity": 1900, + "bidQty": 200, + "bidprice": 596.95, + "askQty": 900, + "askPrice": 653.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23600, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2150, + "totalSellQuantity": 3375, + "bidQty": 200, + "bidprice": 192.05, + "askQty": 25, + "askPrice": 223.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23600, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 23600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23600.00", + "openInterest": 4030, + "changeinOpenInterest": -321, + "pchangeinOpenInterest": -7.37761434153068, + "totalTradedVolume": 20068, + "impliedVolatility": 11.81, + "lastPrice": 665.75, + "change": 319.6, + "pChange": 92.3299147768309, + "totalBuyQuantity": 13875, + "totalSellQuantity": 5325, + "bidQty": 1675, + "bidprice": 653.95, + "askQty": 100, + "askPrice": 675.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23600.00", + "openInterest": 12264, + "changeinOpenInterest": 2980, + "pchangeinOpenInterest": 32.0982335200345, + "totalTradedVolume": 39486, + "impliedVolatility": 15.33, + "lastPrice": 227.25, + "change": -212.9, + "pChange": -48.3698739066227, + "totalBuyQuantity": 7725, + "totalSellQuantity": 10925, + "bidQty": 25, + "bidprice": 222, + "askQty": 125, + "askPrice": 227.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23600, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 23600, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 6, + "impliedVolatility": 0, + "lastPrice": 570.85, + "change": 86.6, + "pChange": 17.8833247289623, + "totalBuyQuantity": 1575, + "totalSellQuantity": 0, + "bidQty": 900, + "bidprice": 216, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23600, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1200, + "totalSellQuantity": 825, + "bidQty": 600, + "bidprice": 234.65, + "askQty": 825, + "askPrice": 275.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23600, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23600.00", + "openInterest": 470, + "changeinOpenInterest": -171, + "pchangeinOpenInterest": -26.6770670826833, + "totalTradedVolume": 754, + "impliedVolatility": 10.76, + "lastPrice": 911.75, + "change": 338.8, + "pChange": 59.132559560171, + "totalBuyQuantity": 2550, + "totalSellQuantity": 3275, + "bidQty": 300, + "bidprice": 843.9, + "askQty": 25, + "askPrice": 922, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23600.00", + "openInterest": 6277, + "changeinOpenInterest": 77, + "pchangeinOpenInterest": 1.24193548387097, + "totalTradedVolume": 2359, + "impliedVolatility": 14.84, + "lastPrice": 303.2, + "change": -198.95, + "pChange": -39.6196355670616, + "totalBuyQuantity": 2500, + "totalSellQuantity": 2150, + "bidQty": 100, + "bidprice": 302, + "askQty": 25, + "askPrice": 312, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23650, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23650.00", + "openInterest": 43355, + "changeinOpenInterest": 35670, + "pchangeinOpenInterest": 464.150943396226, + "totalTradedVolume": 912111, + "impliedVolatility": 17.92, + "lastPrice": 101, + "change": -264.8, + "pChange": -72.3892837616184, + "totalBuyQuantity": 21150, + "totalSellQuantity": 130275, + "bidQty": 1000, + "bidprice": 101.2, + "askQty": 1000, + "askPrice": 102.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23650.00", + "openInterest": 18407, + "changeinOpenInterest": -6105, + "pchangeinOpenInterest": -24.9061684073107, + "totalTradedVolume": 1360939, + "impliedVolatility": 13.78, + "lastPrice": 355.55, + "change": 289.9, + "pChange": 441.584158415842, + "totalBuyQuantity": 25450, + "totalSellQuantity": 6400, + "bidQty": 250, + "bidprice": 352.25, + "askQty": 25, + "askPrice": 358, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23650, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23650.00", + "openInterest": 2381, + "changeinOpenInterest": 2017, + "pchangeinOpenInterest": 554.120879120879, + "totalTradedVolume": 23675, + "impliedVolatility": 16.18, + "lastPrice": 150, + "change": -235.8, + "pChange": -61.1197511664075, + "totalBuyQuantity": 3225, + "totalSellQuantity": 11275, + "bidQty": 250, + "bidprice": 142.1, + "askQty": 25, + "askPrice": 157.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23650.00", + "openInterest": 1476, + "changeinOpenInterest": 378, + "pchangeinOpenInterest": 34.4262295081967, + "totalTradedVolume": 22255, + "impliedVolatility": 13.76, + "lastPrice": 453.35, + "change": 318.45, + "pChange": 236.063750926612, + "totalBuyQuantity": 14675, + "totalSellQuantity": 4775, + "bidQty": 50, + "bidprice": 434.7, + "askQty": 25, + "askPrice": 467.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23650, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 23650, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23650.00", + "openInterest": 265, + "changeinOpenInterest": 247, + "pchangeinOpenInterest": 1372.22222222222, + "totalTradedVolume": 893, + "impliedVolatility": 16.14, + "lastPrice": 196.9, + "change": -212.6, + "pChange": -51.9169719169719, + "totalBuyQuantity": 825, + "totalSellQuantity": 4875, + "bidQty": 300, + "bidprice": 162.45, + "askQty": 1800, + "askPrice": 196.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23650, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23650.00", + "openInterest": 51, + "changeinOpenInterest": -26, + "pchangeinOpenInterest": -33.7662337662338, + "totalTradedVolume": 731, + "impliedVolatility": 12.34, + "lastPrice": 508.9, + "change": 296.05, + "pChange": 139.088560018793, + "totalBuyQuantity": 11000, + "totalSellQuantity": 675, + "bidQty": 50, + "bidprice": 26.7, + "askQty": 50, + "askPrice": 554.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23650, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23650, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23650.00", + "openInterest": 25, + "changeinOpenInterest": 24, + "pchangeinOpenInterest": 2400, + "totalTradedVolume": 43, + "impliedVolatility": 15.87, + "lastPrice": 227.95, + "change": -169.7, + "pChange": -42.6757198541431, + "totalBuyQuantity": 3125, + "totalSellQuantity": 3075, + "bidQty": 250, + "bidprice": 183.35, + "askQty": 125, + "askPrice": 267.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23650, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23650.00", + "openInterest": 2, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 100, + "totalTradedVolume": 1, + "impliedVolatility": 0, + "lastPrice": 240.9, + "change": -232.95, + "pChange": -49.1611269389047, + "totalBuyQuantity": 11725, + "totalSellQuantity": 1000, + "bidQty": 900, + "bidprice": 253.85, + "askQty": 900, + "askPrice": 653.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23650, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23650.00", + "openInterest": 1505, + "changeinOpenInterest": 217, + "pchangeinOpenInterest": 16.8478260869565, + "totalTradedVolume": 3552, + "impliedVolatility": 15.16, + "lastPrice": 239.2, + "change": -225, + "pChange": -48.4704868591125, + "totalBuyQuantity": 4550, + "totalSellQuantity": 4475, + "bidQty": 500, + "bidprice": 210.4, + "askQty": 600, + "askPrice": 263.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23650.00", + "openInterest": 903, + "changeinOpenInterest": -279, + "pchangeinOpenInterest": -23.6040609137056, + "totalTradedVolume": 2881, + "impliedVolatility": 11.49, + "lastPrice": 622.5, + "change": 299.95, + "pChange": 92.9933343667648, + "totalBuyQuantity": 7375, + "totalSellQuantity": 5875, + "bidQty": 250, + "bidprice": 598.05, + "askQty": 150, + "askPrice": 675.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23650, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 23650, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 300, + "bidQty": 900, + "bidprice": 555.6, + "askQty": 300, + "askPrice": 747.7, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23650, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 0, + "bidQty": 900, + "bidprice": 230.55, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23650, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23650.00", + "openInterest": 63, + "changeinOpenInterest": -9, + "pchangeinOpenInterest": -12.5, + "totalTradedVolume": 113, + "impliedVolatility": 10.29, + "lastPrice": 860.1, + "change": 308.8, + "pChange": 56.0130600399057, + "totalBuyQuantity": 1825, + "totalSellQuantity": 2700, + "bidQty": 25, + "bidprice": 769.15, + "askQty": 25, + "askPrice": 945.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23650.00", + "openInterest": 89, + "changeinOpenInterest": 41, + "pchangeinOpenInterest": 85.4166666666667, + "totalTradedVolume": 48, + "impliedVolatility": 14.85, + "lastPrice": 319.75, + "change": -193.8, + "pChange": -37.7373186642002, + "totalBuyQuantity": 2825, + "totalSellQuantity": 2125, + "bidQty": 1625, + "bidprice": 275.4, + "askQty": 25, + "askPrice": 352.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23700, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23700.00", + "openInterest": 71414, + "changeinOpenInterest": -46099, + "pchangeinOpenInterest": -39.228851276029, + "totalTradedVolume": 3142425, + "impliedVolatility": 14.08, + "lastPrice": 321.75, + "change": 268.95, + "pChange": 509.375, + "totalBuyQuantity": 89500, + "totalSellQuantity": 25100, + "bidQty": 600, + "bidprice": 317.25, + "askQty": 100, + "askPrice": 322.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23700.00", + "openInterest": 136308, + "changeinOpenInterest": 86174, + "pchangeinOpenInterest": 171.887341923645, + "totalTradedVolume": 1848835, + "impliedVolatility": 17.74, + "lastPrice": 114.65, + "change": -288.9, + "pChange": -71.58964192789, + "totalBuyQuantity": 945200, + "totalSellQuantity": 352475, + "bidQty": 50, + "bidprice": 114.65, + "askQty": 600, + "askPrice": 116, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23700, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23700.00", + "openInterest": 15387, + "changeinOpenInterest": 11129, + "pchangeinOpenInterest": 261.366838891498, + "totalTradedVolume": 78353, + "impliedVolatility": 15.93, + "lastPrice": 162.65, + "change": -254.8, + "pChange": -61.0372499700563, + "totalBuyQuantity": 5725, + "totalSellQuantity": 33800, + "bidQty": 75, + "bidprice": 160.05, + "askQty": 50, + "askPrice": 162.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23700.00", + "openInterest": 10771, + "changeinOpenInterest": 1802, + "pchangeinOpenInterest": 20.091426022968, + "totalTradedVolume": 104792, + "impliedVolatility": 13.8, + "lastPrice": 419.5, + "change": 303.65, + "pChange": 262.106171773846, + "totalBuyQuantity": 16300, + "totalSellQuantity": 5100, + "bidQty": 400, + "bidprice": 410, + "askQty": 50, + "askPrice": 419.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23700, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23700, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23700.00", + "openInterest": 654, + "changeinOpenInterest": 107, + "pchangeinOpenInterest": 19.5612431444241, + "totalTradedVolume": 4944, + "impliedVolatility": 12.38, + "lastPrice": 475.05, + "change": 296.3, + "pChange": 165.762237762238, + "totalBuyQuantity": 10725, + "totalSellQuantity": 825, + "bidQty": 25, + "bidprice": 473.55, + "askQty": 400, + "askPrice": 502.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23700, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23700.00", + "openInterest": 1005, + "changeinOpenInterest": 761, + "pchangeinOpenInterest": 311.885245901639, + "totalTradedVolume": 4514, + "impliedVolatility": 15.44, + "lastPrice": 200, + "change": -242.25, + "pChange": -54.7767100056529, + "totalBuyQuantity": 1875, + "totalSellQuantity": 2375, + "bidQty": 50, + "bidprice": 197, + "askQty": 425, + "askPrice": 204.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23700, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23700, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23700.00", + "openInterest": 102, + "changeinOpenInterest": 86, + "pchangeinOpenInterest": 537.5, + "totalTradedVolume": 127, + "impliedVolatility": 15.71, + "lastPrice": 241.65, + "change": -226.35, + "pChange": -48.3653846153846, + "totalBuyQuantity": 1175, + "totalSellQuantity": 2800, + "bidQty": 25, + "bidprice": 218.85, + "askQty": 75, + "askPrice": 249.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23700, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23700.00", + "openInterest": 15, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 15.3846153846154, + "totalTradedVolume": 71, + "impliedVolatility": 11.93, + "lastPrice": 535, + "change": 291, + "pChange": 119.262295081967, + "totalBuyQuantity": 10175, + "totalSellQuantity": 2100, + "bidQty": 200, + "bidprice": 528.95, + "askQty": 200, + "askPrice": 561.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23700, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23700.00", + "openInterest": 15013, + "changeinOpenInterest": 3330, + "pchangeinOpenInterest": 28.502953008645, + "totalTradedVolume": 38108, + "impliedVolatility": 15.05, + "lastPrice": 253.7, + "change": -238.45, + "pChange": -48.4506756070304, + "totalBuyQuantity": 5625, + "totalSellQuantity": 20150, + "bidQty": 25, + "bidprice": 252.2, + "askQty": 25, + "askPrice": 254.05, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23700.00", + "openInterest": 10373, + "changeinOpenInterest": 717, + "pchangeinOpenInterest": 7.42543496271748, + "totalTradedVolume": 27798, + "impliedVolatility": 11.96, + "lastPrice": 599.75, + "change": 302.35, + "pChange": 101.664425016812, + "totalBuyQuantity": 13850, + "totalSellQuantity": 7775, + "bidQty": 25, + "bidprice": 587.2, + "askQty": 75, + "askPrice": 608.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23700, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23700, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23700.00", + "openInterest": 10, + "changeinOpenInterest": 10, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 10, + "impliedVolatility": 15.77, + "lastPrice": 298.3, + "change": -292.45, + "pChange": -49.5048666948794, + "totalBuyQuantity": 600, + "totalSellQuantity": 375, + "bidQty": 300, + "bidprice": 263.15, + "askQty": 300, + "askPrice": 298.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23700, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23700, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 23700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23700.00", + "openInterest": 3151, + "changeinOpenInterest": 1750, + "pchangeinOpenInterest": 124.910778015703, + "totalTradedVolume": 3735, + "impliedVolatility": 14.79, + "lastPrice": 334.3, + "change": -210.4, + "pChange": -38.6267670277217, + "totalBuyQuantity": 1700, + "totalSellQuantity": 1250, + "bidQty": 150, + "bidprice": 319.2, + "askQty": 50, + "askPrice": 342.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23700.00", + "openInterest": 501, + "changeinOpenInterest": -150, + "pchangeinOpenInterest": -23.0414746543779, + "totalTradedVolume": 628, + "impliedVolatility": 10.29, + "lastPrice": 824, + "change": 296.55, + "pChange": 56.2233387050905, + "totalBuyQuantity": 1850, + "totalSellQuantity": 3250, + "bidQty": 700, + "bidprice": 792, + "askQty": 50, + "askPrice": 849.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23750.00", + "openInterest": 36581, + "changeinOpenInterest": 5728, + "pchangeinOpenInterest": 18.5654555472726, + "totalTradedVolume": 1352202, + "impliedVolatility": 13.74, + "lastPrice": 283.5, + "change": 240.75, + "pChange": 563.157894736842, + "totalBuyQuantity": 43550, + "totalSellQuantity": 8425, + "bidQty": 25, + "bidprice": 283.55, + "askQty": 1050, + "askPrice": 286.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23750.00", + "openInterest": 31588, + "changeinOpenInterest": 23888, + "pchangeinOpenInterest": 310.233766233766, + "totalTradedVolume": 575241, + "impliedVolatility": 17.77, + "lastPrice": 132.3, + "change": -314.45, + "pChange": -70.3861219921656, + "totalBuyQuantity": 652825, + "totalSellQuantity": 80400, + "bidQty": 200, + "bidprice": 130.05, + "askQty": 1000, + "askPrice": 131.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23750, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23750.00", + "openInterest": 1746, + "changeinOpenInterest": 473, + "pchangeinOpenInterest": 37.1563236449332, + "totalTradedVolume": 24182, + "impliedVolatility": 13.91, + "lastPrice": 388.35, + "change": 286.45, + "pChange": 281.108930323847, + "totalBuyQuantity": 18775, + "totalSellQuantity": 5575, + "bidQty": 100, + "bidprice": 362.05, + "askQty": 975, + "askPrice": 385.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23750.00", + "openInterest": 2378, + "changeinOpenInterest": 1875, + "pchangeinOpenInterest": 372.763419483101, + "totalTradedVolume": 18303, + "impliedVolatility": 15.89, + "lastPrice": 179.9, + "change": -271.45, + "pChange": -60.1417968317271, + "totalBuyQuantity": 2950, + "totalSellQuantity": 5425, + "bidQty": 125, + "bidprice": 170, + "askQty": 500, + "askPrice": 180, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23750, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 23750, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23750.00", + "openInterest": 180, + "changeinOpenInterest": 78, + "pchangeinOpenInterest": 76.4705882352941, + "totalTradedVolume": 513, + "impliedVolatility": 15.99, + "lastPrice": 229.6, + "change": -258.1, + "pChange": -52.9218782038138, + "totalBuyQuantity": 1750, + "totalSellQuantity": 1525, + "bidQty": 25, + "bidprice": 207, + "askQty": 50, + "askPrice": 233.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23750, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23750.00", + "openInterest": 146, + "changeinOpenInterest": -9, + "pchangeinOpenInterest": -5.80645161290323, + "totalTradedVolume": 814, + "impliedVolatility": 11.73, + "lastPrice": 428.7, + "change": 257.9, + "pChange": 150.995316159251, + "totalBuyQuantity": 11650, + "totalSellQuantity": 875, + "bidQty": 75, + "bidprice": 426.35, + "askQty": 425, + "askPrice": 473.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23750, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23750, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 9550, + "totalSellQuantity": 1000, + "bidQty": 100, + "bidprice": 340.9, + "askQty": 100, + "askPrice": 602.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23750, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2000, + "totalSellQuantity": 2100, + "bidQty": 1000, + "bidprice": 202.7, + "askQty": 900, + "askPrice": 280.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23750, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 23750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23750.00", + "openInterest": 842, + "changeinOpenInterest": -197, + "pchangeinOpenInterest": -18.9605389797883, + "totalTradedVolume": 3058, + "impliedVolatility": 11.34, + "lastPrice": 550.2, + "change": 273.15, + "pChange": 98.5923118570655, + "totalBuyQuantity": 10350, + "totalSellQuantity": 5200, + "bidQty": 200, + "bidprice": 555, + "askQty": 100, + "askPrice": 596.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23750.00", + "openInterest": 2864, + "changeinOpenInterest": 896, + "pchangeinOpenInterest": 45.5284552845529, + "totalTradedVolume": 7147, + "impliedVolatility": 14.96, + "lastPrice": 269.25, + "change": -245.65, + "pChange": -47.7082928724024, + "totalBuyQuantity": 3650, + "totalSellQuantity": 3925, + "bidQty": 300, + "bidprice": 243.05, + "askQty": 900, + "askPrice": 286.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23750, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 23750, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 540, + "askQty": 1800, + "askPrice": 727.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23750, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 1800, + "bidQty": 0, + "bidprice": 0, + "askQty": 900, + "askPrice": 329.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23750, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23750.00", + "openInterest": 122, + "changeinOpenInterest": -40, + "pchangeinOpenInterest": -24.6913580246914, + "totalTradedVolume": 90, + "impliedVolatility": 10.89, + "lastPrice": 810.05, + "change": 310, + "pChange": 61.993800619938, + "totalBuyQuantity": 1975, + "totalSellQuantity": 4500, + "bidQty": 50, + "bidprice": 451.65, + "askQty": 900, + "askPrice": 896.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23750.00", + "openInterest": 183, + "changeinOpenInterest": 39, + "pchangeinOpenInterest": 27.0833333333333, + "totalTradedVolume": 95, + "impliedVolatility": 15.81, + "lastPrice": 390.1, + "change": -176.7, + "pChange": -31.1750176429075, + "totalBuyQuantity": 3625, + "totalSellQuantity": 2800, + "bidQty": 300, + "bidprice": 263.4, + "askQty": 25, + "askPrice": 375.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23800, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23800.00", + "openInterest": 126524, + "changeinOpenInterest": -15202, + "pchangeinOpenInterest": -10.7263310895672, + "totalTradedVolume": 3052931, + "impliedVolatility": 13.68, + "lastPrice": 250, + "change": 216.3, + "pChange": 641.839762611276, + "totalBuyQuantity": 310525, + "totalSellQuantity": 104725, + "bidQty": 675, + "bidprice": 249, + "askQty": 25, + "askPrice": 253, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23800.00", + "openInterest": 108627, + "changeinOpenInterest": 58584, + "pchangeinOpenInterest": 117.067322102991, + "totalTradedVolume": 1231331, + "impliedVolatility": 17.43, + "lastPrice": 147.25, + "change": -338.2, + "pChange": -69.6673189823875, + "totalBuyQuantity": 938000, + "totalSellQuantity": 182950, + "bidQty": 1000, + "bidprice": 145.6, + "askQty": 25, + "askPrice": 147, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23800, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23800.00", + "openInterest": 20332, + "changeinOpenInterest": 4302, + "pchangeinOpenInterest": 26.8371802869619, + "totalTradedVolume": 128903, + "impliedVolatility": 13.7, + "lastPrice": 353.4, + "change": 267.1, + "pChange": 309.501738122827, + "totalBuyQuantity": 25375, + "totalSellQuantity": 8050, + "bidQty": 1075, + "bidprice": 345, + "askQty": 25, + "askPrice": 353.2, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23800.00", + "openInterest": 20452, + "changeinOpenInterest": 10880, + "pchangeinOpenInterest": 113.664855829503, + "totalTradedVolume": 59474, + "impliedVolatility": 15.54, + "lastPrice": 193.15, + "change": -293.25, + "pChange": -60.2898848684211, + "totalBuyQuantity": 4575, + "totalSellQuantity": 9800, + "bidQty": 200, + "bidprice": 193.1, + "askQty": 25, + "askPrice": 204.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23800, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23800, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23800.00", + "openInterest": 972, + "changeinOpenInterest": 184, + "pchangeinOpenInterest": 23.3502538071066, + "totalTradedVolume": 6687, + "impliedVolatility": 12.46, + "lastPrice": 411.5, + "change": 263.25, + "pChange": 177.571669477234, + "totalBuyQuantity": 12425, + "totalSellQuantity": 1600, + "bidQty": 50, + "bidprice": 411.8, + "askQty": 25, + "askPrice": 424.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23800, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23800.00", + "openInterest": 1743, + "changeinOpenInterest": 1401, + "pchangeinOpenInterest": 409.649122807018, + "totalTradedVolume": 6260, + "impliedVolatility": 15.28, + "lastPrice": 233.85, + "change": -281.75, + "pChange": -54.6450737005431, + "totalBuyQuantity": 725, + "totalSellQuantity": 1900, + "bidQty": 25, + "bidprice": 230.9, + "askQty": 75, + "askPrice": 243.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23800, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23800, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23800.00", + "openInterest": 30, + "changeinOpenInterest": -4, + "pchangeinOpenInterest": -11.7647058823529, + "totalTradedVolume": 308, + "impliedVolatility": 11.39, + "lastPrice": 456.3, + "change": 243, + "pChange": 113.924050632911, + "totalBuyQuantity": 11575, + "totalSellQuantity": 1875, + "bidQty": 200, + "bidprice": 467.2, + "askQty": 300, + "askPrice": 492.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23800, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23800.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 15.74, + "lastPrice": 280.05, + "change": -232.35, + "pChange": -45.3454332552693, + "totalBuyQuantity": 600, + "totalSellQuantity": 2300, + "bidQty": 100, + "bidprice": 242, + "askQty": 300, + "askPrice": 281.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23800, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23800.00", + "openInterest": 21906, + "changeinOpenInterest": 6504, + "pchangeinOpenInterest": 42.2282820412933, + "totalTradedVolume": 34914, + "impliedVolatility": 15.17, + "lastPrice": 294, + "change": -250.6, + "pChange": -46.0154241645244, + "totalBuyQuantity": 8225, + "totalSellQuantity": 22025, + "bidQty": 25, + "bidprice": 284, + "askQty": 925, + "askPrice": 293.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23800.00", + "openInterest": 10892, + "changeinOpenInterest": -1774, + "pchangeinOpenInterest": -14.0060003158061, + "totalTradedVolume": 39684, + "impliedVolatility": 12.29, + "lastPrice": 543.05, + "change": 289.5, + "pChange": 114.178662985604, + "totalBuyQuantity": 17475, + "totalSellQuantity": 9800, + "bidQty": 25, + "bidprice": 524.05, + "askQty": 1800, + "askPrice": 542.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23800, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 23800, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 525, + "totalSellQuantity": 600, + "bidQty": 525, + "bidprice": 560.8, + "askQty": 600, + "askPrice": 621.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23800, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 450, + "totalSellQuantity": 1800, + "bidQty": 225, + "bidprice": 302.4, + "askQty": 1800, + "askPrice": 334.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23800, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23800.00", + "openInterest": 857, + "changeinOpenInterest": -250, + "pchangeinOpenInterest": -22.583559168925, + "totalTradedVolume": 873, + "impliedVolatility": 10.44, + "lastPrice": 760, + "change": 288, + "pChange": 61.0169491525424, + "totalBuyQuantity": 1125, + "totalSellQuantity": 5500, + "bidQty": 25, + "bidprice": 661.05, + "askQty": 100, + "askPrice": 788.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23800.00", + "openInterest": 6827, + "changeinOpenInterest": 6116, + "pchangeinOpenInterest": 860.196905766526, + "totalTradedVolume": 9235, + "impliedVolatility": 14.72, + "lastPrice": 366.6, + "change": -226.25, + "pChange": -38.1631103989205, + "totalBuyQuantity": 2400, + "totalSellQuantity": 2250, + "bidQty": 25, + "bidprice": 350, + "askQty": 50, + "askPrice": 380.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23850, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23850.00", + "openInterest": 31771, + "changeinOpenInterest": 29079, + "pchangeinOpenInterest": 1080.20059435364, + "totalTradedVolume": 560728, + "impliedVolatility": 17.2, + "lastPrice": 165.2, + "change": -366.45, + "pChange": -68.9269256089533, + "totalBuyQuantity": 471250, + "totalSellQuantity": 76850, + "bidQty": 125, + "bidprice": 164, + "askQty": 1000, + "askPrice": 166.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23850.00", + "openInterest": 43517, + "changeinOpenInterest": 20915, + "pchangeinOpenInterest": 92.5360587558623, + "totalTradedVolume": 1436088, + "impliedVolatility": 13.83, + "lastPrice": 221.3, + "change": 194.3, + "pChange": 719.62962962963, + "totalBuyQuantity": 66125, + "totalSellQuantity": 19575, + "bidQty": 75, + "bidprice": 218.45, + "askQty": 600, + "askPrice": 222, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23850, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 23850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23850.00", + "openInterest": 2032, + "changeinOpenInterest": 1621, + "pchangeinOpenInterest": 394.403892944039, + "totalTradedVolume": 11967, + "impliedVolatility": 15.44, + "lastPrice": 211.8, + "change": -315.5, + "pChange": -59.8331120804096, + "totalBuyQuantity": 2950, + "totalSellQuantity": 7050, + "bidQty": 200, + "bidprice": 211.95, + "askQty": 1800, + "askPrice": 220.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23850.00", + "openInterest": 2940, + "changeinOpenInterest": 1449, + "pchangeinOpenInterest": 97.1830985915493, + "totalTradedVolume": 26634, + "impliedVolatility": 13.57, + "lastPrice": 321.15, + "change": 247.5, + "pChange": 336.048879837067, + "totalBuyQuantity": 11000, + "totalSellQuantity": 2875, + "bidQty": 50, + "bidprice": 302.1, + "askQty": 325, + "askPrice": 321.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23850, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23850, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23850.00", + "openInterest": 248, + "changeinOpenInterest": 199, + "pchangeinOpenInterest": 406.122448979592, + "totalTradedVolume": 594, + "impliedVolatility": 12.21, + "lastPrice": 375.6, + "change": 236.5, + "pChange": 170.021567217829, + "totalBuyQuantity": 12400, + "totalSellQuantity": 1175, + "bidQty": 275, + "bidprice": 370.05, + "askQty": 150, + "askPrice": 414.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23850, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23850.00", + "openInterest": 349, + "changeinOpenInterest": 345, + "pchangeinOpenInterest": 8625, + "totalTradedVolume": 794, + "impliedVolatility": 15.59, + "lastPrice": 260.95, + "change": -294.05, + "pChange": -52.981981981982, + "totalBuyQuantity": 1900, + "totalSellQuantity": 4525, + "bidQty": 25, + "bidprice": 249.1, + "askQty": 1800, + "askPrice": 260.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23850, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23850, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23850.00", + "openInterest": 1, + "changeinOpenInterest": -4, + "pchangeinOpenInterest": -80, + "totalTradedVolume": 9, + "impliedVolatility": 9.73, + "lastPrice": 384.75, + "change": 192.35, + "pChange": 99.9740124740125, + "totalBuyQuantity": 14150, + "totalSellQuantity": 1775, + "bidQty": 275, + "bidprice": 406.35, + "askQty": 25, + "askPrice": 475.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23850, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1000, + "totalSellQuantity": 1150, + "bidQty": 100, + "bidprice": 245.1, + "askQty": 100, + "askPrice": 319.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23850, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23850.00", + "openInterest": 1283, + "changeinOpenInterest": 615, + "pchangeinOpenInterest": 92.0658682634731, + "totalTradedVolume": 4049, + "impliedVolatility": 14.74, + "lastPrice": 301.75, + "change": -273.3, + "pChange": -47.5263020606904, + "totalBuyQuantity": 5225, + "totalSellQuantity": 5425, + "bidQty": 25, + "bidprice": 300, + "askQty": 900, + "askPrice": 328.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23850.00", + "openInterest": 1190, + "changeinOpenInterest": 247, + "pchangeinOpenInterest": 26.1930010604454, + "totalTradedVolume": 3384, + "impliedVolatility": 11.47, + "lastPrice": 489.55, + "change": 255.25, + "pChange": 108.941527955612, + "totalBuyQuantity": 11350, + "totalSellQuantity": 5000, + "bidQty": 100, + "bidprice": 479.8, + "askQty": 100, + "askPrice": 543.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23850, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 23850, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 750, + "totalSellQuantity": 1425, + "bidQty": 750, + "bidprice": 508, + "askQty": 525, + "askPrice": 621.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23850, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 900, + "bidQty": 0, + "bidprice": 0, + "askQty": 900, + "askPrice": 369.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23850, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 23850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23850.00", + "openInterest": 107, + "changeinOpenInterest": 37, + "pchangeinOpenInterest": 52.8571428571429, + "totalTradedVolume": 144, + "impliedVolatility": 14.92, + "lastPrice": 392.85, + "change": -172.7, + "pChange": -30.5366457430819, + "totalBuyQuantity": 1150, + "totalSellQuantity": 975, + "bidQty": 600, + "bidprice": 354.1, + "askQty": 25, + "askPrice": 414.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23850.00", + "openInterest": 524, + "changeinOpenInterest": 374, + "pchangeinOpenInterest": 249.333333333333, + "totalTradedVolume": 501, + "impliedVolatility": 10.44, + "lastPrice": 726.4, + "change": 267.85, + "pChange": 58.4123868716607, + "totalBuyQuantity": 1150, + "totalSellQuantity": 4550, + "bidQty": 250, + "bidprice": 620, + "askQty": 25, + "askPrice": 784.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23900.00", + "openInterest": 116796, + "changeinOpenInterest": 96046, + "pchangeinOpenInterest": 462.872289156627, + "totalTradedVolume": 943596, + "impliedVolatility": 17.23, + "lastPrice": 188, + "change": -388.45, + "pChange": -67.38659033741, + "totalBuyQuantity": 587475, + "totalSellQuantity": 115450, + "bidQty": 150, + "bidprice": 185.55, + "askQty": 25, + "askPrice": 187.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23900.00", + "openInterest": 170415, + "changeinOpenInterest": 88904, + "pchangeinOpenInterest": 109.069941480291, + "totalTradedVolume": 2844722, + "impliedVolatility": 13.56, + "lastPrice": 190, + "change": 168.75, + "pChange": 794.117647058824, + "totalBuyQuantity": 438475, + "totalSellQuantity": 74400, + "bidQty": 125, + "bidprice": 189.45, + "askQty": 600, + "askPrice": 192.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23900, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23900.00", + "openInterest": 11630, + "changeinOpenInterest": 3742, + "pchangeinOpenInterest": 47.4391480730223, + "totalTradedVolume": 94756, + "impliedVolatility": 12.86, + "lastPrice": 280, + "change": 217.4, + "pChange": 347.284345047923, + "totalBuyQuantity": 20225, + "totalSellQuantity": 4950, + "bidQty": 150, + "bidprice": 274.25, + "askQty": 50, + "askPrice": 285.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23900.00", + "openInterest": 9055, + "changeinOpenInterest": 6554, + "pchangeinOpenInterest": 262.055177928828, + "totalTradedVolume": 31743, + "impliedVolatility": 15.31, + "lastPrice": 231.45, + "change": -330.05, + "pChange": -58.780053428317, + "totalBuyQuantity": 6175, + "totalSellQuantity": 16650, + "bidQty": 200, + "bidprice": 231.6, + "askQty": 1800, + "askPrice": 239.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23900, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 23900, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23900.00", + "openInterest": 681, + "changeinOpenInterest": 624, + "pchangeinOpenInterest": 1094.73684210526, + "totalTradedVolume": 2168, + "impliedVolatility": 15.1, + "lastPrice": 271.6, + "change": -278.15, + "pChange": -50.5957253296953, + "totalBuyQuantity": 425, + "totalSellQuantity": 1800, + "bidQty": 25, + "bidprice": 269.05, + "askQty": 25, + "askPrice": 278, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23900, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23900.00", + "openInterest": 814, + "changeinOpenInterest": 242, + "pchangeinOpenInterest": 42.3076923076923, + "totalTradedVolume": 5953, + "impliedVolatility": 12.95, + "lastPrice": 362.45, + "change": 242.95, + "pChange": 203.305439330544, + "totalBuyQuantity": 12950, + "totalSellQuantity": 4950, + "bidQty": 775, + "bidprice": 345.35, + "askQty": 3600, + "askPrice": 361.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23900, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 23900, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23900.00", + "openInterest": 66, + "changeinOpenInterest": 63, + "pchangeinOpenInterest": 2100, + "totalTradedVolume": 83, + "impliedVolatility": 11.92, + "lastPrice": 408.4, + "change": 224.1, + "pChange": 121.595225176343, + "totalBuyQuantity": 11650, + "totalSellQuantity": 2150, + "bidQty": 25, + "bidprice": 401.9, + "askQty": 200, + "askPrice": 416.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23900, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23900.00", + "openInterest": 19, + "changeinOpenInterest": 15, + "pchangeinOpenInterest": 375, + "totalTradedVolume": 28, + "impliedVolatility": 14.89, + "lastPrice": 300, + "change": -273, + "pChange": -47.6439790575916, + "totalBuyQuantity": 800, + "totalSellQuantity": 675, + "bidQty": 100, + "bidprice": 267.95, + "askQty": 25, + "askPrice": 319.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23900, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23900.00", + "openInterest": 9472, + "changeinOpenInterest": 2716, + "pchangeinOpenInterest": 40.2013025458851, + "totalTradedVolume": 15081, + "impliedVolatility": 14.66, + "lastPrice": 320, + "change": -287.35, + "pChange": -47.312093521034, + "totalBuyQuantity": 9500, + "totalSellQuantity": 10500, + "bidQty": 250, + "bidprice": 317, + "askQty": 25, + "askPrice": 329.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23900.00", + "openInterest": 9566, + "changeinOpenInterest": -12363, + "pchangeinOpenInterest": -56.3773997902321, + "totalTradedVolume": 41229, + "impliedVolatility": 11.47, + "lastPrice": 459.2, + "change": 240.05, + "pChange": 109.53684690851, + "totalBuyQuantity": 18900, + "totalSellQuantity": 6475, + "bidQty": 700, + "bidprice": 459.2, + "askQty": 75, + "askPrice": 465.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23900, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 23900, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE23900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 300, + "bidQty": 0, + "bidprice": 0, + "askQty": 300, + "askPrice": 372.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23900, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 825, + "totalSellQuantity": 375, + "bidQty": 825, + "bidprice": 488.55, + "askQty": 375, + "askPrice": 559.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23900, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23900.00", + "openInterest": 822, + "changeinOpenInterest": 330, + "pchangeinOpenInterest": 67.0731707317073, + "totalTradedVolume": 1040, + "impliedVolatility": 10.4, + "lastPrice": 692.6, + "change": 281.75, + "pChange": 68.577339661677, + "totalBuyQuantity": 2125, + "totalSellQuantity": 3800, + "bidQty": 25, + "bidprice": 676.05, + "askQty": 25, + "askPrice": 725.7, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23900.00", + "openInterest": 6358, + "changeinOpenInterest": 3500, + "pchangeinOpenInterest": 122.463261021694, + "totalTradedVolume": 4307, + "impliedVolatility": 14.5, + "lastPrice": 395.4, + "change": -248.3, + "pChange": -38.5738698151313, + "totalBuyQuantity": 850, + "totalSellQuantity": 1475, + "bidQty": 150, + "bidprice": 380.75, + "askQty": 250, + "askPrice": 407.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23950, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23950.00", + "openInterest": 37012, + "changeinOpenInterest": 17673, + "pchangeinOpenInterest": 91.3852836237655, + "totalTradedVolume": 1282888, + "impliedVolatility": 13.63, + "lastPrice": 165, + "change": 147.75, + "pChange": 856.521739130435, + "totalBuyQuantity": 103775, + "totalSellQuantity": 43925, + "bidQty": 1000, + "bidprice": 163, + "askQty": 1000, + "askPrice": 164.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23950.00", + "openInterest": 15114, + "changeinOpenInterest": 12674, + "pchangeinOpenInterest": 519.426229508197, + "totalTradedVolume": 201951, + "impliedVolatility": 16.94, + "lastPrice": 208.9, + "change": -412.55, + "pChange": -66.3850671815915, + "totalBuyQuantity": 21650, + "totalSellQuantity": 23575, + "bidQty": 25, + "bidprice": 208.4, + "askQty": 600, + "askPrice": 211.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23950, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 23950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE23950.00", + "openInterest": 3103, + "changeinOpenInterest": 1031, + "pchangeinOpenInterest": 49.7586872586873, + "totalTradedVolume": 33567, + "impliedVolatility": 13.07, + "lastPrice": 256.9, + "change": 203.95, + "pChange": 385.174693106704, + "totalBuyQuantity": 220375, + "totalSellQuantity": 4400, + "bidQty": 1800, + "bidprice": 244.95, + "askQty": 200, + "askPrice": 261.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE23950.00", + "openInterest": 1180, + "changeinOpenInterest": 937, + "pchangeinOpenInterest": 385.59670781893, + "totalTradedVolume": 4370, + "impliedVolatility": 15.29, + "lastPrice": 254.35, + "change": -346.8, + "pChange": -57.6894285951925, + "totalBuyQuantity": 3800, + "totalSellQuantity": 2800, + "bidQty": 200, + "bidprice": 252.9, + "askQty": 75, + "askPrice": 255, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23950, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 23950, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE23950.00", + "openInterest": 276, + "changeinOpenInterest": 181, + "pchangeinOpenInterest": 190.526315789474, + "totalTradedVolume": 1197, + "impliedVolatility": 12.46, + "lastPrice": 324, + "change": 218.85, + "pChange": 208.131241084165, + "totalBuyQuantity": 12100, + "totalSellQuantity": 1025, + "bidQty": 400, + "bidprice": 211.4, + "askQty": 400, + "askPrice": 374.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23950, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE23950.00", + "openInterest": 65, + "changeinOpenInterest": 52, + "pchangeinOpenInterest": 400, + "totalTradedVolume": 108, + "impliedVolatility": 15.45, + "lastPrice": 302.1, + "change": -12.35, + "pChange": -3.9274924471299, + "totalBuyQuantity": 1450, + "totalSellQuantity": 1275, + "bidQty": 50, + "bidprice": 190.35, + "askQty": 25, + "askPrice": 342.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23950, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 23950, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE23950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1925, + "totalSellQuantity": 1100, + "bidQty": 900, + "bidprice": 81.95, + "askQty": 100, + "askPrice": 399.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23950, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE23950.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 230.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13675, + "totalSellQuantity": 2525, + "bidQty": 900, + "bidprice": 172.15, + "askQty": 900, + "askPrice": 450.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23950, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 23950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE23950.00", + "openInterest": 830, + "changeinOpenInterest": 133, + "pchangeinOpenInterest": 19.0817790530847, + "totalTradedVolume": 2818, + "impliedVolatility": 14.64, + "lastPrice": 340.75, + "change": -301.85, + "pChange": -46.9732337379396, + "totalBuyQuantity": 4050, + "totalSellQuantity": 1100, + "bidQty": 1775, + "bidprice": 265.75, + "askQty": 900, + "askPrice": 389.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE23950.00", + "openInterest": 999, + "changeinOpenInterest": -283, + "pchangeinOpenInterest": -22.0748829953198, + "totalTradedVolume": 3376, + "impliedVolatility": 11.45, + "lastPrice": 429.4, + "change": 230.25, + "pChange": 115.616369570675, + "totalBuyQuantity": 16375, + "totalSellQuantity": 4200, + "bidQty": 500, + "bidprice": 420.55, + "askQty": 500, + "askPrice": 468.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23950, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 23950, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE23950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 393.9, + "askQty": 1800, + "askPrice": 551.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23950, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 23950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE23950.00", + "openInterest": 131, + "changeinOpenInterest": 108, + "pchangeinOpenInterest": 469.565217391304, + "totalTradedVolume": 148, + "impliedVolatility": 10.02, + "lastPrice": 646.35, + "change": 66.3000000000001, + "pChange": 11.4300491336954, + "totalBuyQuantity": 1800, + "totalSellQuantity": 3625, + "bidQty": 900, + "bidprice": 565.9, + "askQty": 1800, + "askPrice": 719.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE23950.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 580.2, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 950, + "totalSellQuantity": 300, + "bidQty": 50, + "bidprice": 376.55, + "askQty": 50, + "askPrice": 522.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24000.00", + "openInterest": 119938, + "changeinOpenInterest": 37810, + "pchangeinOpenInterest": 46.0378920709137, + "totalTradedVolume": 625011, + "impliedVolatility": 16.76, + "lastPrice": 233, + "change": -428.6, + "pChange": -64.782345828295, + "totalBuyQuantity": 131225, + "totalSellQuantity": 97900, + "bidQty": 150, + "bidprice": 233.05, + "askQty": 150, + "askPrice": 236.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24000.00", + "openInterest": 219128, + "changeinOpenInterest": -32645, + "pchangeinOpenInterest": -12.966044810206, + "totalTradedVolume": 4489548, + "impliedVolatility": 13.52, + "lastPrice": 140.25, + "change": 126.15, + "pChange": 894.68085106383, + "totalBuyQuantity": 928375, + "totalSellQuantity": 225675, + "bidQty": 25, + "bidprice": 140.2, + "askQty": 600, + "askPrice": 141.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 24000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24000.00", + "openInterest": 10617, + "changeinOpenInterest": 8711, + "pchangeinOpenInterest": 457.030430220357, + "totalTradedVolume": 41456, + "impliedVolatility": 15.15, + "lastPrice": 276.4, + "change": -370.05, + "pChange": -57.2434062959239, + "totalBuyQuantity": 8050, + "totalSellQuantity": 13725, + "bidQty": 200, + "bidprice": 276.3, + "askQty": 50, + "askPrice": 276.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24000.00", + "openInterest": 20757, + "changeinOpenInterest": 5089, + "pchangeinOpenInterest": 32.4802144498341, + "totalTradedVolume": 201367, + "impliedVolatility": 12.87, + "lastPrice": 228, + "change": 182.5, + "pChange": 401.098901098901, + "totalBuyQuantity": 46200, + "totalSellQuantity": 14150, + "bidQty": 25, + "bidprice": 228, + "askQty": 25, + "askPrice": 229.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24000, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24000.00", + "openInterest": 3764, + "changeinOpenInterest": 3436, + "pchangeinOpenInterest": 1047.56097560976, + "totalTradedVolume": 8078, + "impliedVolatility": 14.74, + "lastPrice": 310, + "change": -334.8, + "pChange": -51.9230769230769, + "totalBuyQuantity": 1525, + "totalSellQuantity": 4225, + "bidQty": 25, + "bidprice": 305, + "askQty": 25, + "askPrice": 315.05, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24000, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24000.00", + "openInterest": 4434, + "changeinOpenInterest": 2388, + "pchangeinOpenInterest": 116.715542521994, + "totalTradedVolume": 18459, + "impliedVolatility": 12.65, + "lastPrice": 301.75, + "change": 210.65, + "pChange": 231.229418221734, + "totalBuyQuantity": 13975, + "totalSellQuantity": 2550, + "bidQty": 200, + "bidprice": 293.05, + "askQty": 125, + "askPrice": 301.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24000, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24000.00", + "openInterest": 249, + "changeinOpenInterest": 62, + "pchangeinOpenInterest": 33.1550802139037, + "totalTradedVolume": 708, + "impliedVolatility": 11.76, + "lastPrice": 348.45, + "change": 202.95, + "pChange": 139.484536082474, + "totalBuyQuantity": 14800, + "totalSellQuantity": 4775, + "bidQty": 200, + "bidprice": 349.6, + "askQty": 300, + "askPrice": 357.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24000, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE24000.00", + "openInterest": 20, + "changeinOpenInterest": 20, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 31, + "impliedVolatility": 14.88, + "lastPrice": 344.8, + "change": -283.7, + "pChange": -45.1392203659507, + "totalBuyQuantity": 1250, + "totalSellQuantity": 1325, + "bidQty": 900, + "bidprice": 319.1, + "askQty": 100, + "askPrice": 359.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24000.00", + "openInterest": 136805, + "changeinOpenInterest": 30408, + "pchangeinOpenInterest": 28.5797531885298, + "totalTradedVolume": 128630, + "impliedVolatility": 14.56, + "lastPrice": 361, + "change": -313.15, + "pChange": -46.4510865534377, + "totalBuyQuantity": 15650, + "totalSellQuantity": 47150, + "bidQty": 325, + "bidprice": 361, + "askQty": 100, + "askPrice": 366.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24000.00", + "openInterest": 96974, + "changeinOpenInterest": 9725, + "pchangeinOpenInterest": 11.1462595559835, + "totalTradedVolume": 210161, + "impliedVolatility": 11.68, + "lastPrice": 408, + "change": 225.05, + "pChange": 123.011751844766, + "totalBuyQuantity": 56275, + "totalSellQuantity": 15125, + "bidQty": 25, + "bidprice": 405.1, + "askQty": 750, + "askPrice": 408, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24000, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 825, + "totalSellQuantity": 1800, + "bidQty": 825, + "bidprice": 441.45, + "askQty": 900, + "askPrice": 488.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24000, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 750, + "bidQty": 0, + "bidprice": 0, + "askQty": 375, + "askPrice": 409.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24000.00", + "openInterest": 27895, + "changeinOpenInterest": 8044, + "pchangeinOpenInterest": 40.5218880660924, + "totalTradedVolume": 20616, + "impliedVolatility": 14.4, + "lastPrice": 431.05, + "change": -267.55, + "pChange": -38.2980246206699, + "totalBuyQuantity": 9725, + "totalSellQuantity": 5250, + "bidQty": 100, + "bidprice": 430, + "askQty": 150, + "askPrice": 447.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24000.00", + "openInterest": 21699, + "changeinOpenInterest": 7636, + "pchangeinOpenInterest": 54.2985138306194, + "totalTradedVolume": 21027, + "impliedVolatility": 10.48, + "lastPrice": 633.05, + "change": 251.45, + "pChange": 65.893605870021, + "totalBuyQuantity": 14425, + "totalSellQuantity": 4150, + "bidQty": 25, + "bidprice": 633.05, + "askQty": 300, + "askPrice": 652.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "27-Mar-2025", + "PE": { + "strikePrice": 24000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE24000.00", + "openInterest": 40004, + "changeinOpenInterest": 1193, + "pchangeinOpenInterest": 3.07387080982196, + "totalTradedVolume": 12852, + "impliedVolatility": 15.41, + "lastPrice": 537, + "change": -195.55, + "pChange": -26.6944235888335, + "totalBuyQuantity": 5450, + "totalSellQuantity": 8125, + "bidQty": 25, + "bidprice": 530.25, + "askQty": 25, + "askPrice": 537, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE24000.00", + "openInterest": 20112, + "changeinOpenInterest": 258, + "pchangeinOpenInterest": 1.29948624962224, + "totalTradedVolume": 11078, + "impliedVolatility": 9.33, + "lastPrice": 948, + "change": 274.45, + "pChange": 40.7467893994507, + "totalBuyQuantity": 10450, + "totalSellQuantity": 1675, + "bidQty": 50, + "bidprice": 937.4, + "askQty": 250, + "askPrice": 948, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "26-Jun-2025", + "CE": { + "strikePrice": 24000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE24000.00", + "openInterest": 2444, + "changeinOpenInterest": 83, + "pchangeinOpenInterest": 3.5154595510377, + "totalTradedVolume": 1074, + "impliedVolatility": 6.31, + "lastPrice": 1358, + "change": 286.6, + "pChange": 26.7500466679111, + "totalBuyQuantity": 8500, + "totalSellQuantity": 325, + "bidQty": 25, + "bidprice": 1338.4, + "askQty": 25, + "askPrice": 1358, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE24000.00", + "openInterest": 7062, + "changeinOpenInterest": 401, + "pchangeinOpenInterest": 6.0201170995346, + "totalTradedVolume": 1602, + "impliedVolatility": 16.62, + "lastPrice": 652, + "change": -172.9, + "pChange": -20.9601163777428, + "totalBuyQuantity": 2200, + "totalSellQuantity": 6725, + "bidQty": 25, + "bidprice": 645, + "askQty": 25, + "askPrice": 652, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "25-Sep-2025", + "CE": { + "strikePrice": 24000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025CE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 100, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 425.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "24-Dec-2025", + "CE": { + "strikePrice": 24000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE24000.00", + "openInterest": 1904, + "changeinOpenInterest": 21, + "pchangeinOpenInterest": 1.11524163568773, + "totalTradedVolume": 267, + "impliedVolatility": 0, + "lastPrice": 2175, + "change": 280.45, + "pChange": 14.8029875168246, + "totalBuyQuantity": 1950, + "totalSellQuantity": 825, + "bidQty": 300, + "bidprice": 2170.3, + "askQty": 25, + "askPrice": 2236, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE24000.00", + "openInterest": 14001, + "changeinOpenInterest": 178, + "pchangeinOpenInterest": 1.2877088909788, + "totalTradedVolume": 1648, + "impliedVolatility": 18.89, + "lastPrice": 838, + "change": -131.4, + "pChange": -13.554776150196, + "totalBuyQuantity": 5200, + "totalSellQuantity": 8100, + "bidQty": 325, + "bidprice": 815, + "askQty": 250, + "askPrice": 835, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "25-Jun-2026", + "CE": { + "strikePrice": 24000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 1750, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5700, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 2.55, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "31-Dec-2026", + "CE": { + "strikePrice": 24000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 2050, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE24000.00", + "openInterest": 176, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 976, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3425, + "totalSellQuantity": 200, + "bidQty": 250, + "bidprice": 870.55, + "askQty": 100, + "askPrice": 1278.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 24000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 837.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 24000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE24000.00", + "openInterest": 6, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 764.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 782.55, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 24000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE24000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 728.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 24000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE24000.00", + "openInterest": 20, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 593.7, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 500, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 740.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 24000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE24000.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 694.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 275, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 624.7, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24050, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24050.00", + "openInterest": 32013, + "changeinOpenInterest": 13066, + "pchangeinOpenInterest": 68.960785348604, + "totalTradedVolume": 1087937, + "impliedVolatility": 13.3, + "lastPrice": 116.5, + "change": 105.35, + "pChange": 944.843049327354, + "totalBuyQuantity": 347900, + "totalSellQuantity": 28775, + "bidQty": 1000, + "bidprice": 116.55, + "askQty": 350, + "askPrice": 119.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24050.00", + "openInterest": 7475, + "changeinOpenInterest": 6243, + "pchangeinOpenInterest": 506.737012987013, + "totalTradedVolume": 40872, + "impliedVolatility": 17.15, + "lastPrice": 265.8, + "change": -444.7, + "pChange": -62.5897255453906, + "totalBuyQuantity": 10275, + "totalSellQuantity": 14925, + "bidQty": 275, + "bidprice": 257.85, + "askQty": 350, + "askPrice": 266.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24050, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 24050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24050.00", + "openInterest": 642, + "changeinOpenInterest": 370, + "pchangeinOpenInterest": 136.029411764706, + "totalTradedVolume": 1794, + "impliedVolatility": 15.29, + "lastPrice": 305.1, + "change": -324.85, + "pChange": -51.5675847289468, + "totalBuyQuantity": 3325, + "totalSellQuantity": 3150, + "bidQty": 2275, + "bidprice": 280.05, + "askQty": 125, + "askPrice": 321, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24050.00", + "openInterest": 2372, + "changeinOpenInterest": 1180, + "pchangeinOpenInterest": 98.993288590604, + "totalTradedVolume": 19971, + "impliedVolatility": 13.02, + "lastPrice": 207.1, + "change": 168.35, + "pChange": 434.451612903226, + "totalBuyQuantity": 140825, + "totalSellQuantity": 3100, + "bidQty": 25, + "bidprice": 199, + "askQty": 75, + "askPrice": 207, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24050, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 24050, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24050.00", + "openInterest": 260, + "changeinOpenInterest": 255, + "pchangeinOpenInterest": 5100, + "totalTradedVolume": 405, + "impliedVolatility": 11.94, + "lastPrice": 260.9, + "change": 47.6, + "pChange": 22.3159868729489, + "totalBuyQuantity": 9150, + "totalSellQuantity": 300, + "bidQty": 50, + "bidprice": 242, + "askQty": 300, + "askPrice": 286.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24050, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 900, + "bidQty": 900, + "bidprice": 246.95, + "askQty": 900, + "askPrice": 372.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24050, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24050, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24050.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 245.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13525, + "totalSellQuantity": 900, + "bidQty": 900, + "bidprice": 21.85, + "askQty": 900, + "askPrice": 367.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24050, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24050.00", + "openInterest": 942, + "changeinOpenInterest": 104, + "pchangeinOpenInterest": 12.4105011933174, + "totalTradedVolume": 2956, + "impliedVolatility": 11.45, + "lastPrice": 374.3, + "change": 206.4, + "pChange": 122.930315664086, + "totalBuyQuantity": 20100, + "totalSellQuantity": 5600, + "bidQty": 100, + "bidprice": 370, + "askQty": 250, + "askPrice": 406.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24050.00", + "openInterest": 555, + "changeinOpenInterest": 192, + "pchangeinOpenInterest": 52.8925619834711, + "totalTradedVolume": 1231, + "impliedVolatility": 14.58, + "lastPrice": 384.7, + "change": -323.3, + "pChange": -45.6638418079096, + "totalBuyQuantity": 3750, + "totalSellQuantity": 1100, + "bidQty": 100, + "bidprice": 355.35, + "askQty": 25, + "askPrice": 422.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24050, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24050, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 331.5, + "askQty": 1800, + "askPrice": 485.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24050, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24050.00", + "openInterest": 8, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -11.1111111111111, + "totalTradedVolume": 5, + "impliedVolatility": 9.84, + "lastPrice": 577.5, + "change": 20.85, + "pChange": 3.74562112638103, + "totalBuyQuantity": 3025, + "totalSellQuantity": 4500, + "bidQty": 25, + "bidprice": 577.5, + "askQty": 25, + "askPrice": 654.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24050.00", + "openInterest": 53, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 720, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24100, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24100.00", + "openInterest": 26671, + "changeinOpenInterest": 7724, + "pchangeinOpenInterest": 40.766348234549, + "totalTradedVolume": 79368, + "impliedVolatility": 16.76, + "lastPrice": 291.2, + "change": -468.55, + "pChange": -61.6716025008226, + "totalBuyQuantity": 11950, + "totalSellQuantity": 20625, + "bidQty": 225, + "bidprice": 289.05, + "askQty": 1000, + "askPrice": 294.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24100.00", + "openInterest": 100863, + "changeinOpenInterest": 3044, + "pchangeinOpenInterest": 3.11186988212924, + "totalTradedVolume": 2204389, + "impliedVolatility": 13.27, + "lastPrice": 97.55, + "change": 88.5, + "pChange": 977.900552486188, + "totalBuyQuantity": 351950, + "totalSellQuantity": 65450, + "bidQty": 1075, + "bidprice": 97.3, + "askQty": 1000, + "askPrice": 99, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24100, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24100.00", + "openInterest": 7297, + "changeinOpenInterest": 2144, + "pchangeinOpenInterest": 41.6068309722492, + "totalTradedVolume": 79284, + "impliedVolatility": 12.66, + "lastPrice": 178.9, + "change": 146.95, + "pChange": 459.937402190923, + "totalBuyQuantity": 183450, + "totalSellQuantity": 10100, + "bidQty": 225, + "bidprice": 174.45, + "askQty": 200, + "askPrice": 179.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24100.00", + "openInterest": 877, + "changeinOpenInterest": 562, + "pchangeinOpenInterest": 178.412698412698, + "totalTradedVolume": 2808, + "impliedVolatility": 15.14, + "lastPrice": 330, + "change": -398.2, + "pChange": -54.6827794561934, + "totalBuyQuantity": 1250, + "totalSellQuantity": 4775, + "bidQty": 50, + "bidprice": 320, + "askQty": 100, + "askPrice": 330, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24100, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24100, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24100.00", + "openInterest": 185, + "changeinOpenInterest": 180, + "pchangeinOpenInterest": 3600, + "totalTradedVolume": 393, + "impliedVolatility": 14.96, + "lastPrice": 365.8, + "change": -340.3, + "pChange": -48.1943067554171, + "totalBuyQuantity": 1550, + "totalSellQuantity": 50, + "bidQty": 25, + "bidprice": 336.1, + "askQty": 25, + "askPrice": 373.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24100, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24100.00", + "openInterest": 741, + "changeinOpenInterest": 401, + "pchangeinOpenInterest": 117.941176470588, + "totalTradedVolume": 3684, + "impliedVolatility": 12.04, + "lastPrice": 239.8, + "change": 166.4, + "pChange": 226.702997275204, + "totalBuyQuantity": 8725, + "totalSellQuantity": 1550, + "bidQty": 200, + "bidprice": 239, + "askQty": 25, + "askPrice": 258.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24100, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24100, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24100.00", + "openInterest": 8, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 14.2857142857143, + "totalTradedVolume": 2, + "impliedVolatility": 11.77, + "lastPrice": 297.8, + "change": 97.8, + "pChange": 48.9, + "totalBuyQuantity": 12875, + "totalSellQuantity": 900, + "bidQty": 200, + "bidprice": 293.55, + "askQty": 900, + "askPrice": 344.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24100, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24100.00", + "openInterest": 6677, + "changeinOpenInterest": 411, + "pchangeinOpenInterest": 6.55920842642834, + "totalTradedVolume": 23720, + "impliedVolatility": 12.55, + "lastPrice": 380.6, + "change": 227.65, + "pChange": 148.839490029421, + "totalBuyQuantity": 26350, + "totalSellQuantity": 7375, + "bidQty": 25, + "bidprice": 329.3, + "askQty": 1800, + "askPrice": 361.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24100.00", + "openInterest": 3384, + "changeinOpenInterest": 1426, + "pchangeinOpenInterest": 72.829417773238, + "totalTradedVolume": 5643, + "impliedVolatility": 14.62, + "lastPrice": 410, + "change": -330.05, + "pChange": -44.5983379501385, + "totalBuyQuantity": 4150, + "totalSellQuantity": 4875, + "bidQty": 25, + "bidprice": 395, + "askQty": 25, + "askPrice": 426.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24100, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24100, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 900, + "bidQty": 900, + "bidprice": 338.05, + "askQty": 900, + "askPrice": 433.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24100, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24100.00", + "openInterest": 757, + "changeinOpenInterest": 162, + "pchangeinOpenInterest": 27.2268907563025, + "totalTradedVolume": 1029, + "impliedVolatility": 10.5, + "lastPrice": 574.35, + "change": 234.85, + "pChange": 69.1752577319588, + "totalBuyQuantity": 3925, + "totalSellQuantity": 3950, + "bidQty": 900, + "bidprice": 539.2, + "askQty": 25, + "askPrice": 592.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24100.00", + "openInterest": 238, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.418410041841004, + "totalTradedVolume": 46, + "impliedVolatility": 14.74, + "lastPrice": 487.35, + "change": -258.5, + "pChange": -34.65844338674, + "totalBuyQuantity": 3575, + "totalSellQuantity": 1700, + "bidQty": 1775, + "bidprice": 379.9, + "askQty": 800, + "askPrice": 532.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24150, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24150.00", + "openInterest": 3780, + "changeinOpenInterest": 2066, + "pchangeinOpenInterest": 120.536756126021, + "totalTradedVolume": 16792, + "impliedVolatility": 16.82, + "lastPrice": 323.8, + "change": -482.75, + "pChange": -59.8536978488624, + "totalBuyQuantity": 4550, + "totalSellQuantity": 10650, + "bidQty": 225, + "bidprice": 321.5, + "askQty": 300, + "askPrice": 329.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24150.00", + "openInterest": 35622, + "changeinOpenInterest": 15452, + "pchangeinOpenInterest": 76.6088249876054, + "totalTradedVolume": 1080400, + "impliedVolatility": 13.35, + "lastPrice": 82, + "change": 74.55, + "pChange": 1000.6711409396, + "totalBuyQuantity": 110975, + "totalSellQuantity": 40300, + "bidQty": 1000, + "bidprice": 80.4, + "askQty": 1000, + "askPrice": 81.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24150, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 24150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24150.00", + "openInterest": 596, + "changeinOpenInterest": 336, + "pchangeinOpenInterest": 129.230769230769, + "totalTradedVolume": 840, + "impliedVolatility": 15.74, + "lastPrice": 369.6, + "change": -418.65, + "pChange": -53.1113225499524, + "totalBuyQuantity": 2625, + "totalSellQuantity": 3725, + "bidQty": 150, + "bidprice": 250.5, + "askQty": 175, + "askPrice": 481.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24150.00", + "openInterest": 2498, + "changeinOpenInterest": 1684, + "pchangeinOpenInterest": 206.879606879607, + "totalTradedVolume": 27091, + "impliedVolatility": 12.88, + "lastPrice": 162.5, + "change": 135.8, + "pChange": 508.614232209738, + "totalBuyQuantity": 37650, + "totalSellQuantity": 4850, + "bidQty": 500, + "bidprice": 150.55, + "askQty": 1800, + "askPrice": 162.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24150, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24150, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24150.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 299, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 850, + "totalSellQuantity": 900, + "bidQty": 250, + "bidprice": 292, + "askQty": 900, + "askPrice": 533.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24150, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24150.00", + "openInterest": 198, + "changeinOpenInterest": 159, + "pchangeinOpenInterest": 407.692307692308, + "totalTradedVolume": 1215, + "impliedVolatility": 12.16, + "lastPrice": 220.3, + "change": 152.2, + "pChange": 223.494860499266, + "totalBuyQuantity": 8725, + "totalSellQuantity": 1825, + "bidQty": 25, + "bidprice": 210, + "askQty": 900, + "askPrice": 259, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24150, + "expiryDate": "19-Dec-2024", + "PE": { + "strikePrice": 24150, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024PE24150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 600, + "totalSellQuantity": 0, + "bidQty": 600, + "bidprice": 304.85, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24150, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13625, + "totalSellQuantity": 300, + "bidQty": 900, + "bidprice": 47.3, + "askQty": 300, + "askPrice": 349.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24150, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24150.00", + "openInterest": 1093, + "changeinOpenInterest": 328, + "pchangeinOpenInterest": 42.8758169934641, + "totalTradedVolume": 3033, + "impliedVolatility": 11.33, + "lastPrice": 320.65, + "change": 181.1, + "pChange": 129.774274453601, + "totalBuyQuantity": 14525, + "totalSellQuantity": 2700, + "bidQty": 250, + "bidprice": 254.45, + "askQty": 25, + "askPrice": 378.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24150.00", + "openInterest": 548, + "changeinOpenInterest": 34, + "pchangeinOpenInterest": 6.6147859922179, + "totalTradedVolume": 964, + "impliedVolatility": 14.55, + "lastPrice": 433.15, + "change": -336.65, + "pChange": -43.7321382177189, + "totalBuyQuantity": 1100, + "totalSellQuantity": 1450, + "bidQty": 500, + "bidprice": 374.7, + "askQty": 25, + "askPrice": 494.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24150, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24150, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 1800, + "bidQty": 1800, + "bidprice": 291.9, + "askQty": 1800, + "askPrice": 448.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24150, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24150.00", + "openInterest": 564, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 326.65, + "change": 2.5, + "pChange": 0.771247879068333, + "totalBuyQuantity": 3100, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 401.7, + "askQty": 300, + "askPrice": 619.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24150.00", + "openInterest": 11, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 804, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 925, + "bidQty": 0, + "bidprice": 0, + "askQty": 25, + "askPrice": 522.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24200.00", + "openInterest": 45900, + "changeinOpenInterest": -927, + "pchangeinOpenInterest": -1.97962713818951, + "totalTradedVolume": 55405, + "impliedVolatility": 17.06, + "lastPrice": 360, + "change": -496.1, + "pChange": -57.948837752599, + "totalBuyQuantity": 10225, + "totalSellQuantity": 18800, + "bidQty": 1250, + "bidprice": 355.5, + "askQty": 600, + "askPrice": 364.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24200.00", + "openInterest": 149328, + "changeinOpenInterest": 18104, + "pchangeinOpenInterest": 13.7962567822959, + "totalTradedVolume": 2549995, + "impliedVolatility": 13.31, + "lastPrice": 67.25, + "change": 60.85, + "pChange": 950.78125, + "totalBuyQuantity": 578425, + "totalSellQuantity": 101800, + "bidQty": 600, + "bidprice": 66, + "askQty": 25, + "askPrice": 67.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24200, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24200.00", + "openInterest": 9532, + "changeinOpenInterest": 2008, + "pchangeinOpenInterest": 26.6879319510898, + "totalTradedVolume": 123616, + "impliedVolatility": 12.35, + "lastPrice": 135, + "change": 112.1, + "pChange": 489.519650655022, + "totalBuyQuantity": 226675, + "totalSellQuantity": 18725, + "bidQty": 250, + "bidprice": 132.85, + "askQty": 1800, + "askPrice": 142.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24200.00", + "openInterest": 1281, + "changeinOpenInterest": 839, + "pchangeinOpenInterest": 189.819004524887, + "totalTradedVolume": 4450, + "impliedVolatility": 14.89, + "lastPrice": 385, + "change": -436.6, + "pChange": -53.1402142161636, + "totalBuyQuantity": 2350, + "totalSellQuantity": 5525, + "bidQty": 1000, + "bidprice": 369.95, + "askQty": 125, + "askPrice": 392.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24200, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 24200, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24200.00", + "openInterest": 1620, + "changeinOpenInterest": 951, + "pchangeinOpenInterest": 142.152466367713, + "totalTradedVolume": 5120, + "impliedVolatility": 12.17, + "lastPrice": 199.9, + "change": 144.6, + "pChange": 261.482820976492, + "totalBuyQuantity": 16075, + "totalSellQuantity": 1000, + "bidQty": 200, + "bidprice": 193.4, + "askQty": 25, + "askPrice": 204, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24200, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24200.00", + "openInterest": 133, + "changeinOpenInterest": 52, + "pchangeinOpenInterest": 64.1975308641975, + "totalTradedVolume": 309, + "impliedVolatility": 15.04, + "lastPrice": 423.15, + "change": -386.85, + "pChange": -47.7592592592593, + "totalBuyQuantity": 525, + "totalSellQuantity": 900, + "bidQty": 25, + "bidprice": 411, + "askQty": 75, + "askPrice": 430.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24200, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24200, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24200.00", + "openInterest": 21, + "changeinOpenInterest": 16, + "pchangeinOpenInterest": 320, + "totalTradedVolume": 31, + "impliedVolatility": 12.07, + "lastPrice": 260, + "change": 170, + "pChange": 188.888888888889, + "totalBuyQuantity": 9700, + "totalSellQuantity": 725, + "bidQty": 200, + "bidprice": 245.95, + "askQty": 200, + "askPrice": 286.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24200, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24200.00", + "openInterest": 8086, + "changeinOpenInterest": 2552, + "pchangeinOpenInterest": 46.1149259125407, + "totalTradedVolume": 12279, + "impliedVolatility": 14.42, + "lastPrice": 455.3, + "change": -363.9, + "pChange": -44.42138671875, + "totalBuyQuantity": 3725, + "totalSellQuantity": 10975, + "bidQty": 250, + "bidprice": 444.55, + "askQty": 25, + "askPrice": 463, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24200.00", + "openInterest": 11905, + "changeinOpenInterest": -884, + "pchangeinOpenInterest": -6.91219016342169, + "totalTradedVolume": 37123, + "impliedVolatility": 11.45, + "lastPrice": 300.8, + "change": 174.5, + "pChange": 138.163103721298, + "totalBuyQuantity": 21100, + "totalSellQuantity": 8475, + "bidQty": 25, + "bidprice": 300.2, + "askQty": 25, + "askPrice": 306, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24200, + "expiryDate": "02-Jan-2025", + "PE": { + "strikePrice": 24200, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025PE24200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24200, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1350, + "totalSellQuantity": 0, + "bidQty": 450, + "bidprice": 251.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24200, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24200.00", + "openInterest": 3642, + "changeinOpenInterest": 592, + "pchangeinOpenInterest": 19.4098360655738, + "totalTradedVolume": 856, + "impliedVolatility": 14.69, + "lastPrice": 530, + "change": -284.5, + "pChange": -34.9294045426642, + "totalBuyQuantity": 1875, + "totalSellQuantity": 350, + "bidQty": 25, + "bidprice": 483.1, + "askQty": 25, + "askPrice": 561.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24200.00", + "openInterest": 1221, + "changeinOpenInterest": 260, + "pchangeinOpenInterest": 27.0551508844953, + "totalTradedVolume": 1515, + "impliedVolatility": 10.57, + "lastPrice": 521.75, + "change": 225.05, + "pChange": 75.8510279743849, + "totalBuyQuantity": 3025, + "totalSellQuantity": 950, + "bidQty": 25, + "bidprice": 510.3, + "askQty": 25, + "askPrice": 558.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24250, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24250.00", + "openInterest": 35523, + "changeinOpenInterest": 14802, + "pchangeinOpenInterest": 71.4347763138845, + "totalTradedVolume": 1121664, + "impliedVolatility": 13.09, + "lastPrice": 52.95, + "change": 47.55, + "pChange": 880.555555555556, + "totalBuyQuantity": 125400, + "totalSellQuantity": 22025, + "bidQty": 1600, + "bidprice": 52.95, + "askQty": 1000, + "askPrice": 53.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24250.00", + "openInterest": 2177, + "changeinOpenInterest": 48, + "pchangeinOpenInterest": 2.25457961484265, + "totalTradedVolume": 3440, + "impliedVolatility": 17.93, + "lastPrice": 404.4, + "change": -513.15, + "pChange": -55.9261075690698, + "totalBuyQuantity": 8800, + "totalSellQuantity": 10000, + "bidQty": 600, + "bidprice": 396, + "askQty": 600, + "askPrice": 401.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24250, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24250.00", + "openInterest": 2457, + "changeinOpenInterest": 1989, + "pchangeinOpenInterest": 425, + "totalTradedVolume": 23910, + "impliedVolatility": 12.46, + "lastPrice": 120, + "change": 100.85, + "pChange": 526.631853785901, + "totalBuyQuantity": 43550, + "totalSellQuantity": 3025, + "bidQty": 1700, + "bidprice": 117.9, + "askQty": 125, + "askPrice": 120, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24250.00", + "openInterest": 253, + "changeinOpenInterest": 168, + "pchangeinOpenInterest": 197.647058823529, + "totalTradedVolume": 541, + "impliedVolatility": 15.83, + "lastPrice": 432.75, + "change": -443.25, + "pChange": -50.5993150684932, + "totalBuyQuantity": 3100, + "totalSellQuantity": 2725, + "bidQty": 300, + "bidprice": 316.05, + "askQty": 200, + "askPrice": 431.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24250, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24250, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 368.55, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 700, + "totalSellQuantity": 900, + "bidQty": 700, + "bidprice": 333.05, + "askQty": 900, + "askPrice": 484.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24250, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 468.15, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 10100, + "totalSellQuantity": 800, + "bidQty": 300, + "bidprice": 63.85, + "askQty": 800, + "askPrice": 210.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24250, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24250, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 10025, + "totalSellQuantity": 275, + "bidQty": 900, + "bidprice": 104.95, + "askQty": 275, + "askPrice": 276.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24250, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24250.00", + "openInterest": 403, + "changeinOpenInterest": -144, + "pchangeinOpenInterest": -26.3254113345521, + "totalTradedVolume": 314, + "impliedVolatility": 15.12, + "lastPrice": 502.6, + "change": -342.6, + "pChange": -40.5347846663512, + "totalBuyQuantity": 1600, + "totalSellQuantity": 2900, + "bidQty": 75, + "bidprice": 441.95, + "askQty": 100, + "askPrice": 514.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24250.00", + "openInterest": 1762, + "changeinOpenInterest": 440, + "pchangeinOpenInterest": 33.2829046898638, + "totalTradedVolume": 2424, + "impliedVolatility": 11.41, + "lastPrice": 277.25, + "change": 162.15, + "pChange": 140.877497827976, + "totalBuyQuantity": 16925, + "totalSellQuantity": 2675, + "bidQty": 300, + "bidprice": 250.3, + "askQty": 25, + "askPrice": 299, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24250, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24250, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1800, + "totalSellQuantity": 1575, + "bidQty": 900, + "bidprice": 284.7, + "askQty": 900, + "askPrice": 382.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24250, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24250.00", + "openInterest": 492, + "changeinOpenInterest": 202, + "pchangeinOpenInterest": 69.6551724137931, + "totalTradedVolume": 417, + "impliedVolatility": 10.54, + "lastPrice": 493.8, + "change": 211, + "pChange": 74.6110325318246, + "totalBuyQuantity": 3625, + "totalSellQuantity": 1075, + "bidQty": 900, + "bidprice": 452.8, + "askQty": 25, + "askPrice": 543.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24250.00", + "openInterest": 9, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 531.4, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 900, + "bidQty": 0, + "bidprice": 0, + "askQty": 900, + "askPrice": 646.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24300, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24300.00", + "openInterest": 51022, + "changeinOpenInterest": -615, + "pchangeinOpenInterest": -1.19100644886419, + "totalTradedVolume": 16781, + "impliedVolatility": 17.34, + "lastPrice": 434.75, + "change": -515.5, + "pChange": -54.2488818731913, + "totalBuyQuantity": 10000, + "totalSellQuantity": 14525, + "bidQty": 600, + "bidprice": 435.2, + "askQty": 600, + "askPrice": 441.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24300.00", + "openInterest": 152231, + "changeinOpenInterest": 36492, + "pchangeinOpenInterest": 31.5295622046156, + "totalTradedVolume": 1833866, + "impliedVolatility": 13.13, + "lastPrice": 43, + "change": 38.25, + "pChange": 805.263157894737, + "totalBuyQuantity": 488025, + "totalSellQuantity": 83250, + "bidQty": 1750, + "bidprice": 42.5, + "askQty": 3275, + "askPrice": 43, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24300, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24300, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24300.00", + "openInterest": 10693, + "changeinOpenInterest": 4785, + "pchangeinOpenInterest": 80.9918754231551, + "totalTradedVolume": 97252, + "impliedVolatility": 12.22, + "lastPrice": 101.05, + "change": 84.25, + "pChange": 501.488095238095, + "totalBuyQuantity": 254350, + "totalSellQuantity": 2625, + "bidQty": 450, + "bidprice": 101, + "askQty": 25, + "askPrice": 105, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24300, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24300.00", + "openInterest": 379, + "changeinOpenInterest": 260, + "pchangeinOpenInterest": 218.487394957983, + "totalTradedVolume": 2212, + "impliedVolatility": 15.25, + "lastPrice": 456.1, + "change": -453.9, + "pChange": -49.8791208791209, + "totalBuyQuantity": 2675, + "totalSellQuantity": 5950, + "bidQty": 200, + "bidprice": 436.95, + "askQty": 300, + "askPrice": 480.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24300, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24300, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24300.00", + "openInterest": 17, + "changeinOpenInterest": 5, + "pchangeinOpenInterest": 41.6666666666667, + "totalTradedVolume": 32, + "impliedVolatility": 15.38, + "lastPrice": 490.6, + "change": -112.85, + "pChange": -18.7008037119894, + "totalBuyQuantity": 900, + "totalSellQuantity": 675, + "bidQty": 200, + "bidprice": 390.6, + "askQty": 200, + "askPrice": 517.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24300, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24300.00", + "openInterest": 1478, + "changeinOpenInterest": 622, + "pchangeinOpenInterest": 72.6635514018692, + "totalTradedVolume": 7950, + "impliedVolatility": 11.49, + "lastPrice": 148.55, + "change": 105.1, + "pChange": 241.887226697353, + "totalBuyQuantity": 21600, + "totalSellQuantity": 1725, + "bidQty": 1800, + "bidprice": 157.6, + "askQty": 250, + "askPrice": 168, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24300, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24300, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24300.00", + "openInterest": 14, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 7.69230769230769, + "totalTradedVolume": 79, + "impliedVolatility": 11.6, + "lastPrice": 207.35, + "change": 136.55, + "pChange": 192.867231638418, + "totalBuyQuantity": 9800, + "totalSellQuantity": 1600, + "bidQty": 200, + "bidprice": 208.15, + "askQty": 25, + "askPrice": 241.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24300, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24300.00", + "openInterest": 11682, + "changeinOpenInterest": 355, + "pchangeinOpenInterest": 3.13410435243224, + "totalTradedVolume": 33368, + "impliedVolatility": 11.47, + "lastPrice": 257.9, + "change": 153.85, + "pChange": 147.861604997597, + "totalBuyQuantity": 24500, + "totalSellQuantity": 6875, + "bidQty": 25, + "bidprice": 245.35, + "askQty": 25, + "askPrice": 261.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24300.00", + "openInterest": 3156, + "changeinOpenInterest": 726, + "pchangeinOpenInterest": 29.8765432098765, + "totalTradedVolume": 2063, + "impliedVolatility": 14.81, + "lastPrice": 521.55, + "change": -371.6, + "pChange": -41.6055533784919, + "totalBuyQuantity": 1975, + "totalSellQuantity": 6075, + "bidQty": 25, + "bidprice": 500, + "askQty": 25, + "askPrice": 524.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24300, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24300, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24300.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2250, + "totalSellQuantity": 900, + "bidQty": 900, + "bidprice": 125.15, + "askQty": 900, + "askPrice": 347.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24300, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24300, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24300.00", + "openInterest": 974, + "changeinOpenInterest": 169, + "pchangeinOpenInterest": 20.9937888198758, + "totalTradedVolume": 764, + "impliedVolatility": 10.69, + "lastPrice": 474.7, + "change": 210.5, + "pChange": 79.6744890234671, + "totalBuyQuantity": 3925, + "totalSellQuantity": 1350, + "bidQty": 1200, + "bidprice": 360.15, + "askQty": 25, + "askPrice": 504.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24300, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24300.00", + "openInterest": 337, + "changeinOpenInterest": 187, + "pchangeinOpenInterest": 124.666666666667, + "totalTradedVolume": 602, + "impliedVolatility": 14.73, + "lastPrice": 579.45, + "change": -286.5, + "pChange": -33.085051099948, + "totalBuyQuantity": 1150, + "totalSellQuantity": 2025, + "bidQty": 250, + "bidprice": 501.05, + "askQty": 25, + "askPrice": 603.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24350.00", + "openInterest": 1485, + "changeinOpenInterest": 25, + "pchangeinOpenInterest": 1.71232876712329, + "totalTradedVolume": 739, + "impliedVolatility": 18.62, + "lastPrice": 485, + "change": -531.9, + "pChange": -52.3060281246927, + "totalBuyQuantity": 9475, + "totalSellQuantity": 10575, + "bidQty": 600, + "bidprice": 476.1, + "askQty": 600, + "askPrice": 484.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24350.00", + "openInterest": 24739, + "changeinOpenInterest": 12364, + "pchangeinOpenInterest": 99.9111111111111, + "totalTradedVolume": 885552, + "impliedVolatility": 13.06, + "lastPrice": 33.8, + "change": 29.7, + "pChange": 724.390243902439, + "totalBuyQuantity": 114525, + "totalSellQuantity": 27725, + "bidQty": 50, + "bidprice": 33.8, + "askQty": 1075, + "askPrice": 34.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24350, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 24350, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24350.00", + "openInterest": 74, + "changeinOpenInterest": 29, + "pchangeinOpenInterest": 64.4444444444444, + "totalTradedVolume": 41, + "impliedVolatility": 15.45, + "lastPrice": 493.45, + "change": -388.5, + "pChange": -44.0501162197404, + "totalBuyQuantity": 1175, + "totalSellQuantity": 3950, + "bidQty": 375, + "bidprice": 53.45, + "askQty": 375, + "askPrice": 637.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24350, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24350.00", + "openInterest": 2740, + "changeinOpenInterest": 1991, + "pchangeinOpenInterest": 265.821094793057, + "totalTradedVolume": 30202, + "impliedVolatility": 12.15, + "lastPrice": 86.5, + "change": 71.35, + "pChange": 470.957095709571, + "totalBuyQuantity": 35200, + "totalSellQuantity": 2050, + "bidQty": 25, + "bidprice": 86, + "askQty": 150, + "askPrice": 94.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24350, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24350, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 500, + "totalSellQuantity": 0, + "bidQty": 500, + "bidprice": 424.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24350, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24350.00", + "openInterest": 433, + "changeinOpenInterest": 405, + "pchangeinOpenInterest": 1446.42857142857, + "totalTradedVolume": 610, + "impliedVolatility": 11.78, + "lastPrice": 138.2, + "change": 62.6, + "pChange": 82.8042328042328, + "totalBuyQuantity": 15275, + "totalSellQuantity": 425, + "bidQty": 1800, + "bidprice": 138.3, + "askQty": 50, + "askPrice": 155, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24350, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24350, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24350.00", + "openInterest": 1, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -50, + "totalTradedVolume": 2, + "impliedVolatility": 10, + "lastPrice": 150, + "change": 73.6, + "pChange": 96.3350785340314, + "totalBuyQuantity": 9950, + "totalSellQuantity": 125, + "bidQty": 900, + "bidprice": 18.05, + "askQty": 125, + "askPrice": 235.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24350, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24350.00", + "openInterest": 220, + "changeinOpenInterest": -44, + "pchangeinOpenInterest": -16.6666666666667, + "totalTradedVolume": 245, + "impliedVolatility": 15.12, + "lastPrice": 558.9, + "change": -353.75, + "pChange": -38.7607516572618, + "totalBuyQuantity": 1475, + "totalSellQuantity": 1025, + "bidQty": 25, + "bidprice": 501.35, + "askQty": 25, + "askPrice": 605.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24350.00", + "openInterest": 995, + "changeinOpenInterest": -288, + "pchangeinOpenInterest": -22.4473889321902, + "totalTradedVolume": 2678, + "impliedVolatility": 11.4, + "lastPrice": 236, + "change": 142.2, + "pChange": 151.599147121535, + "totalBuyQuantity": 17475, + "totalSellQuantity": 2825, + "bidQty": 300, + "bidprice": 226.55, + "askQty": 675, + "askPrice": 289.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24350, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24350, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2100, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 51.55, + "askQty": 1800, + "askPrice": 351.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24350, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24350, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24350.00", + "openInterest": 19, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 387.2, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2400, + "totalSellQuantity": 850, + "bidQty": 600, + "bidprice": 378.7, + "askQty": 850, + "askPrice": 491.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24350, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24350.00", + "openInterest": 78, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 755.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 25, + "bidQty": 0, + "bidprice": 0, + "askQty": 25, + "askPrice": 749.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24400, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24400.00", + "openInterest": 124294, + "changeinOpenInterest": 32732, + "pchangeinOpenInterest": 35.7484545990695, + "totalTradedVolume": 1841427, + "impliedVolatility": 13.22, + "lastPrice": 27.7, + "change": 24, + "pChange": 648.648648648649, + "totalBuyQuantity": 296750, + "totalSellQuantity": 65300, + "bidQty": 1600, + "bidprice": 27, + "askQty": 175, + "askPrice": 27.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24400.00", + "openInterest": 41192, + "changeinOpenInterest": -1935, + "pchangeinOpenInterest": -4.48674844065203, + "totalTradedVolume": 7915, + "impliedVolatility": 18.76, + "lastPrice": 525, + "change": -524.7, + "pChange": -49.9857102029151, + "totalBuyQuantity": 9350, + "totalSellQuantity": 14275, + "bidQty": 600, + "bidprice": 519.3, + "askQty": 250, + "askPrice": 526.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24400, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24400, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24400.00", + "openInterest": 6303, + "changeinOpenInterest": 1299, + "pchangeinOpenInterest": 25.9592326139089, + "totalTradedVolume": 74556, + "impliedVolatility": 12.15, + "lastPrice": 74.55, + "change": 61.55, + "pChange": 473.461538461538, + "totalBuyQuantity": 219775, + "totalSellQuantity": 6550, + "bidQty": 500, + "bidprice": 73.15, + "askQty": 25, + "askPrice": 77.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24400, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24400.00", + "openInterest": 318, + "changeinOpenInterest": 288, + "pchangeinOpenInterest": 960, + "totalTradedVolume": 1643, + "impliedVolatility": 16.01, + "lastPrice": 537.65, + "change": -459.85, + "pChange": -46.1002506265664, + "totalBuyQuantity": 1550, + "totalSellQuantity": 2625, + "bidQty": 100, + "bidprice": 509.45, + "askQty": 225, + "askPrice": 541.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24400, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24400, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24400.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 0, + "bidQty": 900, + "bidprice": 448.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24400, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24400.00", + "openInterest": 675, + "changeinOpenInterest": 308, + "pchangeinOpenInterest": 83.9237057220709, + "totalTradedVolume": 2404, + "impliedVolatility": 12.2, + "lastPrice": 131.3, + "change": 96.6, + "pChange": 278.386167146974, + "totalBuyQuantity": 31625, + "totalSellQuantity": 950, + "bidQty": 50, + "bidprice": 124.85, + "askQty": 50, + "askPrice": 131.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24400, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24400, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24400.00", + "openInterest": 16, + "changeinOpenInterest": -5, + "pchangeinOpenInterest": -23.8095238095238, + "totalTradedVolume": 34, + "impliedVolatility": 12.59, + "lastPrice": 195.55, + "change": 75.05, + "pChange": 62.2821576763486, + "totalBuyQuantity": 11900, + "totalSellQuantity": 5400, + "bidQty": 200, + "bidprice": 171.35, + "askQty": 1800, + "askPrice": 190.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24400, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24400.00", + "openInterest": 2990, + "changeinOpenInterest": 478, + "pchangeinOpenInterest": 19.0286624203822, + "totalTradedVolume": 2373, + "impliedVolatility": 14.54, + "lastPrice": 572.15, + "change": -397.65, + "pChange": -41.0032996494123, + "totalBuyQuantity": 2150, + "totalSellQuantity": 4450, + "bidQty": 75, + "bidprice": 558.15, + "askQty": 25, + "askPrice": 601.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24400.00", + "openInterest": 16601, + "changeinOpenInterest": 2074, + "pchangeinOpenInterest": 14.2768637709093, + "totalTradedVolume": 31108, + "impliedVolatility": 11.47, + "lastPrice": 219.1, + "change": 132.25, + "pChange": 152.274035693725, + "totalBuyQuantity": 22200, + "totalSellQuantity": 4975, + "bidQty": 175, + "bidprice": 218.5, + "askQty": 25, + "askPrice": 241.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24400, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24400, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24400.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 1800, + "bidQty": 0, + "bidprice": 0, + "askQty": 1800, + "askPrice": 305.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24400, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24400, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24400.00", + "openInterest": 3243, + "changeinOpenInterest": 1614, + "pchangeinOpenInterest": 99.0791896869245, + "totalTradedVolume": 2035, + "impliedVolatility": 14.55, + "lastPrice": 621.8, + "change": -321.45, + "pChange": -34.0789822422476, + "totalBuyQuantity": 1850, + "totalSellQuantity": 425, + "bidQty": 50, + "bidprice": 566.7, + "askQty": 25, + "askPrice": 643.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24400, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24400.00", + "openInterest": 693, + "changeinOpenInterest": 136, + "pchangeinOpenInterest": 24.4165170556553, + "totalTradedVolume": 434, + "impliedVolatility": 10.55, + "lastPrice": 419.95, + "change": 189.05, + "pChange": 81.875270679948, + "totalBuyQuantity": 5325, + "totalSellQuantity": 1275, + "bidQty": 25, + "bidprice": 420, + "askQty": 25, + "askPrice": 435.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24450, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24450.00", + "openInterest": 1312, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 0.305810397553517, + "totalTradedVolume": 667, + "impliedVolatility": 19.69, + "lastPrice": 572.85, + "change": -522.3, + "pChange": -47.6920969730174, + "totalBuyQuantity": 9725, + "totalSellQuantity": 10450, + "bidQty": 600, + "bidprice": 562.4, + "askQty": 600, + "askPrice": 572.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24450.00", + "openInterest": 27857, + "changeinOpenInterest": 16069, + "pchangeinOpenInterest": 136.316593145572, + "totalTradedVolume": 842671, + "impliedVolatility": 13.24, + "lastPrice": 21.8, + "change": 18.55, + "pChange": 570.769230769231, + "totalBuyQuantity": 106525, + "totalSellQuantity": 21300, + "bidQty": 1000, + "bidprice": 21.45, + "askQty": 1525, + "askPrice": 22, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24450, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24450, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24450.00", + "openInterest": 1341, + "changeinOpenInterest": 660, + "pchangeinOpenInterest": 96.9162995594714, + "totalTradedVolume": 21951, + "impliedVolatility": 12.1, + "lastPrice": 63.1, + "change": 51.55, + "pChange": 446.320346320346, + "totalBuyQuantity": 33500, + "totalSellQuantity": 1100, + "bidQty": 50, + "bidprice": 61, + "askQty": 500, + "askPrice": 70.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24450, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24450.00", + "openInterest": 54, + "changeinOpenInterest": 14, + "pchangeinOpenInterest": 35, + "totalTradedVolume": 83, + "impliedVolatility": 16.78, + "lastPrice": 585.5, + "change": -324.65, + "pChange": -35.6699445146404, + "totalBuyQuantity": 150, + "totalSellQuantity": 3950, + "bidQty": 50, + "bidprice": 551.4, + "askQty": 150, + "askPrice": 683.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24450, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24450, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24450, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24450.00", + "openInterest": 72, + "changeinOpenInterest": 5, + "pchangeinOpenInterest": 7.46268656716418, + "totalTradedVolume": 177, + "impliedVolatility": 11.98, + "lastPrice": 113.15, + "change": 71.6, + "pChange": 172.322503008424, + "totalBuyQuantity": 24475, + "totalSellQuantity": 800, + "bidQty": 500, + "bidprice": 103.55, + "askQty": 300, + "askPrice": 134.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24450, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24450, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24450.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 97.6, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13750, + "totalSellQuantity": 0, + "bidQty": 150, + "bidprice": 65.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24450, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24450.00", + "openInterest": 358, + "changeinOpenInterest": 24, + "pchangeinOpenInterest": 7.18562874251497, + "totalTradedVolume": 268, + "impliedVolatility": 14.65, + "lastPrice": 605.6, + "change": -361.65, + "pChange": -37.3895063323856, + "totalBuyQuantity": 1600, + "totalSellQuantity": 1000, + "bidQty": 100, + "bidprice": 577, + "askQty": 1000, + "askPrice": 849.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24450.00", + "openInterest": 1181, + "changeinOpenInterest": 116, + "pchangeinOpenInterest": 10.8920187793427, + "totalTradedVolume": 2605, + "impliedVolatility": 11.8, + "lastPrice": 210.45, + "change": 132, + "pChange": 168.260038240918, + "totalBuyQuantity": 14400, + "totalSellQuantity": 2400, + "bidQty": 900, + "bidprice": 193.15, + "askQty": 900, + "askPrice": 299.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24450, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24450, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2025, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 42.85, + "askQty": 1800, + "askPrice": 357.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24450, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24450, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24450.00", + "openInterest": 16, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 827.4, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24450, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24450.00", + "openInterest": 120, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0.840336134453782, + "totalTradedVolume": 13, + "impliedVolatility": 10.68, + "lastPrice": 402.65, + "change": 170.65, + "pChange": 73.5560344827586, + "totalBuyQuantity": 1825, + "totalSellQuantity": 900, + "bidQty": 900, + "bidprice": 381.25, + "askQty": 900, + "askPrice": 453.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24500, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24500.00", + "openInterest": 257968, + "changeinOpenInterest": 16725, + "pchangeinOpenInterest": 6.93284364727681, + "totalTradedVolume": 2447961, + "impliedVolatility": 13.33, + "lastPrice": 17.4, + "change": 14.4, + "pChange": 480, + "totalBuyQuantity": 1373150, + "totalSellQuantity": 224475, + "bidQty": 75, + "bidprice": 17.4, + "askQty": 1025, + "askPrice": 17.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24500.00", + "openInterest": 76632, + "changeinOpenInterest": 1073, + "pchangeinOpenInterest": 1.4200823197766, + "totalTradedVolume": 37975, + "impliedVolatility": 19.31, + "lastPrice": 610.15, + "change": -543.55, + "pChange": -47.1136343936899, + "totalBuyQuantity": 12775, + "totalSellQuantity": 21575, + "bidQty": 1650, + "bidprice": 610, + "askQty": 250, + "askPrice": 616.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24500, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 24500, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24500.00", + "openInterest": 588, + "changeinOpenInterest": 197, + "pchangeinOpenInterest": 50.383631713555, + "totalTradedVolume": 1092, + "impliedVolatility": 15.57, + "lastPrice": 605, + "change": -518.95, + "pChange": -46.1719827394457, + "totalBuyQuantity": 3800, + "totalSellQuantity": 2500, + "bidQty": 75, + "bidprice": 595.6, + "askQty": 50, + "askPrice": 607.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24500, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24500.00", + "openInterest": 17560, + "changeinOpenInterest": 5482, + "pchangeinOpenInterest": 45.3883093227356, + "totalTradedVolume": 134467, + "impliedVolatility": 12.29, + "lastPrice": 56, + "change": 45.85, + "pChange": 451.724137931035, + "totalBuyQuantity": 62125, + "totalSellQuantity": 13600, + "bidQty": 100, + "bidprice": 56, + "askQty": 25, + "askPrice": 57.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24500, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 24500, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24500.00", + "openInterest": 1882, + "changeinOpenInterest": 318, + "pchangeinOpenInterest": 20.3324808184143, + "totalTradedVolume": 10594, + "impliedVolatility": 12.24, + "lastPrice": 105, + "change": 77.35, + "pChange": 279.746835443038, + "totalBuyQuantity": 34825, + "totalSellQuantity": 4425, + "bidQty": 50, + "bidprice": 100, + "askQty": 1725, + "askPrice": 105, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24500, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24500.00", + "openInterest": 86, + "changeinOpenInterest": 79, + "pchangeinOpenInterest": 1128.57142857143, + "totalTradedVolume": 200, + "impliedVolatility": 16.17, + "lastPrice": 638.85, + "change": -300.15, + "pChange": -31.9648562300319, + "totalBuyQuantity": 100, + "totalSellQuantity": 0, + "bidQty": 100, + "bidprice": 577.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24500, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24500, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24500.00", + "openInterest": 144, + "changeinOpenInterest": 89, + "pchangeinOpenInterest": 161.818181818182, + "totalTradedVolume": 669, + "impliedVolatility": 11.91, + "lastPrice": 148, + "change": 96.3, + "pChange": 186.266924564797, + "totalBuyQuantity": 21250, + "totalSellQuantity": 3725, + "bidQty": 200, + "bidprice": 140.3, + "askQty": 900, + "askPrice": 163.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24500, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24500.00", + "openInterest": 26721, + "changeinOpenInterest": 1162, + "pchangeinOpenInterest": 4.54634375366798, + "totalTradedVolume": 18086, + "impliedVolatility": 14.56, + "lastPrice": 634.4, + "change": -417.6, + "pChange": -39.6958174904943, + "totalBuyQuantity": 5425, + "totalSellQuantity": 15250, + "bidQty": 25, + "bidprice": 632.85, + "askQty": 200, + "askPrice": 640, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24500.00", + "openInterest": 65023, + "changeinOpenInterest": -6434, + "pchangeinOpenInterest": -9.00401640147221, + "totalTradedVolume": 152588, + "impliedVolatility": 11.74, + "lastPrice": 192, + "change": 120.65, + "pChange": 169.096005606167, + "totalBuyQuantity": 36500, + "totalSellQuantity": 23025, + "bidQty": 25, + "bidprice": 186.8, + "askQty": 875, + "askPrice": 192, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24500, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24500, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24500.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1875, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 188.65, + "askQty": 1800, + "askPrice": 247.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24500, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24500, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24500.00", + "openInterest": 15413, + "changeinOpenInterest": 1266, + "pchangeinOpenInterest": 8.94889375839401, + "totalTradedVolume": 15381, + "impliedVolatility": 10.84, + "lastPrice": 387, + "change": 179.9, + "pChange": 86.8662481892806, + "totalBuyQuantity": 12325, + "totalSellQuantity": 4550, + "bidQty": 100, + "bidprice": 381, + "askQty": 275, + "askPrice": 387, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24500, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24500.00", + "openInterest": 8831, + "changeinOpenInterest": 1010, + "pchangeinOpenInterest": 12.9139496228104, + "totalTradedVolume": 2840, + "impliedVolatility": 14.45, + "lastPrice": 670, + "change": -335.15, + "pChange": -33.3432820971994, + "totalBuyQuantity": 2675, + "totalSellQuantity": 4325, + "bidQty": 25, + "bidprice": 660, + "askQty": 50, + "askPrice": 678.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24550, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24550.00", + "openInterest": 33938, + "changeinOpenInterest": 18156, + "pchangeinOpenInterest": 115.042453427956, + "totalTradedVolume": 668483, + "impliedVolatility": 13.53, + "lastPrice": 14.25, + "change": 11.35, + "pChange": 391.379310344828, + "totalBuyQuantity": 292025, + "totalSellQuantity": 21750, + "bidQty": 625, + "bidprice": 12.25, + "askQty": 1275, + "askPrice": 13.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24550.00", + "openInterest": 780, + "changeinOpenInterest": -14, + "pchangeinOpenInterest": -1.7632241813602, + "totalTradedVolume": 173, + "impliedVolatility": 21.1, + "lastPrice": 665.8, + "change": -540.75, + "pChange": -44.8178691309933, + "totalBuyQuantity": 6600, + "totalSellQuantity": 6650, + "bidQty": 100, + "bidprice": 650.75, + "askQty": 100, + "askPrice": 666.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24550, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24550, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24550.00", + "openInterest": 1276, + "changeinOpenInterest": 164, + "pchangeinOpenInterest": 14.7482014388489, + "totalTradedVolume": 15380, + "impliedVolatility": 12.59, + "lastPrice": 50.95, + "change": 41.8, + "pChange": 456.830601092896, + "totalBuyQuantity": 36200, + "totalSellQuantity": 325, + "bidQty": 25, + "bidprice": 46, + "askQty": 250, + "askPrice": 54.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24550, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24550.00", + "openInterest": 47, + "changeinOpenInterest": 46, + "pchangeinOpenInterest": 4600, + "totalTradedVolume": 66, + "impliedVolatility": 17.36, + "lastPrice": 668.4, + "change": -352.7, + "pChange": -34.5411810792283, + "totalBuyQuantity": 2975, + "totalSellQuantity": 3225, + "bidQty": 50, + "bidprice": 631.25, + "askQty": 100, + "askPrice": 772.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24550, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 24550, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24550.00", + "openInterest": 185, + "changeinOpenInterest": 117, + "pchangeinOpenInterest": 172.058823529412, + "totalTradedVolume": 558, + "impliedVolatility": 11.96, + "lastPrice": 88.35, + "change": 63.55, + "pChange": 256.25, + "totalBuyQuantity": 24300, + "totalSellQuantity": 900, + "bidQty": 600, + "bidprice": 27.15, + "askQty": 900, + "askPrice": 100.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24550, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24550, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24550, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 15300, + "totalSellQuantity": 0, + "bidQty": 150, + "bidprice": 25.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24550, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24550.00", + "openInterest": 1299, + "changeinOpenInterest": 151, + "pchangeinOpenInterest": 13.1533101045296, + "totalTradedVolume": 2913, + "impliedVolatility": 12.09, + "lastPrice": 185.45, + "change": 120.85, + "pChange": 187.074303405573, + "totalBuyQuantity": 13000, + "totalSellQuantity": 2075, + "bidQty": 250, + "bidprice": 161.45, + "askQty": 900, + "askPrice": 185.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24550.00", + "openInterest": 389, + "changeinOpenInterest": 79, + "pchangeinOpenInterest": 25.4838709677419, + "totalTradedVolume": 221, + "impliedVolatility": 14.2, + "lastPrice": 656.9, + "change": -434.55, + "pChange": -39.8140088872601, + "totalBuyQuantity": 1825, + "totalSellQuantity": 4025, + "bidQty": 25, + "bidprice": 631.25, + "askQty": 25, + "askPrice": 695.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24550, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24550, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 300, + "totalSellQuantity": 225, + "bidQty": 300, + "bidprice": 32.1, + "askQty": 225, + "askPrice": 590, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24550, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24550, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24550.00", + "openInterest": 0, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -100, + "totalTradedVolume": 1, + "impliedVolatility": 16.39, + "lastPrice": 777.45, + "change": 187.45, + "pChange": 31.771186440678, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 500, + "askQty": 1775, + "askPrice": 1384.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24550, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24550.00", + "openInterest": 38, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 18, + "impliedVolatility": 10.33, + "lastPrice": 344.8, + "change": 154.7, + "pChange": 81.3782219884272, + "totalBuyQuantity": 9925, + "totalSellQuantity": 375, + "bidQty": 25, + "bidprice": 344.75, + "askQty": 375, + "askPrice": 377.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24600, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24600.00", + "openInterest": 125459, + "changeinOpenInterest": 61950, + "pchangeinOpenInterest": 97.5452298099482, + "totalTradedVolume": 1262138, + "impliedVolatility": 13.4, + "lastPrice": 10.45, + "change": 7.85, + "pChange": 301.923076923077, + "totalBuyQuantity": 774875, + "totalSellQuantity": 49500, + "bidQty": 1000, + "bidprice": 10, + "askQty": 1525, + "askPrice": 10.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24600.00", + "openInterest": 12908, + "changeinOpenInterest": -1215, + "pchangeinOpenInterest": -8.60298803370389, + "totalTradedVolume": 2687, + "impliedVolatility": 21.01, + "lastPrice": 706.75, + "change": -539.65, + "pChange": -43.2966944801027, + "totalBuyQuantity": 6875, + "totalSellQuantity": 7875, + "bidQty": 75, + "bidprice": 700.35, + "askQty": 25, + "askPrice": 711.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24600, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 24600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24600.00", + "openInterest": 98, + "changeinOpenInterest": 91, + "pchangeinOpenInterest": 1300, + "totalTradedVolume": 125, + "impliedVolatility": 17.22, + "lastPrice": 705, + "change": -492.5, + "pChange": -41.1273486430063, + "totalBuyQuantity": 3225, + "totalSellQuantity": 3200, + "bidQty": 50, + "bidprice": 674.8, + "askQty": 100, + "askPrice": 705.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24600.00", + "openInterest": 3971, + "changeinOpenInterest": 1409, + "pchangeinOpenInterest": 54.9960967993755, + "totalTradedVolume": 41396, + "impliedVolatility": 12.46, + "lastPrice": 42, + "change": 33.6, + "pChange": 400, + "totalBuyQuantity": 45125, + "totalSellQuantity": 725, + "bidQty": 300, + "bidprice": 39, + "askQty": 75, + "askPrice": 42, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24600, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24600, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24600, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24600.00", + "openInterest": 802, + "changeinOpenInterest": 264, + "pchangeinOpenInterest": 49.0706319702602, + "totalTradedVolume": 3364, + "impliedVolatility": 12.39, + "lastPrice": 84.9, + "change": 62.7, + "pChange": 282.432432432432, + "totalBuyQuantity": 38700, + "totalSellQuantity": 875, + "bidQty": 250, + "bidprice": 77.85, + "askQty": 125, + "askPrice": 86.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24600, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24600, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 21200, + "totalSellQuantity": 1500, + "bidQty": 900, + "bidprice": 61.75, + "askQty": 575, + "askPrice": 147.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24600, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24600.00", + "openInterest": 28369, + "changeinOpenInterest": 215, + "pchangeinOpenInterest": 0.763657029196562, + "totalTradedVolume": 34911, + "impliedVolatility": 11.88, + "lastPrice": 165, + "change": 106, + "pChange": 179.661016949153, + "totalBuyQuantity": 31175, + "totalSellQuantity": 3300, + "bidQty": 1800, + "bidprice": 148.75, + "askQty": 25, + "askPrice": 164.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24600.00", + "openInterest": 3948, + "changeinOpenInterest": 955, + "pchangeinOpenInterest": 31.907784831273, + "totalTradedVolume": 2181, + "impliedVolatility": 14.79, + "lastPrice": 706, + "change": -426.9, + "pChange": -37.6820549033454, + "totalBuyQuantity": 4025, + "totalSellQuantity": 5525, + "bidQty": 75, + "bidprice": 683.15, + "askQty": 100, + "askPrice": 721.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24600, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24600, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2850, + "totalSellQuantity": 0, + "bidQty": 900, + "bidprice": 31.85, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24600, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24600.00", + "openInterest": 231, + "changeinOpenInterest": 27, + "pchangeinOpenInterest": 13.2352941176471, + "totalTradedVolume": 58, + "impliedVolatility": 16.86, + "lastPrice": 824.6, + "change": -260.35, + "pChange": -23.9964975344486, + "totalBuyQuantity": 0, + "totalSellQuantity": 25, + "bidQty": 0, + "bidprice": 0, + "askQty": 25, + "askPrice": 783.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24600.00", + "openInterest": 279, + "changeinOpenInterest": 58, + "pchangeinOpenInterest": 26.2443438914027, + "totalTradedVolume": 509, + "impliedVolatility": 10.66, + "lastPrice": 337.9, + "change": 158.9, + "pChange": 88.7709497206704, + "totalBuyQuantity": 13025, + "totalSellQuantity": 25, + "bidQty": 300, + "bidprice": 123.1, + "askQty": 25, + "askPrice": 450, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24650, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24650.00", + "openInterest": 869, + "changeinOpenInterest": -232, + "pchangeinOpenInterest": -21.0717529518619, + "totalTradedVolume": 713, + "impliedVolatility": 25.05, + "lastPrice": 780.25, + "change": -516.9, + "pChange": -39.8488995104653, + "totalBuyQuantity": 6100, + "totalSellQuantity": 6175, + "bidQty": 75, + "bidprice": 739.65, + "askQty": 25, + "askPrice": 761.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24650.00", + "openInterest": 38301, + "changeinOpenInterest": 32423, + "pchangeinOpenInterest": 551.599183395713, + "totalTradedVolume": 574531, + "impliedVolatility": 13.63, + "lastPrice": 8.6, + "change": 6.15, + "pChange": 251.020408163265, + "totalBuyQuantity": 158975, + "totalSellQuantity": 85350, + "bidQty": 200, + "bidprice": 8.2, + "askQty": 1125, + "askPrice": 8.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24650, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24650.00", + "openInterest": 1430, + "changeinOpenInterest": 882, + "pchangeinOpenInterest": 160.948905109489, + "totalTradedVolume": 12508, + "impliedVolatility": 12.4, + "lastPrice": 34.85, + "change": 27.2, + "pChange": 355.555555555556, + "totalBuyQuantity": 46575, + "totalSellQuantity": 800, + "bidQty": 850, + "bidprice": 25, + "askQty": 25, + "askPrice": 35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24650.00", + "openInterest": 11, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1118.6, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 2775, + "bidQty": 0, + "bidprice": 0, + "askQty": 1000, + "askPrice": 866.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24650, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24650, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24650, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24650.00", + "openInterest": 127, + "changeinOpenInterest": 123, + "pchangeinOpenInterest": 3075, + "totalTradedVolume": 167, + "impliedVolatility": 11.95, + "lastPrice": 68.3, + "change": 29, + "pChange": 73.7913486005089, + "totalBuyQuantity": 20825, + "totalSellQuantity": 575, + "bidQty": 900, + "bidprice": 31.7, + "askQty": 575, + "askPrice": 88.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24650, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24650, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 16700, + "totalSellQuantity": 50, + "bidQty": 50, + "bidprice": 25.1, + "askQty": 50, + "askPrice": 186.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24650, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24650.00", + "openInterest": 1145, + "changeinOpenInterest": 250, + "pchangeinOpenInterest": 27.9329608938547, + "totalTradedVolume": 1711, + "impliedVolatility": 11.62, + "lastPrice": 144.5, + "change": 90.75, + "pChange": 168.837209302326, + "totalBuyQuantity": 21725, + "totalSellQuantity": 2200, + "bidQty": 250, + "bidprice": 129.75, + "askQty": 50, + "askPrice": 165, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24650.00", + "openInterest": 131, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0.769230769230769, + "totalTradedVolume": 1, + "impliedVolatility": 13.65, + "lastPrice": 709.9, + "change": -267.6, + "pChange": -27.3759590792839, + "totalBuyQuantity": 2200, + "totalSellQuantity": 3050, + "bidQty": 900, + "bidprice": 606.6, + "askQty": 25, + "askPrice": 778.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24650, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24650, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2850, + "totalSellQuantity": 150, + "bidQty": 300, + "bidprice": 26.1, + "askQty": 150, + "askPrice": 450, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24650, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24650.00", + "openInterest": 124, + "changeinOpenInterest": 115, + "pchangeinOpenInterest": 1277.77777777778, + "totalTradedVolume": 132, + "impliedVolatility": 9.29, + "lastPrice": 263.05, + "change": 53.75, + "pChange": 25.6808408982322, + "totalBuyQuantity": 3225, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 276.2, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24700, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24700.00", + "openInterest": 80392, + "changeinOpenInterest": 40111, + "pchangeinOpenInterest": 99.577964797299, + "totalTradedVolume": 830831, + "impliedVolatility": 13.81, + "lastPrice": 6.95, + "change": 4.6, + "pChange": 195.744680851064, + "totalBuyQuantity": 616775, + "totalSellQuantity": 35325, + "bidQty": 1650, + "bidprice": 6.6, + "askQty": 925, + "askPrice": 6.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24700.00", + "openInterest": 12277, + "changeinOpenInterest": -457, + "pchangeinOpenInterest": -3.58881733940631, + "totalTradedVolume": 1500, + "impliedVolatility": 21.82, + "lastPrice": 798.1, + "change": -550.1, + "pChange": -40.8025515502151, + "totalBuyQuantity": 7700, + "totalSellQuantity": 9725, + "bidQty": 75, + "bidprice": 796.25, + "askQty": 100, + "askPrice": 806.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24700, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24700.00", + "openInterest": 3925, + "changeinOpenInterest": -1972, + "pchangeinOpenInterest": -33.440732575886, + "totalTradedVolume": 50586, + "impliedVolatility": 12.47, + "lastPrice": 29.8, + "change": 23.25, + "pChange": 354.961832061069, + "totalBuyQuantity": 49000, + "totalSellQuantity": 2600, + "bidQty": 550, + "bidprice": 25, + "askQty": 1775, + "askPrice": 29.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24700.00", + "openInterest": 7, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1160, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1575, + "totalSellQuantity": 2775, + "bidQty": 25, + "bidprice": 650, + "askQty": 1000, + "askPrice": 906.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24700, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24700, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24700, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24700.00", + "openInterest": 803, + "changeinOpenInterest": 599, + "pchangeinOpenInterest": 293.627450980392, + "totalTradedVolume": 2761, + "impliedVolatility": 11.97, + "lastPrice": 60, + "change": 40.6, + "pChange": 209.278350515464, + "totalBuyQuantity": 34400, + "totalSellQuantity": 525, + "bidQty": 25, + "bidprice": 58, + "askQty": 25, + "askPrice": 67.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24700, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24700, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24700.00", + "openInterest": 88, + "changeinOpenInterest": 83, + "pchangeinOpenInterest": 1660, + "totalTradedVolume": 198, + "impliedVolatility": 11.68, + "lastPrice": 93.5, + "change": 40.7, + "pChange": 77.0833333333333, + "totalBuyQuantity": 19100, + "totalSellQuantity": 2350, + "bidQty": 900, + "bidprice": 66.1, + "askQty": 25, + "askPrice": 115.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24700, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24700.00", + "openInterest": 2407, + "changeinOpenInterest": 23, + "pchangeinOpenInterest": 0.964765100671141, + "totalTradedVolume": 286, + "impliedVolatility": 15.58, + "lastPrice": 794.7, + "change": -420.45, + "pChange": -34.6006665843723, + "totalBuyQuantity": 3400, + "totalSellQuantity": 3325, + "bidQty": 100, + "bidprice": 744.5, + "askQty": 25, + "askPrice": 810.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24700.00", + "openInterest": 15537, + "changeinOpenInterest": -1469, + "pchangeinOpenInterest": -8.63812771962837, + "totalTradedVolume": 34209, + "impliedVolatility": 11.8, + "lastPrice": 136, + "change": 88.15, + "pChange": 184.221525600836, + "totalBuyQuantity": 25425, + "totalSellQuantity": 1100, + "bidQty": 25, + "bidprice": 120.15, + "askQty": 75, + "askPrice": 136, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24700, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24700, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4650, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 26.7, + "askQty": 900, + "askPrice": 197.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24700, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24700.00", + "openInterest": 22, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -4.34782608695652, + "totalTradedVolume": 2, + "impliedVolatility": 14.87, + "lastPrice": 800, + "change": -356.4, + "pChange": -30.8197855413352, + "totalBuyQuantity": 900, + "totalSellQuantity": 925, + "bidQty": 900, + "bidprice": 562.9, + "askQty": 25, + "askPrice": 945.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24700.00", + "openInterest": 494, + "changeinOpenInterest": 102, + "pchangeinOpenInterest": 26.0204081632653, + "totalTradedVolume": 607, + "impliedVolatility": 10.69, + "lastPrice": 300.4, + "change": 145.65, + "pChange": 94.1195476575121, + "totalBuyQuantity": 12225, + "totalSellQuantity": 2200, + "bidQty": 25, + "bidprice": 290, + "askQty": 25, + "askPrice": 323.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24750.00", + "openInterest": 18790, + "changeinOpenInterest": 13094, + "pchangeinOpenInterest": 229.880617977528, + "totalTradedVolume": 295853, + "impliedVolatility": 13.98, + "lastPrice": 5.6, + "change": 3.25, + "pChange": 138.297872340426, + "totalBuyQuantity": 143175, + "totalSellQuantity": 19125, + "bidQty": 4925, + "bidprice": 5, + "askQty": 1450, + "askPrice": 5.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24750.00", + "openInterest": 434, + "changeinOpenInterest": 23, + "pchangeinOpenInterest": 5.59610705596107, + "totalTradedVolume": 92, + "impliedVolatility": 30.46, + "lastPrice": 907.45, + "change": -503.55, + "pChange": -35.6874557051736, + "totalBuyQuantity": 5775, + "totalSellQuantity": 6250, + "bidQty": 150, + "bidprice": 839.85, + "askQty": 150, + "askPrice": 871, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24750, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 24750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24750.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1229.3, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 2775, + "bidQty": 0, + "bidprice": 0, + "askQty": 1000, + "askPrice": 1046.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24750.00", + "openInterest": 934, + "changeinOpenInterest": 708, + "pchangeinOpenInterest": 313.274336283186, + "totalTradedVolume": 9382, + "impliedVolatility": 12.42, + "lastPrice": 24.5, + "change": 17.75, + "pChange": 262.962962962963, + "totalBuyQuantity": 50450, + "totalSellQuantity": 675, + "bidQty": 250, + "bidprice": 20, + "askQty": 50, + "askPrice": 25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24750, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 24750, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24750.00", + "openInterest": 146, + "changeinOpenInterest": 96, + "pchangeinOpenInterest": 192, + "totalTradedVolume": 210, + "impliedVolatility": 11.95, + "lastPrice": 52.1, + "change": 33.4, + "pChange": 178.609625668449, + "totalBuyQuantity": 16950, + "totalSellQuantity": 650, + "bidQty": 600, + "bidprice": 31.65, + "askQty": 125, + "askPrice": 60, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24750, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24750.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 700, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24750, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24750, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24750.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 53.7, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 17150, + "totalSellQuantity": 25, + "bidQty": 750, + "bidprice": 19, + "askQty": 25, + "askPrice": 175, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24750, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24750.00", + "openInterest": 834, + "changeinOpenInterest": 231, + "pchangeinOpenInterest": 38.3084577114428, + "totalTradedVolume": 2395, + "impliedVolatility": 11.64, + "lastPrice": 120.25, + "change": 76.75, + "pChange": 176.436781609195, + "totalBuyQuantity": 20375, + "totalSellQuantity": 2175, + "bidQty": 250, + "bidprice": 110.65, + "askQty": 250, + "askPrice": 133.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24750.00", + "openInterest": 139, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1249.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 2800, + "bidQty": 25, + "bidprice": 420, + "askQty": 25, + "askPrice": 969.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24750, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24750, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24750.00", + "openInterest": 2, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 3, + "impliedVolatility": 8.51, + "lastPrice": 80, + "change": -49.2, + "pChange": -38.0804953560372, + "totalBuyQuantity": 3375, + "totalSellQuantity": 150, + "bidQty": 150, + "bidprice": 95.2, + "askQty": 75, + "askPrice": 150, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24750, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 1775, + "bidQty": 0, + "bidprice": 0, + "askQty": 1775, + "askPrice": 1266.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24750.00", + "openInterest": 12, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 20, + "totalTradedVolume": 7, + "impliedVolatility": 10.12, + "lastPrice": 260.2, + "change": 78.9, + "pChange": 43.5190292333149, + "totalBuyQuantity": 1850, + "totalSellQuantity": 1800, + "bidQty": 25, + "bidprice": 178, + "askQty": 1800, + "askPrice": 330.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24800, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24800.00", + "openInterest": 26351, + "changeinOpenInterest": -1918, + "pchangeinOpenInterest": -6.78481729102551, + "totalTradedVolume": 2815, + "impliedVolatility": 24.06, + "lastPrice": 900, + "change": -542.05, + "pChange": -37.5888492077251, + "totalBuyQuantity": 8525, + "totalSellQuantity": 7300, + "bidQty": 250, + "bidprice": 893.2, + "askQty": 50, + "askPrice": 905.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24800.00", + "openInterest": 123505, + "changeinOpenInterest": 54075, + "pchangeinOpenInterest": 77.884199913582, + "totalTradedVolume": 915072, + "impliedVolatility": 14.15, + "lastPrice": 4.5, + "change": 2.15, + "pChange": 91.4893617021277, + "totalBuyQuantity": 1518275, + "totalSellQuantity": 58650, + "bidQty": 25, + "bidprice": 4.4, + "askQty": 400, + "askPrice": 4.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24800, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24800.00", + "openInterest": 8548, + "changeinOpenInterest": 3588, + "pchangeinOpenInterest": 72.3387096774194, + "totalTradedVolume": 49308, + "impliedVolatility": 12.5, + "lastPrice": 20.85, + "change": 14.95, + "pChange": 253.389830508475, + "totalBuyQuantity": 96325, + "totalSellQuantity": 6400, + "bidQty": 25, + "bidprice": 18, + "askQty": 1800, + "askPrice": 20, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24800.00", + "openInterest": 67, + "changeinOpenInterest": 33, + "pchangeinOpenInterest": 97.0588235294118, + "totalTradedVolume": 46, + "impliedVolatility": 19.19, + "lastPrice": 890.75, + "change": -506.25, + "pChange": -36.2383679312813, + "totalBuyQuantity": 3125, + "totalSellQuantity": 3150, + "bidQty": 100, + "bidprice": 854.7, + "askQty": 50, + "askPrice": 884.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24800, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24800, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24800, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24800.00", + "openInterest": 377, + "changeinOpenInterest": 164, + "pchangeinOpenInterest": 76.9953051643193, + "totalTradedVolume": 1182, + "impliedVolatility": 12.16, + "lastPrice": 47.9, + "change": 33.05, + "pChange": 222.558922558923, + "totalBuyQuantity": 33825, + "totalSellQuantity": 550, + "bidQty": 125, + "bidprice": 44.6, + "askQty": 25, + "askPrice": 49, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24800, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24800, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24800.00", + "openInterest": 4, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 12.28, + "lastPrice": 85, + "change": -19.5, + "pChange": -18.6602870813397, + "totalBuyQuantity": 20175, + "totalSellQuantity": 2450, + "bidQty": 50, + "bidprice": 67.15, + "askQty": 75, + "askPrice": 96.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24800, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24800.00", + "openInterest": 25040, + "changeinOpenInterest": 2336, + "pchangeinOpenInterest": 10.2889358703312, + "totalTradedVolume": 41101, + "impliedVolatility": 11.51, + "lastPrice": 106.2, + "change": 66.75, + "pChange": 169.201520912548, + "totalBuyQuantity": 33025, + "totalSellQuantity": 3550, + "bidQty": 25, + "bidprice": 106.2, + "askQty": 50, + "askPrice": 110, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24800.00", + "openInterest": 2578, + "changeinOpenInterest": 347, + "pchangeinOpenInterest": 15.5535634244733, + "totalTradedVolume": 769, + "impliedVolatility": 15.57, + "lastPrice": 864.85, + "change": -448.95, + "pChange": -34.1718678642107, + "totalBuyQuantity": 4100, + "totalSellQuantity": 4550, + "bidQty": 75, + "bidprice": 835.1, + "askQty": 25, + "askPrice": 867.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24800, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24800, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3450, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 25.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24800, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24800.00", + "openInterest": 888, + "changeinOpenInterest": 118, + "pchangeinOpenInterest": 15.3246753246753, + "totalTradedVolume": 550, + "impliedVolatility": 10.74, + "lastPrice": 267.3, + "change": 131.05, + "pChange": 96.1834862385321, + "totalBuyQuantity": 13250, + "totalSellQuantity": 2200, + "bidQty": 50, + "bidprice": 246.55, + "askQty": 25, + "askPrice": 285.2, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24800.00", + "openInterest": 13, + "changeinOpenInterest": 5, + "pchangeinOpenInterest": 62.5, + "totalTradedVolume": 5, + "impliedVolatility": 14.41, + "lastPrice": 841, + "change": 93.25, + "pChange": 12.4707455700435, + "totalBuyQuantity": 1000, + "totalSellQuantity": 475, + "bidQty": 550, + "bidprice": 647.75, + "askQty": 25, + "askPrice": 1008.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24850, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24850.00", + "openInterest": 457, + "changeinOpenInterest": -9, + "pchangeinOpenInterest": -1.931330472103, + "totalTradedVolume": 42, + "impliedVolatility": 25.02, + "lastPrice": 950, + "change": -566.75, + "pChange": -37.3660787868798, + "totalBuyQuantity": 5925, + "totalSellQuantity": 6500, + "bidQty": 75, + "bidprice": 933.85, + "askQty": 75, + "askPrice": 966.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24850.00", + "openInterest": 14907, + "changeinOpenInterest": 8697, + "pchangeinOpenInterest": 140.048309178744, + "totalTradedVolume": 210484, + "impliedVolatility": 14.45, + "lastPrice": 3.85, + "change": 1.55, + "pChange": 67.3913043478261, + "totalBuyQuantity": 108600, + "totalSellQuantity": 14875, + "bidQty": 25, + "bidprice": 3.85, + "askQty": 875, + "askPrice": 4.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24850, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24850.00", + "openInterest": 880, + "changeinOpenInterest": 633, + "pchangeinOpenInterest": 256.275303643725, + "totalTradedVolume": 2487, + "impliedVolatility": 12.3, + "lastPrice": 16.1, + "change": 10.35, + "pChange": 180, + "totalBuyQuantity": 55675, + "totalSellQuantity": 375, + "bidQty": 125, + "bidprice": 12, + "askQty": 100, + "askPrice": 19, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24850.00", + "openInterest": 3, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 50, + "totalTradedVolume": 1, + "impliedVolatility": 39.23, + "lastPrice": 1225, + "change": -56.3499999999999, + "pChange": -4.39770554493307, + "totalBuyQuantity": 225, + "totalSellQuantity": 3000, + "bidQty": 100, + "bidprice": 774.6, + "askQty": 75, + "askPrice": 1039.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24850, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 24850, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE24850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24850, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24850.00", + "openInterest": 99, + "changeinOpenInterest": 78, + "pchangeinOpenInterest": 371.428571428571, + "totalTradedVolume": 194, + "impliedVolatility": 11.78, + "lastPrice": 37.25, + "change": 18.85, + "pChange": 102.445652173913, + "totalBuyQuantity": 15900, + "totalSellQuantity": 550, + "bidQty": 600, + "bidprice": 26.25, + "askQty": 550, + "askPrice": 58.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24850, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24850, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24850.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 30.55, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 16875, + "totalSellQuantity": 50, + "bidQty": 25, + "bidprice": 30.55, + "askQty": 50, + "askPrice": 99.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24850, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 24850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24850.00", + "openInterest": 578, + "changeinOpenInterest": 304, + "pchangeinOpenInterest": 110.948905109489, + "totalTradedVolume": 1805, + "impliedVolatility": 11.6, + "lastPrice": 98, + "change": 61.35, + "pChange": 167.394270122783, + "totalBuyQuantity": 31375, + "totalSellQuantity": 2575, + "bidQty": 500, + "bidprice": 88.55, + "askQty": 900, + "askPrice": 111.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24850.00", + "openInterest": 170, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 5, + "impliedVolatility": 15.63, + "lastPrice": 902.6, + "change": -347.4, + "pChange": -27.792, + "totalBuyQuantity": 1675, + "totalSellQuantity": 3400, + "bidQty": 900, + "bidprice": 773.25, + "askQty": 25, + "askPrice": 927.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24850, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24850, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2850, + "totalSellQuantity": 150, + "bidQty": 750, + "bidprice": 16, + "askQty": 150, + "askPrice": 350, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24850, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24850.00", + "openInterest": 10, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 11.1111111111111, + "totalTradedVolume": 5, + "impliedVolatility": 10.04, + "lastPrice": 224, + "change": 63.95, + "pChange": 39.9562636676039, + "totalBuyQuantity": 11725, + "totalSellQuantity": 2700, + "bidQty": 25, + "bidprice": 160, + "askQty": 900, + "askPrice": 301.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 1775, + "bidQty": 0, + "bidprice": 0, + "askQty": 1775, + "askPrice": 1335.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24900.00", + "openInterest": 15715, + "changeinOpenInterest": -463, + "pchangeinOpenInterest": -2.861911237483, + "totalTradedVolume": 1081, + "impliedVolatility": 26.9, + "lastPrice": 1006, + "change": -548, + "pChange": -35.2638352638353, + "totalBuyQuantity": 6475, + "totalSellQuantity": 7475, + "bidQty": 25, + "bidprice": 1000, + "askQty": 75, + "askPrice": 1005.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24900.00", + "openInterest": 44048, + "changeinOpenInterest": 18435, + "pchangeinOpenInterest": 71.9751688595635, + "totalTradedVolume": 381312, + "impliedVolatility": 14.99, + "lastPrice": 3.65, + "change": 1.4, + "pChange": 62.2222222222222, + "totalBuyQuantity": 718000, + "totalSellQuantity": 42125, + "bidQty": 700, + "bidprice": 2.85, + "askQty": 1750, + "askPrice": 3.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24900, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24900.00", + "openInterest": 5156, + "changeinOpenInterest": 3868, + "pchangeinOpenInterest": 300.310559006211, + "totalTradedVolume": 29348, + "impliedVolatility": 12.14, + "lastPrice": 12.35, + "change": 7.2, + "pChange": 139.805825242718, + "totalBuyQuantity": 69875, + "totalSellQuantity": 10325, + "bidQty": 1775, + "bidprice": 12.4, + "askQty": 8800, + "askPrice": 15.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24900.00", + "openInterest": 26, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 4, + "totalTradedVolume": 1, + "impliedVolatility": 50.08, + "lastPrice": 1440.05, + "change": -39.95, + "pChange": -2.69932432432433, + "totalBuyQuantity": 400, + "totalSellQuantity": 3350, + "bidQty": 150, + "bidprice": 772.75, + "askQty": 150, + "askPrice": 986.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24900, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 24900, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24900.00", + "openInterest": 138, + "changeinOpenInterest": -55, + "pchangeinOpenInterest": -28.4974093264249, + "totalTradedVolume": 653, + "impliedVolatility": 12.01, + "lastPrice": 34.45, + "change": 21.6, + "pChange": 168.093385214008, + "totalBuyQuantity": 28800, + "totalSellQuantity": 250, + "bidQty": 600, + "bidprice": 22.55, + "askQty": 125, + "askPrice": 41.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24900, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24900, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24900.00", + "openInterest": 19, + "changeinOpenInterest": 7, + "pchangeinOpenInterest": 58.3333333333333, + "totalTradedVolume": 24, + "impliedVolatility": 10.74, + "lastPrice": 45, + "change": 22, + "pChange": 95.6521739130435, + "totalBuyQuantity": 15450, + "totalSellQuantity": 2050, + "bidQty": 900, + "bidprice": 45.05, + "askQty": 900, + "askPrice": 87.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24900, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24900.00", + "openInterest": 835, + "changeinOpenInterest": 244, + "pchangeinOpenInterest": 41.2859560067682, + "totalTradedVolume": 376, + "impliedVolatility": 16.04, + "lastPrice": 949.4, + "change": -450.75, + "pChange": -32.1929793236439, + "totalBuyQuantity": 4225, + "totalSellQuantity": 5775, + "bidQty": 100, + "bidprice": 907.15, + "askQty": 25, + "askPrice": 962.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24900.00", + "openInterest": 9383, + "changeinOpenInterest": 571, + "pchangeinOpenInterest": 6.47980027235588, + "totalTradedVolume": 20573, + "impliedVolatility": 11.65, + "lastPrice": 89.5, + "change": 56.1, + "pChange": 167.964071856287, + "totalBuyQuantity": 39900, + "totalSellQuantity": 2450, + "bidQty": 250, + "bidprice": 85.1, + "askQty": 150, + "askPrice": 98.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24900, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24900, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4350, + "totalSellQuantity": 2550, + "bidQty": 900, + "bidprice": 15.05, + "askQty": 900, + "askPrice": 394.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24900, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 24900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24900.00", + "openInterest": 17, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1191.55, + "change": 1.95000000000005, + "pChange": 0.163920645595162, + "totalBuyQuantity": 0, + "totalSellQuantity": 1800, + "bidQty": 0, + "bidprice": 0, + "askQty": 25, + "askPrice": 939.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24900.00", + "openInterest": 314, + "changeinOpenInterest": 68, + "pchangeinOpenInterest": 27.6422764227642, + "totalTradedVolume": 474, + "impliedVolatility": 10.78, + "lastPrice": 236.45, + "change": 116.85, + "pChange": 97.7006688963211, + "totalBuyQuantity": 10850, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 236.45, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24950, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24950.00", + "openInterest": 19018, + "changeinOpenInterest": 10026, + "pchangeinOpenInterest": 111.499110320285, + "totalTradedVolume": 151952, + "impliedVolatility": 15.47, + "lastPrice": 3.4, + "change": 1.2, + "pChange": 54.5454545454545, + "totalBuyQuantity": 246975, + "totalSellQuantity": 24075, + "bidQty": 1725, + "bidprice": 2.7, + "askQty": 1250, + "askPrice": 3.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24950.00", + "openInterest": 681, + "changeinOpenInterest": -39, + "pchangeinOpenInterest": -5.41666666666667, + "totalTradedVolume": 196, + "impliedVolatility": 32.8, + "lastPrice": 1091.2, + "change": -509.75, + "pChange": -31.8404697211031, + "totalBuyQuantity": 6375, + "totalSellQuantity": 5875, + "bidQty": 475, + "bidprice": 1032, + "askQty": 25, + "askPrice": 1055.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24950, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 24950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE24950.00", + "openInterest": 585, + "changeinOpenInterest": 365, + "pchangeinOpenInterest": 165.909090909091, + "totalTradedVolume": 1972, + "impliedVolatility": 12.6, + "lastPrice": 12.1, + "change": 6.1, + "pChange": 101.666666666667, + "totalBuyQuantity": 45600, + "totalSellQuantity": 225, + "bidQty": 600, + "bidprice": 8.15, + "askQty": 25, + "askPrice": 14.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE24950.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1384, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 2775, + "bidQty": 0, + "bidprice": 0, + "askQty": 1000, + "askPrice": 1252.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24950, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 24950, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE24950.00", + "openInterest": 39, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 17.2, + "change": -1.4, + "pChange": -7.52688172043012, + "totalBuyQuantity": 20475, + "totalSellQuantity": 250, + "bidQty": 100, + "bidprice": 23.05, + "askQty": 250, + "askPrice": 41.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24950, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 24950, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE24950.00", + "openInterest": 18, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 5.88235294117647, + "totalTradedVolume": 2, + "impliedVolatility": 13.19, + "lastPrice": 75, + "change": 35, + "pChange": 87.5, + "totalBuyQuantity": 18975, + "totalSellQuantity": 125, + "bidQty": 600, + "bidprice": 30.5, + "askQty": 75, + "askPrice": 75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24950, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 24950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE24950.00", + "openInterest": 228, + "changeinOpenInterest": 5, + "pchangeinOpenInterest": 2.24215246636771, + "totalTradedVolume": 7, + "impliedVolatility": 21.37, + "lastPrice": 1119.2, + "change": -194.6, + "pChange": -14.8119957375552, + "totalBuyQuantity": 3775, + "totalSellQuantity": 2800, + "bidQty": 100, + "bidprice": 870.65, + "askQty": 25, + "askPrice": 1145.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE24950.00", + "openInterest": 739, + "changeinOpenInterest": 190, + "pchangeinOpenInterest": 34.608378870674, + "totalTradedVolume": 976, + "impliedVolatility": 11.7, + "lastPrice": 81.85, + "change": 50.85, + "pChange": 164.032258064516, + "totalBuyQuantity": 32700, + "totalSellQuantity": 1400, + "bidQty": 1800, + "bidprice": 75.85, + "askQty": 900, + "askPrice": 110.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24950, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 24950, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE24950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2850, + "totalSellQuantity": 600, + "bidQty": 300, + "bidprice": 15.1, + "askQty": 150, + "askPrice": 390, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24950, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 24950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE24950.00", + "openInterest": 138, + "changeinOpenInterest": 90, + "pchangeinOpenInterest": 187.5, + "totalTradedVolume": 247, + "impliedVolatility": 10.74, + "lastPrice": 220, + "change": 108.5, + "pChange": 97.3094170403588, + "totalBuyQuantity": 11975, + "totalSellQuantity": 0, + "bidQty": 275, + "bidprice": 169.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE24950.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 15.63, + "lastPrice": 983.15, + "change": 43.15, + "pChange": 4.59042553191489, + "totalBuyQuantity": 1775, + "totalSellQuantity": 0, + "bidQty": 1775, + "bidprice": 639.4, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25000.00", + "openInterest": 294780, + "changeinOpenInterest": 54354, + "pchangeinOpenInterest": 22.6073719148511, + "totalTradedVolume": 1369004, + "impliedVolatility": 15.57, + "lastPrice": 2.7, + "change": 0.5, + "pChange": 22.7272727272727, + "totalBuyQuantity": 1897750, + "totalSellQuantity": 167550, + "bidQty": 4125, + "bidprice": 2.7, + "askQty": 400, + "askPrice": 2.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25000.00", + "openInterest": 77075, + "changeinOpenInterest": -211, + "pchangeinOpenInterest": -0.273011929715602, + "totalTradedVolume": 12103, + "impliedVolatility": 27.84, + "lastPrice": 1100, + "change": -551.6, + "pChange": -33.3979171712279, + "totalBuyQuantity": 8825, + "totalSellQuantity": 9800, + "bidQty": 100, + "bidprice": 1094.45, + "askQty": 100, + "askPrice": 1105.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25000.00", + "openInterest": 545, + "changeinOpenInterest": 431, + "pchangeinOpenInterest": 378.070175438597, + "totalTradedVolume": 554, + "impliedVolatility": 21.3, + "lastPrice": 1082, + "change": -512.1, + "pChange": -32.1247098676369, + "totalBuyQuantity": 2975, + "totalSellQuantity": 3400, + "bidQty": 100, + "bidprice": 1045.25, + "askQty": 300, + "askPrice": 1069.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25000.00", + "openInterest": 15729, + "changeinOpenInterest": 3619, + "pchangeinOpenInterest": 29.8843930635838, + "totalTradedVolume": 56865, + "impliedVolatility": 12.47, + "lastPrice": 9.35, + "change": 4.95, + "pChange": 112.5, + "totalBuyQuantity": 469300, + "totalSellQuantity": 12300, + "bidQty": 125, + "bidprice": 9.3, + "askQty": 1775, + "askPrice": 11.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25000, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25000.00", + "openInterest": 2016, + "changeinOpenInterest": 235, + "pchangeinOpenInterest": 13.1948343627176, + "totalTradedVolume": 9932, + "impliedVolatility": 12.41, + "lastPrice": 29, + "change": 17.45, + "pChange": 151.082251082251, + "totalBuyQuantity": 37275, + "totalSellQuantity": 3150, + "bidQty": 250, + "bidprice": 27.2, + "askQty": 25, + "askPrice": 29.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 25000, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE25000.00", + "openInterest": 641, + "changeinOpenInterest": 282, + "pchangeinOpenInterest": 78.5515320334262, + "totalTradedVolume": 1285, + "impliedVolatility": 12.14, + "lastPrice": 52, + "change": 31.65, + "pChange": 155.528255528256, + "totalBuyQuantity": 35525, + "totalSellQuantity": 2625, + "bidQty": 250, + "bidprice": 50, + "askQty": 25, + "askPrice": 56, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25000.00", + "openInterest": 67138, + "changeinOpenInterest": 4082, + "pchangeinOpenInterest": 6.47361075869069, + "totalTradedVolume": 18759, + "impliedVolatility": 16.36, + "lastPrice": 1031.95, + "change": -468.65, + "pChange": -31.2308409969346, + "totalBuyQuantity": 7600, + "totalSellQuantity": 11525, + "bidQty": 125, + "bidprice": 1009.1, + "askQty": 950, + "askPrice": 1025.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25000.00", + "openInterest": 132392, + "changeinOpenInterest": 411, + "pchangeinOpenInterest": 0.311408460308681, + "totalTradedVolume": 212485, + "impliedVolatility": 11.77, + "lastPrice": 75, + "change": 46, + "pChange": 158.620689655172, + "totalBuyQuantity": 161650, + "totalSellQuantity": 34325, + "bidQty": 75, + "bidprice": 75, + "askQty": 200, + "askPrice": 77, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 25000, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE25000.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 10.54, + "lastPrice": 79, + "change": -12.55, + "pChange": -13.7083560895685, + "totalBuyQuantity": 8175, + "totalSellQuantity": 2850, + "bidQty": 900, + "bidprice": 22.35, + "askQty": 75, + "askPrice": 128.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25000.00", + "openInterest": 2708, + "changeinOpenInterest": -103, + "pchangeinOpenInterest": -3.66417644966204, + "totalTradedVolume": 1229, + "impliedVolatility": 14.77, + "lastPrice": 982.1, + "change": -417.75, + "pChange": -29.8424831231918, + "totalBuyQuantity": 5550, + "totalSellQuantity": 4450, + "bidQty": 50, + "bidprice": 965.05, + "askQty": 125, + "askPrice": 991.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25000.00", + "openInterest": 20787, + "changeinOpenInterest": 11, + "pchangeinOpenInterest": 0.0529457065845206, + "totalTradedVolume": 28053, + "impliedVolatility": 10.73, + "lastPrice": 205.65, + "change": 101.95, + "pChange": 98.3124397299904, + "totalBuyQuantity": 21800, + "totalSellQuantity": 9775, + "bidQty": 1800, + "bidprice": 205.65, + "askQty": 925, + "askPrice": 214.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "27-Mar-2025", + "CE": { + "strikePrice": 25000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE25000.00", + "openInterest": 26224, + "changeinOpenInterest": 3270, + "pchangeinOpenInterest": 14.2458830704888, + "totalTradedVolume": 13986, + "impliedVolatility": 9.99, + "lastPrice": 444, + "change": 160.85, + "pChange": 56.8073459297193, + "totalBuyQuantity": 32900, + "totalSellQuantity": 5250, + "bidQty": 25, + "bidprice": 430.8, + "askQty": 300, + "askPrice": 444, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE25000.00", + "openInterest": 22579, + "changeinOpenInterest": 394, + "pchangeinOpenInterest": 1.77597475771918, + "totalTradedVolume": 3627, + "impliedVolatility": 15.25, + "lastPrice": 987, + "change": -315.9, + "pChange": -24.2459129633894, + "totalBuyQuantity": 2725, + "totalSellQuantity": 3600, + "bidQty": 25, + "bidprice": 987, + "askQty": 25, + "askPrice": 995, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 25000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE25000.00", + "openInterest": 3667, + "changeinOpenInterest": 215, + "pchangeinOpenInterest": 6.22827346465817, + "totalTradedVolume": 925, + "impliedVolatility": 16.54, + "lastPrice": 1040, + "change": -229.55, + "pChange": -18.0812098775157, + "totalBuyQuantity": 3400, + "totalSellQuantity": 2000, + "bidQty": 275, + "bidprice": 1000, + "askQty": 425, + "askPrice": 1020, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE25000.00", + "openInterest": 4101, + "changeinOpenInterest": 458, + "pchangeinOpenInterest": 12.572055997804, + "totalTradedVolume": 1378, + "impliedVolatility": 8.06, + "lastPrice": 775, + "change": 178.3, + "pChange": 29.8810122339534, + "totalBuyQuantity": 16225, + "totalSellQuantity": 3900, + "bidQty": 750, + "bidprice": 775.5, + "askQty": 100, + "askPrice": 805.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "25-Sep-2025", + "CE": { + "strikePrice": 25000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025CE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 650.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "24-Dec-2025", + "CE": { + "strikePrice": 25000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE25000.00", + "openInterest": 3519, + "changeinOpenInterest": 75, + "pchangeinOpenInterest": 2.17770034843206, + "totalTradedVolume": 533, + "impliedVolatility": 5.8, + "lastPrice": 1587.95, + "change": 247.75, + "pChange": 18.4860468586778, + "totalBuyQuantity": 3050, + "totalSellQuantity": 3500, + "bidQty": 25, + "bidprice": 1590.75, + "askQty": 25, + "askPrice": 1615, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE25000.00", + "openInterest": 9045, + "changeinOpenInterest": 205, + "pchangeinOpenInterest": 2.31900452488688, + "totalTradedVolume": 1090, + "impliedVolatility": 18.39, + "lastPrice": 1125, + "change": -185.95, + "pChange": -14.1843701132766, + "totalBuyQuantity": 5600, + "totalSellQuantity": 7450, + "bidQty": 25, + "bidprice": 1125, + "askQty": 50, + "askPrice": 1132, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "25-Jun-2026", + "CE": { + "strikePrice": 25000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 100, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 1500, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5700, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 4.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "31-Dec-2026", + "CE": { + "strikePrice": 25000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 1850, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6975, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 560.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 25000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5650, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 1172.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 25000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5650, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 1077.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 25000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 989.4, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 25000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE25000.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1311, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 908.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 25000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE25000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 275, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 832.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25050, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25050.00", + "openInterest": 9312, + "changeinOpenInterest": 6904, + "pchangeinOpenInterest": 286.71096345515, + "totalTradedVolume": 87341, + "impliedVolatility": 15.79, + "lastPrice": 2.25, + "change": 0.15, + "pChange": 7.14285714285714, + "totalBuyQuantity": 97400, + "totalSellQuantity": 15800, + "bidQty": 625, + "bidprice": 2.15, + "askQty": 1000, + "askPrice": 2.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25050.00", + "openInterest": 363, + "changeinOpenInterest": -4, + "pchangeinOpenInterest": -1.08991825613079, + "totalTradedVolume": 31, + "impliedVolatility": 28.32, + "lastPrice": 1147.4, + "change": -547.15, + "pChange": -32.2888082381753, + "totalBuyQuantity": 6250, + "totalSellQuantity": 6150, + "bidQty": 225, + "bidprice": 1138.1, + "askQty": 75, + "askPrice": 1155.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25050, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25050.00", + "openInterest": 2, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 100, + "totalTradedVolume": 1, + "impliedVolatility": 41.95, + "lastPrice": 1410.1, + "change": 29.3499999999999, + "pChange": 2.12565634618866, + "totalBuyQuantity": 2850, + "totalSellQuantity": 2825, + "bidQty": 50, + "bidprice": 951.2, + "askQty": 50, + "askPrice": 1239.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25050.00", + "openInterest": 761, + "changeinOpenInterest": 462, + "pchangeinOpenInterest": 154.515050167224, + "totalTradedVolume": 1751, + "impliedVolatility": 13.04, + "lastPrice": 9.65, + "change": 5.1, + "pChange": 112.087912087912, + "totalBuyQuantity": 53100, + "totalSellQuantity": 25, + "bidQty": 900, + "bidprice": 7.1, + "askQty": 25, + "askPrice": 12, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25050, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25050, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25050.00", + "openInterest": 93, + "changeinOpenInterest": 51, + "pchangeinOpenInterest": 121.428571428571, + "totalTradedVolume": 318, + "impliedVolatility": 12.25, + "lastPrice": 23.65, + "change": 13.65, + "pChange": 136.5, + "totalBuyQuantity": 31325, + "totalSellQuantity": 475, + "bidQty": 600, + "bidprice": 16.15, + "askQty": 475, + "askPrice": 31.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25050, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 25050, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE25050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 15050, + "totalSellQuantity": 1500, + "bidQty": 750, + "bidprice": 17, + "askQty": 200, + "askPrice": 135, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25050, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 25050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25050.00", + "openInterest": 1311, + "changeinOpenInterest": 193, + "pchangeinOpenInterest": 17.262969588551, + "totalTradedVolume": 1194, + "impliedVolatility": 11.98, + "lastPrice": 71.1, + "change": 44.65, + "pChange": 168.809073724008, + "totalBuyQuantity": 39600, + "totalSellQuantity": 7275, + "bidQty": 25, + "bidprice": 57.1, + "askQty": 1800, + "askPrice": 76.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25050.00", + "openInterest": 109, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 4, + "impliedVolatility": 16.19, + "lastPrice": 1066.65, + "change": -526.4, + "pChange": -33.0435328457989, + "totalBuyQuantity": 3900, + "totalSellQuantity": 3800, + "bidQty": 25, + "bidprice": 1022.75, + "askQty": 25, + "askPrice": 1100.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25050, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 25050, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE25050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4500, + "totalSellQuantity": 975, + "bidQty": 300, + "bidprice": 15.1, + "askQty": 150, + "askPrice": 340, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25050, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2200, + "totalSellQuantity": 0, + "bidQty": 1775, + "bidprice": 731.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25050.00", + "openInterest": 130, + "changeinOpenInterest": 16, + "pchangeinOpenInterest": 14.0350877192982, + "totalTradedVolume": 333, + "impliedVolatility": 10.73, + "lastPrice": 192, + "change": 91, + "pChange": 90.0990099009901, + "totalBuyQuantity": 14025, + "totalSellQuantity": 2700, + "bidQty": 25, + "bidprice": 128.9, + "askQty": 2700, + "askPrice": 213.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25100, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25100.00", + "openInterest": 41636, + "changeinOpenInterest": 10248, + "pchangeinOpenInterest": 32.6494201605709, + "totalTradedVolume": 211497, + "impliedVolatility": 16.19, + "lastPrice": 2.05, + "change": -0.1, + "pChange": -4.65116279069768, + "totalBuyQuantity": 698000, + "totalSellQuantity": 19025, + "bidQty": 20125, + "bidprice": 2, + "askQty": 725, + "askPrice": 2.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25100.00", + "openInterest": 6154, + "changeinOpenInterest": -93, + "pchangeinOpenInterest": -1.48871458299984, + "totalTradedVolume": 728, + "impliedVolatility": 33.76, + "lastPrice": 1226.1, + "change": -522.6, + "pChange": -29.8850574712644, + "totalBuyQuantity": 5750, + "totalSellQuantity": 6200, + "bidQty": 100, + "bidprice": 1192.95, + "askQty": 150, + "askPrice": 1205.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25100, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 25100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25100.00", + "openInterest": 2038, + "changeinOpenInterest": 397, + "pchangeinOpenInterest": 24.1925655088361, + "totalTradedVolume": 7555, + "impliedVolatility": 13.16, + "lastPrice": 8.3, + "change": 4.2, + "pChange": 102.439024390244, + "totalBuyQuantity": 85850, + "totalSellQuantity": 75, + "bidQty": 25, + "bidprice": 8.1, + "askQty": 50, + "askPrice": 11, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25100.00", + "openInterest": 6, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 20, + "totalTradedVolume": 4, + "impliedVolatility": 24.26, + "lastPrice": 1199.35, + "change": -490.65, + "pChange": -29.0325443786982, + "totalBuyQuantity": 3275, + "totalSellQuantity": 3150, + "bidQty": 150, + "bidprice": 1002.15, + "askQty": 200, + "askPrice": 1182.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25100, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25100, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25100.00", + "openInterest": 257, + "changeinOpenInterest": 70, + "pchangeinOpenInterest": 37.4331550802139, + "totalTradedVolume": 442, + "impliedVolatility": 12.49, + "lastPrice": 22, + "change": 12, + "pChange": 120, + "totalBuyQuantity": 30150, + "totalSellQuantity": 50, + "bidQty": 600, + "bidprice": 17.15, + "askQty": 25, + "askPrice": 27, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25100, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 25100, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE25100.00", + "openInterest": 7, + "changeinOpenInterest": 5, + "pchangeinOpenInterest": 250, + "totalTradedVolume": 43, + "impliedVolatility": 11, + "lastPrice": 28, + "change": -2, + "pChange": -6.66666666666667, + "totalBuyQuantity": 16200, + "totalSellQuantity": 1200, + "bidQty": 500, + "bidprice": 28, + "askQty": 200, + "askPrice": 100, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25100, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25100.00", + "openInterest": 653, + "changeinOpenInterest": 212, + "pchangeinOpenInterest": 48.0725623582766, + "totalTradedVolume": 556, + "impliedVolatility": 16.82, + "lastPrice": 1119.35, + "change": -167.6, + "pChange": -13.0230389681029, + "totalBuyQuantity": 4400, + "totalSellQuantity": 3325, + "bidQty": 75, + "bidprice": 1075.25, + "askQty": 25, + "askPrice": 1151.05, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25100.00", + "openInterest": 7317, + "changeinOpenInterest": 1223, + "pchangeinOpenInterest": 20.0689202494257, + "totalTradedVolume": 20835, + "impliedVolatility": 11.74, + "lastPrice": 60.05, + "change": 35.8, + "pChange": 147.628865979381, + "totalBuyQuantity": 38600, + "totalSellQuantity": 425, + "bidQty": 25, + "bidprice": 50.9, + "askQty": 250, + "askPrice": 90.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25100, + "expiryDate": "02-Jan-2025", + "CE": { + "strikePrice": 25100, + "expiryDate": "02-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY02-01-2025CE25100.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 11.38, + "lastPrice": 80, + "change": 0.700000000000003, + "pChange": 0.882723833543509, + "totalBuyQuantity": 6975, + "totalSellQuantity": 1125, + "bidQty": 900, + "bidprice": 11.05, + "askQty": 75, + "askPrice": 169.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25100, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25100.00", + "openInterest": 272, + "changeinOpenInterest": 66, + "pchangeinOpenInterest": 32.0388349514563, + "totalTradedVolume": 410, + "impliedVolatility": 10.75, + "lastPrice": 180, + "change": 92.35, + "pChange": 105.362236166572, + "totalBuyQuantity": 5450, + "totalSellQuantity": 75, + "bidQty": 25, + "bidprice": 102.4, + "askQty": 25, + "askPrice": 207.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25100.00", + "openInterest": 94, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 1.0752688172043, + "totalTradedVolume": 1, + "impliedVolatility": 19.95, + "lastPrice": 1250, + "change": -205.05, + "pChange": -14.0922992337033, + "totalBuyQuantity": 900, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 659.8, + "askQty": 25, + "askPrice": 1455.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25150, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25150.00", + "openInterest": 8440, + "changeinOpenInterest": 4800, + "pchangeinOpenInterest": 131.868131868132, + "totalTradedVolume": 59457, + "impliedVolatility": 16.67, + "lastPrice": 1.95, + "change": -0.0999999999999999, + "pChange": -4.8780487804878, + "totalBuyQuantity": 115250, + "totalSellQuantity": 11625, + "bidQty": 25, + "bidprice": 1.8, + "askQty": 225, + "askPrice": 1.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25150.00", + "openInterest": 275, + "changeinOpenInterest": -23, + "pchangeinOpenInterest": -7.71812080536913, + "totalTradedVolume": 42, + "impliedVolatility": 42, + "lastPrice": 1331.35, + "change": -472, + "pChange": -26.1735104111792, + "totalBuyQuantity": 5925, + "totalSellQuantity": 5225, + "bidQty": 100, + "bidprice": 1231.6, + "askQty": 100, + "askPrice": 1254.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25150, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25150.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1583.3, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 2775, + "bidprice": 1029.15, + "askQty": 1000, + "askPrice": 1459.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25150.00", + "openInterest": 348, + "changeinOpenInterest": 171, + "pchangeinOpenInterest": 96.6101694915254, + "totalTradedVolume": 584, + "impliedVolatility": 13.02, + "lastPrice": 6.35, + "change": 2.7, + "pChange": 73.972602739726, + "totalBuyQuantity": 62275, + "totalSellQuantity": 4300, + "bidQty": 900, + "bidprice": 5.15, + "askQty": 3550, + "askPrice": 8.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25150, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25150, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25150.00", + "openInterest": 10, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 11.1111111111111, + "totalTradedVolume": 2, + "impliedVolatility": 10.99, + "lastPrice": 10, + "change": 0.5, + "pChange": 5.26315789473684, + "totalBuyQuantity": 32575, + "totalSellQuantity": 1125, + "bidQty": 600, + "bidprice": 13.1, + "askQty": 50, + "askPrice": 29.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25150, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 25150, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE25150.00", + "openInterest": 4, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -20, + "totalTradedVolume": 1, + "impliedVolatility": 12.74, + "lastPrice": 42.9, + "change": 24.9, + "pChange": 138.333333333333, + "totalBuyQuantity": 13400, + "totalSellQuantity": 525, + "bidQty": 100, + "bidprice": 13.55, + "askQty": 25, + "askPrice": 40, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25150, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25150.00", + "openInterest": 182, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -1.08695652173913, + "totalTradedVolume": 2, + "impliedVolatility": 30.54, + "lastPrice": 1500, + "change": -23.3, + "pChange": -1.52957395128996, + "totalBuyQuantity": 3725, + "totalSellQuantity": 2775, + "bidQty": 50, + "bidprice": 1100, + "askQty": 1000, + "askPrice": 1421.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25150.00", + "openInterest": 643, + "changeinOpenInterest": -205, + "pchangeinOpenInterest": -24.1745283018868, + "totalTradedVolume": 411, + "impliedVolatility": 11.91, + "lastPrice": 56.45, + "change": 33.45, + "pChange": 145.434782608696, + "totalBuyQuantity": 34150, + "totalSellQuantity": 875, + "bidQty": 125, + "bidprice": 56.45, + "askQty": 25, + "askPrice": 70, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25150, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 703.8, + "askQty": 1775, + "askPrice": 1566.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25150.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 77.8, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6125, + "totalSellQuantity": 225, + "bidQty": 550, + "bidprice": 127.85, + "askQty": 150, + "askPrice": 207.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25200.00", + "openInterest": 27691, + "changeinOpenInterest": -159, + "pchangeinOpenInterest": -0.570915619389587, + "totalTradedVolume": 3158, + "impliedVolatility": 34.26, + "lastPrice": 1316.7, + "change": -544.25, + "pChange": -29.245815309385, + "totalBuyQuantity": 6100, + "totalSellQuantity": 7150, + "bidQty": 150, + "bidprice": 1293.3, + "askQty": 375, + "askPrice": 1305.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25200.00", + "openInterest": 41646, + "changeinOpenInterest": 8058, + "pchangeinOpenInterest": 23.9907109682029, + "totalTradedVolume": 167350, + "impliedVolatility": 16.89, + "lastPrice": 1.65, + "change": -0.35, + "pChange": -17.5, + "totalBuyQuantity": 382925, + "totalSellQuantity": 21500, + "bidQty": 650, + "bidprice": 1.65, + "askQty": 800, + "askPrice": 2.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25200, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25200.00", + "openInterest": 38, + "changeinOpenInterest": 26, + "pchangeinOpenInterest": 216.666666666667, + "totalTradedVolume": 37, + "impliedVolatility": 18.12, + "lastPrice": 1231.5, + "change": 343.5, + "pChange": 38.6824324324324, + "totalBuyQuantity": 2925, + "totalSellQuantity": 3100, + "bidQty": 50, + "bidprice": 1239.05, + "askQty": 300, + "askPrice": 1381.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25200.00", + "openInterest": 2910, + "changeinOpenInterest": 1618, + "pchangeinOpenInterest": 125.232198142415, + "totalTradedVolume": 7292, + "impliedVolatility": 13.03, + "lastPrice": 5.15, + "change": 1.55, + "pChange": 43.0555555555556, + "totalBuyQuantity": 81775, + "totalSellQuantity": 825, + "bidQty": 1025, + "bidprice": 5, + "askQty": 25, + "askPrice": 7.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25200, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25200, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25200.00", + "openInterest": 399, + "changeinOpenInterest": 234, + "pchangeinOpenInterest": 141.818181818182, + "totalTradedVolume": 591, + "impliedVolatility": 12.47, + "lastPrice": 16, + "change": 6.65, + "pChange": 71.1229946524064, + "totalBuyQuantity": 57675, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 16, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25200, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 25200, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE25200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 12250, + "totalSellQuantity": 1300, + "bidQty": 200, + "bidprice": 19, + "askQty": 250, + "askPrice": 70, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25200, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25200.00", + "openInterest": 639, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -0.31201248049922, + "totalTradedVolume": 306, + "impliedVolatility": 17.55, + "lastPrice": 1213.8, + "change": -473.15, + "pChange": -28.0476599780669, + "totalBuyQuantity": 5075, + "totalSellQuantity": 5300, + "bidQty": 125, + "bidprice": 1177.65, + "askQty": 125, + "askPrice": 1215.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25200.00", + "openInterest": 21117, + "changeinOpenInterest": 9639, + "pchangeinOpenInterest": 83.9780449555672, + "totalTradedVolume": 35093, + "impliedVolatility": 12.14, + "lastPrice": 54, + "change": 32.35, + "pChange": 149.422632794457, + "totalBuyQuantity": 48950, + "totalSellQuantity": 6900, + "bidQty": 150, + "bidprice": 51, + "askQty": 50, + "askPrice": 53.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25200, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25200.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1438.25, + "change": 14.8499999999999, + "pChange": 1.04327666151468, + "totalBuyQuantity": 1050, + "totalSellQuantity": 2850, + "bidQty": 150, + "bidprice": 919.45, + "askQty": 175, + "askPrice": 1445.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25200.00", + "openInterest": 383, + "changeinOpenInterest": 6, + "pchangeinOpenInterest": 1.59151193633952, + "totalTradedVolume": 647, + "impliedVolatility": 10.74, + "lastPrice": 156, + "change": 83, + "pChange": 113.698630136986, + "totalBuyQuantity": 9650, + "totalSellQuantity": 175, + "bidQty": 25, + "bidprice": 151, + "askQty": 25, + "askPrice": 168, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25250, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25250.00", + "openInterest": 13196, + "changeinOpenInterest": 8049, + "pchangeinOpenInterest": 156.382358655528, + "totalTradedVolume": 53727, + "impliedVolatility": 17.53, + "lastPrice": 1.7, + "change": -0.25, + "pChange": -12.8205128205128, + "totalBuyQuantity": 116375, + "totalSellQuantity": 15325, + "bidQty": 4000, + "bidprice": 1.7, + "askQty": 1250, + "askPrice": 1.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25250.00", + "openInterest": 342, + "changeinOpenInterest": -14, + "pchangeinOpenInterest": -3.93258426966292, + "totalTradedVolume": 61, + "impliedVolatility": 40.49, + "lastPrice": 1403.3, + "change": -494.05, + "pChange": -26.0389490605318, + "totalBuyQuantity": 5750, + "totalSellQuantity": 5725, + "bidQty": 100, + "bidprice": 1331.2, + "askQty": 350, + "askPrice": 1376.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25250, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1102.2, + "askQty": 1775, + "askPrice": 1507.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 59950, + "totalSellQuantity": 1400, + "bidQty": 800, + "bidprice": 4.2, + "askQty": 200, + "askPrice": 8.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25250, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25250, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25250.00", + "openInterest": 52, + "changeinOpenInterest": -69, + "pchangeinOpenInterest": -57.0247933884298, + "totalTradedVolume": 124, + "impliedVolatility": 13.85, + "lastPrice": 22.4, + "change": 13.95, + "pChange": 165.08875739645, + "totalBuyQuantity": 35075, + "totalSellQuantity": 200, + "bidQty": 600, + "bidprice": 12, + "askQty": 200, + "askPrice": 22.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25250, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 25250, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE25250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13900, + "totalSellQuantity": 1500, + "bidQty": 750, + "bidprice": 13, + "askQty": 500, + "askPrice": 86, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25250, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25250.00", + "openInterest": 325, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 11, + "impliedVolatility": 28.62, + "lastPrice": 1518.55, + "change": -48.45, + "pChange": -3.09189534141672, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1000, + "bidQty": 1775, + "bidprice": 1128.25, + "askQty": 1000, + "askPrice": 1560.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25250.00", + "openInterest": 472, + "changeinOpenInterest": -98, + "pchangeinOpenInterest": -17.1929824561404, + "totalTradedVolume": 1159, + "impliedVolatility": 12.07, + "lastPrice": 47.45, + "change": 28.05, + "pChange": 144.587628865979, + "totalBuyQuantity": 33075, + "totalSellQuantity": 1000, + "bidQty": 25, + "bidprice": 39.7, + "askQty": 950, + "askPrice": 54.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25250, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25250.00", + "openInterest": 179, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 63.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 7600, + "totalSellQuantity": 525, + "bidQty": 100, + "bidprice": 101.65, + "askQty": 525, + "askPrice": 171.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25250.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1264.3, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 795, + "askQty": 1775, + "askPrice": 1650.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25300.00", + "openInterest": 34900, + "changeinOpenInterest": 10778, + "pchangeinOpenInterest": 44.6812038802753, + "totalTradedVolume": 144377, + "impliedVolatility": 18.03, + "lastPrice": 1.65, + "change": -0.25, + "pChange": -13.1578947368421, + "totalBuyQuantity": 388500, + "totalSellQuantity": 33575, + "bidQty": 1725, + "bidprice": 1.5, + "askQty": 1775, + "askPrice": 1.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25300.00", + "openInterest": 3036, + "changeinOpenInterest": -284, + "pchangeinOpenInterest": -8.55421686746988, + "totalTradedVolume": 590, + "impliedVolatility": 36.64, + "lastPrice": 1420, + "change": -525.35, + "pChange": -27.0054231886293, + "totalBuyQuantity": 4150, + "totalSellQuantity": 6125, + "bidQty": 50, + "bidprice": 1391.3, + "askQty": 75, + "askPrice": 1404.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25300, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25300, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25300.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1136.45, + "askQty": 1775, + "askPrice": 1566, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25300, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25300.00", + "openInterest": 1806, + "changeinOpenInterest": 1247, + "pchangeinOpenInterest": 223.076923076923, + "totalTradedVolume": 5027, + "impliedVolatility": 14.03, + "lastPrice": 5.45, + "change": 1.75, + "pChange": 47.2972972972973, + "totalBuyQuantity": 80025, + "totalSellQuantity": 2250, + "bidQty": 250, + "bidprice": 4.95, + "askQty": 600, + "askPrice": 14.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25300, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25300, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25300.00", + "openInterest": 1115, + "changeinOpenInterest": 888, + "pchangeinOpenInterest": 391.189427312775, + "totalTradedVolume": 1831, + "impliedVolatility": 12.85, + "lastPrice": 13.5, + "change": 5.7, + "pChange": 73.0769230769231, + "totalBuyQuantity": 52350, + "totalSellQuantity": 2300, + "bidQty": 900, + "bidprice": 10.1, + "askQty": 1225, + "askPrice": 14, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25300, + "expiryDate": "19-Dec-2024", + "CE": { + "strikePrice": 25300, + "expiryDate": "19-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY19-12-2024CE25300.00", + "openInterest": 145, + "changeinOpenInterest": 114, + "pchangeinOpenInterest": 367.741935483871, + "totalTradedVolume": 769, + "impliedVolatility": 12.69, + "lastPrice": 29.3, + "change": 13.6, + "pChange": 86.6242038216561, + "totalBuyQuantity": 24500, + "totalSellQuantity": 2450, + "bidQty": 25, + "bidprice": 23.15, + "askQty": 725, + "askPrice": 39, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25300, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 25300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25300.00", + "openInterest": 4756, + "changeinOpenInterest": 1156, + "pchangeinOpenInterest": 32.1111111111111, + "totalTradedVolume": 12956, + "impliedVolatility": 12.3, + "lastPrice": 45.5, + "change": 27, + "pChange": 145.945945945946, + "totalBuyQuantity": 43550, + "totalSellQuantity": 825, + "bidQty": 1300, + "bidprice": 41.2, + "askQty": 75, + "askPrice": 47, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25300.00", + "openInterest": 223, + "changeinOpenInterest": 16, + "pchangeinOpenInterest": 7.72946859903382, + "totalTradedVolume": 22, + "impliedVolatility": 18.81, + "lastPrice": 1320, + "change": -94, + "pChange": -6.64780763790665, + "totalBuyQuantity": 4750, + "totalSellQuantity": 4950, + "bidQty": 100, + "bidprice": 1251, + "askQty": 25, + "askPrice": 1318.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25300, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25300, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25300.00", + "openInterest": 483, + "changeinOpenInterest": 9, + "pchangeinOpenInterest": 1.89873417721519, + "totalTradedVolume": 1090, + "impliedVolatility": 10.76, + "lastPrice": 135.6, + "change": 65.8, + "pChange": 94.269340974212, + "totalBuyQuantity": 7350, + "totalSellQuantity": 125, + "bidQty": 25, + "bidprice": 135.7, + "askQty": 25, + "askPrice": 144.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25300, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25300.00", + "openInterest": 8, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1027.4, + "change": -0.949999999999818, + "pChange": -0.0923809986871997, + "totalBuyQuantity": 900, + "totalSellQuantity": 2100, + "bidQty": 900, + "bidprice": 957.35, + "askQty": 1775, + "askPrice": 1683.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25350.00", + "openInterest": 294, + "changeinOpenInterest": -9, + "pchangeinOpenInterest": -2.97029702970297, + "totalTradedVolume": 72, + "impliedVolatility": 38.75, + "lastPrice": 1477.55, + "change": -519.45, + "pChange": -26.0115172759139, + "totalBuyQuantity": 5775, + "totalSellQuantity": 5750, + "bidQty": 75, + "bidprice": 1431.25, + "askQty": 75, + "askPrice": 1484.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25350.00", + "openInterest": 3552, + "changeinOpenInterest": 1718, + "pchangeinOpenInterest": 93.6750272628135, + "totalTradedVolume": 31923, + "impliedVolatility": 18.38, + "lastPrice": 1.5, + "change": -0.35, + "pChange": -18.9189189189189, + "totalBuyQuantity": 115825, + "totalSellQuantity": 15100, + "bidQty": 250, + "bidprice": 1.45, + "askQty": 500, + "askPrice": 1.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25350, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 25350, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25350.00", + "openInterest": 477, + "changeinOpenInterest": 412, + "pchangeinOpenInterest": 633.846153846154, + "totalTradedVolume": 826, + "impliedVolatility": 14.25, + "lastPrice": 4.95, + "change": -0.5, + "pChange": -9.1743119266055, + "totalBuyQuantity": 47775, + "totalSellQuantity": 3475, + "bidQty": 25, + "bidprice": 4, + "askQty": 500, + "askPrice": 6.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25350, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1000, + "totalSellQuantity": 2775, + "bidQty": 1000, + "bidprice": 1149.35, + "askQty": 1000, + "askPrice": 1730.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25350, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25350, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 7.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 35000, + "totalSellQuantity": 3400, + "bidQty": 750, + "bidprice": 8.5, + "askQty": 900, + "askPrice": 15.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25350, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25350.00", + "openInterest": 110, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1812.35, + "change": 33.5999999999999, + "pChange": 1.88896697118763, + "totalBuyQuantity": 3475, + "totalSellQuantity": 3700, + "bidQty": 1775, + "bidprice": 1165.25, + "askQty": 25, + "askPrice": 1355.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25350.00", + "openInterest": 1027, + "changeinOpenInterest": 92, + "pchangeinOpenInterest": 9.83957219251337, + "totalTradedVolume": 993, + "impliedVolatility": 12.06, + "lastPrice": 37.75, + "change": 21.05, + "pChange": 126.047904191617, + "totalBuyQuantity": 35425, + "totalSellQuantity": 675, + "bidQty": 25, + "bidprice": 36, + "askQty": 25, + "askPrice": 44.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25350, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25350, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25350.00", + "openInterest": 36, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 65.2, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 7625, + "totalSellQuantity": 250, + "bidQty": 25, + "bidprice": 74.5, + "askQty": 125, + "askPrice": 152.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25350, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 881.5, + "askQty": 1775, + "askPrice": 1737.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25400, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25400.00", + "openInterest": 3089, + "changeinOpenInterest": -120, + "pchangeinOpenInterest": -3.73948270489249, + "totalTradedVolume": 344, + "impliedVolatility": 36.11, + "lastPrice": 1506, + "change": -530.95, + "pChange": -26.0659319079997, + "totalBuyQuantity": 6225, + "totalSellQuantity": 6525, + "bidQty": 75, + "bidprice": 1474.45, + "askQty": 25, + "askPrice": 1505.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25400.00", + "openInterest": 16361, + "changeinOpenInterest": 8545, + "pchangeinOpenInterest": 109.327021494371, + "totalTradedVolume": 70710, + "impliedVolatility": 18.7, + "lastPrice": 1.35, + "change": -0.5, + "pChange": -27.027027027027, + "totalBuyQuantity": 484000, + "totalSellQuantity": 27200, + "bidQty": 1250, + "bidprice": 1.3, + "askQty": 6100, + "askPrice": 1.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25400, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25400, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25400.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 40.02, + "lastPrice": 1644, + "change": 616.15, + "pChange": 59.9455173420246, + "totalBuyQuantity": 2825, + "totalSellQuantity": 2975, + "bidQty": 50, + "bidprice": 1425.95, + "askQty": 50, + "askPrice": 1473.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25400, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25400.00", + "openInterest": 530, + "changeinOpenInterest": 309, + "pchangeinOpenInterest": 139.819004524887, + "totalTradedVolume": 1673, + "impliedVolatility": 15.32, + "lastPrice": 6.5, + "change": 3, + "pChange": 85.7142857142857, + "totalBuyQuantity": 78200, + "totalSellQuantity": 10275, + "bidQty": 1350, + "bidprice": 3.65, + "askQty": 3600, + "askPrice": 6.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25400, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25400, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25400.00", + "openInterest": 772, + "changeinOpenInterest": -200, + "pchangeinOpenInterest": -20.5761316872428, + "totalTradedVolume": 1971, + "impliedVolatility": 12.77, + "lastPrice": 9.4, + "change": 1.25, + "pChange": 15.3374233128834, + "totalBuyQuantity": 61100, + "totalSellQuantity": 500, + "bidQty": 600, + "bidprice": 8.15, + "askQty": 500, + "askPrice": 18, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25400, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25400.00", + "openInterest": 338, + "changeinOpenInterest": 12, + "pchangeinOpenInterest": 3.68098159509202, + "totalTradedVolume": 38, + "impliedVolatility": 17.86, + "lastPrice": 1381.85, + "change": -495.15, + "pChange": -26.3798614810869, + "totalBuyQuantity": 4650, + "totalSellQuantity": 4100, + "bidQty": 75, + "bidprice": 1349.15, + "askQty": 25, + "askPrice": 1408.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25400.00", + "openInterest": 3869, + "changeinOpenInterest": -3997, + "pchangeinOpenInterest": -50.8136282735825, + "totalTradedVolume": 20283, + "impliedVolatility": 12.43, + "lastPrice": 37.95, + "change": 22.45, + "pChange": 144.838709677419, + "totalBuyQuantity": 45475, + "totalSellQuantity": 1100, + "bidQty": 50, + "bidprice": 30.45, + "askQty": 100, + "askPrice": 38.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25400, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25400, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25400.00", + "openInterest": 20, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 978.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 923.75, + "askQty": 1775, + "askPrice": 1772.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25400, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25400.00", + "openInterest": 123, + "changeinOpenInterest": -15, + "pchangeinOpenInterest": -10.8695652173913, + "totalTradedVolume": 66, + "impliedVolatility": 10.85, + "lastPrice": 119.15, + "change": 59.2, + "pChange": 98.7489574645538, + "totalBuyQuantity": 8225, + "totalSellQuantity": 50, + "bidQty": 25, + "bidprice": 67.5, + "askQty": 25, + "askPrice": 139.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25450, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25450.00", + "openInterest": 2513, + "changeinOpenInterest": 1667, + "pchangeinOpenInterest": 197.044917257683, + "totalTradedVolume": 10410, + "impliedVolatility": 19.49, + "lastPrice": 1.5, + "change": -0.4, + "pChange": -21.0526315789474, + "totalBuyQuantity": 101275, + "totalSellQuantity": 14025, + "bidQty": 3600, + "bidprice": 1.15, + "askQty": 500, + "askPrice": 1.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25450.00", + "openInterest": 188, + "changeinOpenInterest": -22, + "pchangeinOpenInterest": -10.4761904761905, + "totalTradedVolume": 44, + "impliedVolatility": 40.43, + "lastPrice": 1576.4, + "change": -506, + "pChange": -24.2988859008836, + "totalBuyQuantity": 5950, + "totalSellQuantity": 6175, + "bidQty": 300, + "bidprice": 1530.55, + "askQty": 300, + "askPrice": 1603.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25450, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25450, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1351.65, + "askQty": 1000, + "askPrice": 1747.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25450, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25450.00", + "openInterest": 681, + "changeinOpenInterest": 452, + "pchangeinOpenInterest": 197.379912663755, + "totalTradedVolume": 1030, + "impliedVolatility": 14.34, + "lastPrice": 3.45, + "change": -0.0499999999999998, + "pChange": -1.42857142857142, + "totalBuyQuantity": 53500, + "totalSellQuantity": 10175, + "bidQty": 1500, + "bidprice": 2.85, + "askQty": 1800, + "askPrice": 8.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25450, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25450, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25450.00", + "openInterest": 13, + "changeinOpenInterest": -4, + "pchangeinOpenInterest": -23.5294117647059, + "totalTradedVolume": 45, + "impliedVolatility": 13.26, + "lastPrice": 9.9, + "change": 3.65, + "pChange": 58.4, + "totalBuyQuantity": 29300, + "totalSellQuantity": 3300, + "bidQty": 550, + "bidprice": 7.7, + "askQty": 850, + "askPrice": 12.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25450, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 25450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25450.00", + "openInterest": 383, + "changeinOpenInterest": -123, + "pchangeinOpenInterest": -24.3083003952569, + "totalTradedVolume": 668, + "impliedVolatility": 12.26, + "lastPrice": 32.1, + "change": 16.55, + "pChange": 106.430868167203, + "totalBuyQuantity": 29950, + "totalSellQuantity": 775, + "bidQty": 100, + "bidprice": 27, + "askQty": 25, + "askPrice": 40, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25450.00", + "openInterest": 568, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 35.6, + "lastPrice": 1842.45, + "change": 763.9, + "pChange": 70.8265727133652, + "totalBuyQuantity": 1625, + "totalSellQuantity": 2775, + "bidQty": 625, + "bidprice": 1250.2, + "askQty": 1000, + "askPrice": 1690.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25450, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25450, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25450.00", + "openInterest": 12, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1126.6, + "change": -2.30000000000018, + "pChange": -0.203738152183558, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1042.4, + "askQty": 1775, + "askPrice": 1821.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25450, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25450.00", + "openInterest": 32, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 10.42, + "lastPrice": 99, + "change": -180.6, + "pChange": -64.5922746781116, + "totalBuyQuantity": 9650, + "totalSellQuantity": 100, + "bidQty": 25, + "bidprice": 103.95, + "askQty": 50, + "askPrice": 139.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25500, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25500.00", + "openInterest": 23702, + "changeinOpenInterest": -1589, + "pchangeinOpenInterest": -6.28286742319402, + "totalTradedVolume": 2508, + "impliedVolatility": 36.74, + "lastPrice": 1600, + "change": -539.05, + "pChange": -25.2004394474183, + "totalBuyQuantity": 8275, + "totalSellQuantity": 8000, + "bidQty": 100, + "bidprice": 1589.8, + "askQty": 25, + "askPrice": 1601.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25500.00", + "openInterest": 176394, + "changeinOpenInterest": -33137, + "pchangeinOpenInterest": -15.8148436269573, + "totalTradedVolume": 779496, + "impliedVolatility": 19.53, + "lastPrice": 1.2, + "change": -0.75, + "pChange": -38.4615384615385, + "totalBuyQuantity": 2020400, + "totalSellQuantity": 234775, + "bidQty": 185550, + "bidprice": 1.2, + "askQty": 32675, + "askPrice": 1.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25500, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25500, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25500.00", + "openInterest": 35, + "changeinOpenInterest": 29, + "pchangeinOpenInterest": 483.333333333333, + "totalTradedVolume": 29, + "impliedVolatility": 20.39, + "lastPrice": 1525, + "change": -545, + "pChange": -26.3285024154589, + "totalBuyQuantity": 4150, + "totalSellQuantity": 4075, + "bidQty": 500, + "bidprice": 1399.8, + "askQty": 100, + "askPrice": 1566.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25500, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25500.00", + "openInterest": 3525, + "changeinOpenInterest": 908, + "pchangeinOpenInterest": 34.696217042415, + "totalTradedVolume": 11354, + "impliedVolatility": 15.03, + "lastPrice": 3.95, + "change": 0.45, + "pChange": 12.8571428571429, + "totalBuyQuantity": 118575, + "totalSellQuantity": 18450, + "bidQty": 250, + "bidprice": 3.3, + "askQty": 1450, + "askPrice": 4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25500, + "expiryDate": "12-Dec-2024", + "PE": { + "strikePrice": 25500, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024PE25500.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 40.31, + "lastPrice": 1829.15, + "change": 582.15, + "pChange": 46.6840417000802, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25500, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25500.00", + "openInterest": 885, + "changeinOpenInterest": 261, + "pchangeinOpenInterest": 41.8269230769231, + "totalTradedVolume": 1793, + "impliedVolatility": 13.32, + "lastPrice": 8.65, + "change": 1.6, + "pChange": 22.6950354609929, + "totalBuyQuantity": 59725, + "totalSellQuantity": 10575, + "bidQty": 900, + "bidprice": 6.15, + "askQty": 250, + "askPrice": 9.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25500, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25500.00", + "openInterest": 14611, + "changeinOpenInterest": 1139, + "pchangeinOpenInterest": 8.45457244655582, + "totalTradedVolume": 2661, + "impliedVolatility": 18.01, + "lastPrice": 1468, + "change": -515.8, + "pChange": -26.0006048996875, + "totalBuyQuantity": 4675, + "totalSellQuantity": 6500, + "bidQty": 250, + "bidprice": 1454.2, + "askQty": 25, + "askPrice": 1468, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25500.00", + "openInterest": 44570, + "changeinOpenInterest": 1761, + "pchangeinOpenInterest": 4.11362096755355, + "totalTradedVolume": 60890, + "impliedVolatility": 12.24, + "lastPrice": 28.3, + "change": 14.15, + "pChange": 100, + "totalBuyQuantity": 68975, + "totalSellQuantity": 11900, + "bidQty": 25, + "bidprice": 28.2, + "askQty": 200, + "askPrice": 31.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25500, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25500, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25500.00", + "openInterest": 11361, + "changeinOpenInterest": 2047, + "pchangeinOpenInterest": 21.9776680266266, + "totalTradedVolume": 10250, + "impliedVolatility": 10.93, + "lastPrice": 104.65, + "change": 51.85, + "pChange": 98.2007575757576, + "totalBuyQuantity": 16300, + "totalSellQuantity": 3400, + "bidQty": 25, + "bidprice": 102.15, + "askQty": 975, + "askPrice": 105, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25500, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25500.00", + "openInterest": 239, + "changeinOpenInterest": 102, + "pchangeinOpenInterest": 74.4525547445255, + "totalTradedVolume": 219, + "impliedVolatility": 16.02, + "lastPrice": 1377.95, + "change": -427.05, + "pChange": -23.6592797783933, + "totalBuyQuantity": 6525, + "totalSellQuantity": 5775, + "bidQty": 2550, + "bidprice": 1320.35, + "askQty": 25, + "askPrice": 1376, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25550, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25550.00", + "openInterest": 370, + "changeinOpenInterest": -8, + "pchangeinOpenInterest": -2.11640211640212, + "totalTradedVolume": 16, + "impliedVolatility": 26.58, + "lastPrice": 1610.05, + "change": -590.35, + "pChange": -26.8292128703872, + "totalBuyQuantity": 5625, + "totalSellQuantity": 5600, + "bidQty": 100, + "bidprice": 1630.35, + "askQty": 375, + "askPrice": 1655.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25550.00", + "openInterest": 3094, + "changeinOpenInterest": 895, + "pchangeinOpenInterest": 40.7003183265121, + "totalTradedVolume": 13922, + "impliedVolatility": 20.42, + "lastPrice": 1.4, + "change": -0.5, + "pChange": -26.3157894736842, + "totalBuyQuantity": 113475, + "totalSellQuantity": 13550, + "bidQty": 5200, + "bidprice": 1.2, + "askQty": 1675, + "askPrice": 1.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25550, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 25550, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25550.00", + "openInterest": 274, + "changeinOpenInterest": 22, + "pchangeinOpenInterest": 8.73015873015873, + "totalTradedVolume": 434, + "impliedVolatility": 15.21, + "lastPrice": 3.55, + "change": 0.2, + "pChange": 5.97014925373134, + "totalBuyQuantity": 43875, + "totalSellQuantity": 7800, + "bidQty": 100, + "bidprice": 2.5, + "askQty": 300, + "askPrice": 6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25550, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1433.1, + "askQty": 1775, + "askPrice": 1802, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25550, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25550, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25550.00", + "openInterest": 13, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 44.4444444444444, + "totalTradedVolume": 11, + "impliedVolatility": 13.76, + "lastPrice": 8.95, + "change": 0.549999999999999, + "pChange": 6.54761904761903, + "totalBuyQuantity": 24850, + "totalSellQuantity": 1100, + "bidQty": 800, + "bidprice": 5.6, + "askQty": 75, + "askPrice": 12.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25550, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 25550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25550.00", + "openInterest": 952, + "changeinOpenInterest": 189, + "pchangeinOpenInterest": 24.7706422018349, + "totalTradedVolume": 757, + "impliedVolatility": 12.46, + "lastPrice": 27.3, + "change": 13.35, + "pChange": 95.6989247311828, + "totalBuyQuantity": 34875, + "totalSellQuantity": 2225, + "bidQty": 25, + "bidprice": 23.15, + "askQty": 900, + "askPrice": 33.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25550.00", + "openInterest": 108, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 1.88679245283019, + "totalTradedVolume": 8, + "impliedVolatility": 18.48, + "lastPrice": 1518.6, + "change": -551, + "pChange": -26.6235021260147, + "totalBuyQuantity": 3900, + "totalSellQuantity": 2025, + "bidQty": 225, + "bidprice": 1416.3, + "askQty": 25, + "askPrice": 1597.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25550, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25550, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1650, + "totalSellQuantity": 1775, + "bidQty": 750, + "bidprice": 1258.45, + "askQty": 1775, + "askPrice": 1917.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25550, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25550.00", + "openInterest": 202, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 9.04, + "lastPrice": 53, + "change": -1.6, + "pChange": -2.93040293040293, + "totalBuyQuantity": 11000, + "totalSellQuantity": 2700, + "bidQty": 150, + "bidprice": 55.65, + "askQty": 900, + "askPrice": 104.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25600, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25600.00", + "openInterest": 13363, + "changeinOpenInterest": 5050, + "pchangeinOpenInterest": 60.7482256706364, + "totalTradedVolume": 53980, + "impliedVolatility": 20.7, + "lastPrice": 1.25, + "change": -0.6, + "pChange": -32.4324324324324, + "totalBuyQuantity": 238375, + "totalSellQuantity": 14150, + "bidQty": 1275, + "bidprice": 1.25, + "askQty": 1450, + "askPrice": 1.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25600.00", + "openInterest": 2799, + "changeinOpenInterest": -217, + "pchangeinOpenInterest": -7.19496021220159, + "totalTradedVolume": 478, + "impliedVolatility": 29.77, + "lastPrice": 1666, + "change": -575.4, + "pChange": -25.6714553404122, + "totalBuyQuantity": 7200, + "totalSellQuantity": 6175, + "bidQty": 400, + "bidprice": 1676.45, + "askQty": 100, + "askPrice": 1701.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25600, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 25600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25600.00", + "openInterest": 253, + "changeinOpenInterest": 8, + "pchangeinOpenInterest": 3.26530612244898, + "totalTradedVolume": 957, + "impliedVolatility": 15.61, + "lastPrice": 3.55, + "change": 0.2, + "pChange": 5.97014925373134, + "totalBuyQuantity": 109250, + "totalSellQuantity": 8600, + "bidQty": 3300, + "bidprice": 2.5, + "askQty": 275, + "askPrice": 6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25600, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1448, + "askQty": 1775, + "askPrice": 1857.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25600, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25600, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25600.00", + "openInterest": 23, + "changeinOpenInterest": 5, + "pchangeinOpenInterest": 27.7777777777778, + "totalTradedVolume": 19, + "impliedVolatility": 13.87, + "lastPrice": 8, + "change": 1.9, + "pChange": 31.1475409836066, + "totalBuyQuantity": 26775, + "totalSellQuantity": 3475, + "bidQty": 800, + "bidprice": 5, + "askQty": 175, + "askPrice": 11, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25600, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 25600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25600.00", + "openInterest": 8716, + "changeinOpenInterest": 2118, + "pchangeinOpenInterest": 32.1006365565323, + "totalTradedVolume": 9161, + "impliedVolatility": 12.62, + "lastPrice": 25.65, + "change": 12.85, + "pChange": 100.390625, + "totalBuyQuantity": 33325, + "totalSellQuantity": 275, + "bidQty": 75, + "bidprice": 16.15, + "askQty": 50, + "askPrice": 29.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25600.00", + "openInterest": 1236, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 0.162074554294976, + "totalTradedVolume": 39, + "impliedVolatility": 19.14, + "lastPrice": 1572.6, + "change": -512.3, + "pChange": -24.5719219147201, + "totalBuyQuantity": 4900, + "totalSellQuantity": 4925, + "bidQty": 900, + "bidprice": 1427.15, + "askQty": 25, + "askPrice": 1591.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25600, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25600.00", + "openInterest": 25, + "changeinOpenInterest": -4, + "pchangeinOpenInterest": -13.7931034482759, + "totalTradedVolume": 21, + "impliedVolatility": 21.84, + "lastPrice": 1658.35, + "change": -146.45, + "pChange": -8.1144725177305, + "totalBuyQuantity": 2350, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1202.95, + "askQty": 1775, + "askPrice": 1940.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25600, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25600.00", + "openInterest": 186, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 50.2, + "change": 2.8, + "pChange": 5.9071729957806, + "totalBuyQuantity": 8275, + "totalSellQuantity": 150, + "bidQty": 100, + "bidprice": 60, + "askQty": 150, + "askPrice": 99, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25650, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25650.00", + "openInterest": 301, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 46.86, + "lastPrice": 1794.1, + "change": -357.3, + "pChange": -16.6077902760993, + "totalBuyQuantity": 4000, + "totalSellQuantity": 4050, + "bidQty": 75, + "bidprice": 1728.1, + "askQty": 100, + "askPrice": 1759.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25650.00", + "openInterest": 1495, + "changeinOpenInterest": 695, + "pchangeinOpenInterest": 86.875, + "totalTradedVolume": 10660, + "impliedVolatility": 21.13, + "lastPrice": 1.2, + "change": -0.6, + "pChange": -33.3333333333333, + "totalBuyQuantity": 112475, + "totalSellQuantity": 10150, + "bidQty": 325, + "bidprice": 1.15, + "askQty": 750, + "askPrice": 2.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25650, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 25650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25650.00", + "openInterest": 52, + "changeinOpenInterest": 21, + "pchangeinOpenInterest": 67.741935483871, + "totalTradedVolume": 106, + "impliedVolatility": 15.83, + "lastPrice": 3.25, + "change": -3.65, + "pChange": -52.8985507246377, + "totalBuyQuantity": 49425, + "totalSellQuantity": 10075, + "bidQty": 800, + "bidprice": 2.3, + "askQty": 600, + "askPrice": 4.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25650, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1494.8, + "askQty": 1775, + "askPrice": 1911.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25650, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25650, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 28175, + "totalSellQuantity": 2500, + "bidQty": 800, + "bidprice": 4, + "askQty": 200, + "askPrice": 11, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25650, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25650.00", + "openInterest": 80, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1813.65, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1509.25, + "askQty": 1000, + "askPrice": 1864.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25650.00", + "openInterest": 719, + "changeinOpenInterest": 166, + "pchangeinOpenInterest": 30.0180831826401, + "totalTradedVolume": 609, + "impliedVolatility": 12.67, + "lastPrice": 23.3, + "change": 10.9, + "pChange": 87.9032258064516, + "totalBuyQuantity": 33775, + "totalSellQuantity": 300, + "bidQty": 600, + "bidprice": 15.65, + "askQty": 275, + "askPrice": 49.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25650, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25650.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 260.65, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 8125, + "totalSellQuantity": 550, + "bidQty": 25, + "bidprice": 58.95, + "askQty": 150, + "askPrice": 98.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25650, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25650.00", + "openInterest": 25, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1330, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1351.3, + "askQty": 1775, + "askPrice": 2012.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25700, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25700.00", + "openInterest": 7484, + "changeinOpenInterest": 1091, + "pchangeinOpenInterest": 17.0655404348506, + "totalTradedVolume": 40245, + "impliedVolatility": 21.66, + "lastPrice": 1.2, + "change": -0.65, + "pChange": -35.1351351351351, + "totalBuyQuantity": 227250, + "totalSellQuantity": 11725, + "bidQty": 3200, + "bidprice": 1.2, + "askQty": 250, + "askPrice": 1.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25700.00", + "openInterest": 2864, + "changeinOpenInterest": -66, + "pchangeinOpenInterest": -2.25255972696246, + "totalTradedVolume": 126, + "impliedVolatility": 49.61, + "lastPrice": 1856.3, + "change": -495.5, + "pChange": -21.0689684496981, + "totalBuyQuantity": 5625, + "totalSellQuantity": 3050, + "bidQty": 300, + "bidprice": 1782.2, + "askQty": 75, + "askPrice": 1801.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25700, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 0, + "bidQty": 1775, + "bidprice": 1539.55, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25700, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25700.00", + "openInterest": 109, + "changeinOpenInterest": 10, + "pchangeinOpenInterest": 10.1010101010101, + "totalTradedVolume": 258, + "impliedVolatility": 16.19, + "lastPrice": 3.2, + "change": -0.35, + "pChange": -9.85915492957746, + "totalBuyQuantity": 93100, + "totalSellQuantity": 11750, + "bidQty": 600, + "bidprice": 2.55, + "askQty": 75, + "askPrice": 3.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25700, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25700, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25700.00", + "openInterest": 59, + "changeinOpenInterest": 26, + "pchangeinOpenInterest": 78.7878787878788, + "totalTradedVolume": 34, + "impliedVolatility": 13.64, + "lastPrice": 5.2, + "change": -1, + "pChange": -16.1290322580645, + "totalBuyQuantity": 23725, + "totalSellQuantity": 4900, + "bidQty": 25, + "bidprice": 5.25, + "askQty": 200, + "askPrice": 11, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25700, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25700.00", + "openInterest": 189, + "changeinOpenInterest": -4, + "pchangeinOpenInterest": -2.07253886010363, + "totalTradedVolume": 19, + "impliedVolatility": 18.12, + "lastPrice": 1641, + "change": -504, + "pChange": -23.4965034965035, + "totalBuyQuantity": 4775, + "totalSellQuantity": 3900, + "bidQty": 25, + "bidprice": 1631.25, + "askQty": 25, + "askPrice": 1686.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25700.00", + "openInterest": 8021, + "changeinOpenInterest": 1280, + "pchangeinOpenInterest": 18.9882806705237, + "totalTradedVolume": 6473, + "impliedVolatility": 12.92, + "lastPrice": 22.75, + "change": 11.45, + "pChange": 101.327433628319, + "totalBuyQuantity": 39850, + "totalSellQuantity": 2225, + "bidQty": 75, + "bidprice": 19.1, + "askQty": 75, + "askPrice": 23.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25700, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25700.00", + "openInterest": 68, + "changeinOpenInterest": -21, + "pchangeinOpenInterest": -23.5955056179775, + "totalTradedVolume": 98, + "impliedVolatility": 23.01, + "lastPrice": 1772, + "change": -68, + "pChange": -3.69565217391304, + "totalBuyQuantity": 3250, + "totalSellQuantity": 3575, + "bidQty": 1775, + "bidprice": 1375.3, + "askQty": 900, + "askPrice": 1625.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25700, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25700.00", + "openInterest": 434, + "changeinOpenInterest": 30, + "pchangeinOpenInterest": 7.42574257425743, + "totalTradedVolume": 329, + "impliedVolatility": 11.05, + "lastPrice": 79, + "change": 31.1, + "pChange": 64.9269311064718, + "totalBuyQuantity": 10575, + "totalSellQuantity": 2225, + "bidQty": 200, + "bidprice": 60, + "askQty": 25, + "askPrice": 80, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25750.00", + "openInterest": 2079, + "changeinOpenInterest": -237, + "pchangeinOpenInterest": -10.2331606217617, + "totalTradedVolume": 5576, + "impliedVolatility": 21.98, + "lastPrice": 1.1, + "change": -0.7, + "pChange": -38.8888888888889, + "totalBuyQuantity": 105650, + "totalSellQuantity": 13600, + "bidQty": 3600, + "bidprice": 1.05, + "askQty": 700, + "askPrice": 1.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25750.00", + "openInterest": 116, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.854700854700855, + "totalTradedVolume": 10, + "impliedVolatility": 37.46, + "lastPrice": 1834.4, + "change": -548.4, + "pChange": -23.0149404062448, + "totalBuyQuantity": 4475, + "totalSellQuantity": 5225, + "bidQty": 175, + "bidprice": 1828.2, + "askQty": 75, + "askPrice": 1859.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25750, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1000, + "bidQty": 1775, + "bidprice": 1584.6, + "askQty": 1000, + "askPrice": 1963.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25750, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25750.00", + "openInterest": 88, + "changeinOpenInterest": 7, + "pchangeinOpenInterest": 8.64197530864198, + "totalTradedVolume": 162, + "impliedVolatility": 16.37, + "lastPrice": 2.9, + "change": 0.1, + "pChange": 3.57142857142857, + "totalBuyQuantity": 44800, + "totalSellQuantity": 11700, + "bidQty": 1800, + "bidprice": 2.3, + "askQty": 25, + "askPrice": 2.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25750, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25750, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25750.00", + "openInterest": 150, + "changeinOpenInterest": 36, + "pchangeinOpenInterest": 31.5789473684211, + "totalTradedVolume": 182, + "impliedVolatility": 14.05, + "lastPrice": 5.4, + "change": 0.25, + "pChange": 4.85436893203884, + "totalBuyQuantity": 25875, + "totalSellQuantity": 3725, + "bidQty": 100, + "bidprice": 4.15, + "askQty": 400, + "askPrice": 7.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25750, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 25750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25750.00", + "openInterest": 488, + "changeinOpenInterest": 94, + "pchangeinOpenInterest": 23.8578680203046, + "totalTradedVolume": 449, + "impliedVolatility": 12.95, + "lastPrice": 20.5, + "change": 8.4, + "pChange": 69.4214876033058, + "totalBuyQuantity": 27925, + "totalSellQuantity": 750, + "bidQty": 600, + "bidprice": 15.65, + "askQty": 750, + "askPrice": 24.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 0, + "bidQty": 1775, + "bidprice": 1593.8, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25750, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25750.00", + "openInterest": 110, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.900900900900901, + "totalTradedVolume": 1, + "impliedVolatility": 10.05, + "lastPrice": 52.55, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 10800, + "totalSellQuantity": 2700, + "bidQty": 900, + "bidprice": 60.45, + "askQty": 1800, + "askPrice": 100.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25750, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2175, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1376.5, + "askQty": 1775, + "askPrice": 2029.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25800, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25800.00", + "openInterest": 5561, + "changeinOpenInterest": -278, + "pchangeinOpenInterest": -4.76108922760747, + "totalTradedVolume": 374, + "impliedVolatility": 44.7, + "lastPrice": 1915, + "change": -528.2, + "pChange": -21.6191879502292, + "totalBuyQuantity": 6125, + "totalSellQuantity": 6200, + "bidQty": 675, + "bidprice": 1869.35, + "askQty": 100, + "askPrice": 1903.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25800.00", + "openInterest": 9652, + "changeinOpenInterest": -2390, + "pchangeinOpenInterest": -19.8472014615512, + "totalTradedVolume": 69158, + "impliedVolatility": 22.5, + "lastPrice": 1.1, + "change": -0.75, + "pChange": -40.5405405405405, + "totalBuyQuantity": 277800, + "totalSellQuantity": 31400, + "bidQty": 2750, + "bidprice": 1.1, + "askQty": 400, + "askPrice": 1.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25800, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 25800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25800.00", + "openInterest": 464, + "changeinOpenInterest": 75, + "pchangeinOpenInterest": 19.280205655527, + "totalTradedVolume": 446, + "impliedVolatility": 16.9, + "lastPrice": 3.1, + "change": -0.3, + "pChange": -8.8235294117647, + "totalBuyQuantity": 88975, + "totalSellQuantity": 18750, + "bidQty": 150, + "bidprice": 2.3, + "askQty": 150, + "askPrice": 3.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25800, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1629.2, + "askQty": 1775, + "askPrice": 2088.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25800, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25800, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 24500, + "totalSellQuantity": 2500, + "bidQty": 1500, + "bidprice": 3.7, + "askQty": 500, + "askPrice": 10, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25800, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25800.00", + "openInterest": 146, + "changeinOpenInterest": 7, + "pchangeinOpenInterest": 5.03597122302158, + "totalTradedVolume": 23, + "impliedVolatility": 22.23, + "lastPrice": 1797.1, + "change": -448.6, + "pChange": -19.9759540455092, + "totalBuyQuantity": 4850, + "totalSellQuantity": 3700, + "bidQty": 25, + "bidprice": 1726.25, + "askQty": 25, + "askPrice": 1789.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25800.00", + "openInterest": 6766, + "changeinOpenInterest": -3493, + "pchangeinOpenInterest": -34.0481528414075, + "totalTradedVolume": 13919, + "impliedVolatility": 13.11, + "lastPrice": 19.35, + "change": 8.8, + "pChange": 83.4123222748815, + "totalBuyQuantity": 42975, + "totalSellQuantity": 650, + "bidQty": 25, + "bidprice": 17, + "askQty": 200, + "askPrice": 29.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25800, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25800.00", + "openInterest": 191, + "changeinOpenInterest": 43, + "pchangeinOpenInterest": 29.0540540540541, + "totalTradedVolume": 158, + "impliedVolatility": 11.54, + "lastPrice": 78, + "change": 41.4, + "pChange": 113.114754098361, + "totalBuyQuantity": 10200, + "totalSellQuantity": 0, + "bidQty": 1800, + "bidprice": 61.3, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25800, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25800.00", + "openInterest": 21, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 20, + "impliedVolatility": 24.97, + "lastPrice": 1915, + "change": -189.2, + "pChange": -8.99154072806767, + "totalBuyQuantity": 2350, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1460.4, + "askQty": 1775, + "askPrice": 2095.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25850, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25850.00", + "openInterest": 51, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -1.92307692307692, + "totalTradedVolume": 4, + "impliedVolatility": 74.75, + "lastPrice": 2187.25, + "change": -312.75, + "pChange": -12.51, + "totalBuyQuantity": 5525, + "totalSellQuantity": 5325, + "bidQty": 50, + "bidprice": 1928.85, + "askQty": 50, + "askPrice": 1973.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25850.00", + "openInterest": 1491, + "changeinOpenInterest": 423, + "pchangeinOpenInterest": 39.6067415730337, + "totalTradedVolume": 4925, + "impliedVolatility": 23.23, + "lastPrice": 1.2, + "change": -0.55, + "pChange": -31.4285714285714, + "totalBuyQuantity": 99875, + "totalSellQuantity": 10475, + "bidQty": 2500, + "bidprice": 1, + "askQty": 1350, + "askPrice": 1.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25850, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 25850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25850.00", + "openInterest": 150, + "changeinOpenInterest": -36, + "pchangeinOpenInterest": -19.3548387096774, + "totalTradedVolume": 146, + "impliedVolatility": 17.22, + "lastPrice": 3, + "change": -0.55, + "pChange": -15.4929577464789, + "totalBuyQuantity": 44375, + "totalSellQuantity": 13475, + "bidQty": 1800, + "bidprice": 2.1, + "askQty": 100, + "askPrice": 3.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25850, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1668.4, + "askQty": 1775, + "askPrice": 2182.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25850, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25850, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25850.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 24.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 23850, + "totalSellQuantity": 1900, + "bidQty": 1500, + "bidprice": 3.7, + "askQty": 25, + "askPrice": 10, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25850, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25850.00", + "openInterest": 8, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 809.35, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 450, + "bidQty": 1775, + "bidprice": 1692.15, + "askQty": 450, + "askPrice": 2087.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25850.00", + "openInterest": 421, + "changeinOpenInterest": 114, + "pchangeinOpenInterest": 37.1335504885994, + "totalTradedVolume": 423, + "impliedVolatility": 13.24, + "lastPrice": 18.15, + "change": 7, + "pChange": 62.7802690582959, + "totalBuyQuantity": 36525, + "totalSellQuantity": 650, + "bidQty": 900, + "bidprice": 15.35, + "askQty": 650, + "askPrice": 34.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25850, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1298.45, + "askQty": 1775, + "askPrice": 2156.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25850, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25850.00", + "openInterest": 65, + "changeinOpenInterest": 40, + "pchangeinOpenInterest": 160, + "totalTradedVolume": 40, + "impliedVolatility": 10.14, + "lastPrice": 45.1, + "change": 1.1, + "pChange": 2.5, + "totalBuyQuantity": 6725, + "totalSellQuantity": 525, + "bidQty": 400, + "bidprice": 45.15, + "askQty": 25, + "askPrice": 95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25900.00", + "openInterest": 2476, + "changeinOpenInterest": -31, + "pchangeinOpenInterest": -1.23653769445552, + "totalTradedVolume": 55, + "impliedVolatility": 49.98, + "lastPrice": 2035.3, + "change": -502.6, + "pChange": -19.8037747744198, + "totalBuyQuantity": 6450, + "totalSellQuantity": 6375, + "bidQty": 150, + "bidprice": 1975.5, + "askQty": 25, + "askPrice": 2012.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25900.00", + "openInterest": 4350, + "changeinOpenInterest": -621, + "pchangeinOpenInterest": -12.4924562462281, + "totalTradedVolume": 23398, + "impliedVolatility": 23.29, + "lastPrice": 1, + "change": -0.7, + "pChange": -41.1764705882353, + "totalBuyQuantity": 149925, + "totalSellQuantity": 10550, + "bidQty": 250, + "bidprice": 1, + "askQty": 1800, + "askPrice": 5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25900, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1704.75, + "askQty": 1775, + "askPrice": 2235.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25900, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25900.00", + "openInterest": 172, + "changeinOpenInterest": 102, + "pchangeinOpenInterest": 145.714285714286, + "totalTradedVolume": 324, + "impliedVolatility": 17.49, + "lastPrice": 2.85, + "change": 0.15, + "pChange": 5.55555555555555, + "totalBuyQuantity": 98675, + "totalSellQuantity": 14625, + "bidQty": 375, + "bidprice": 2.4, + "askQty": 250, + "askPrice": 2.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25900, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25900, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25900.00", + "openInterest": 114, + "changeinOpenInterest": 106, + "pchangeinOpenInterest": 1325, + "totalTradedVolume": 233, + "impliedVolatility": 14.43, + "lastPrice": 4, + "change": -1.3, + "pChange": -24.5283018867925, + "totalBuyQuantity": 31800, + "totalSellQuantity": 7025, + "bidQty": 25, + "bidprice": 4.8, + "askQty": 500, + "askPrice": 8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25900, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25900.00", + "openInterest": 159, + "changeinOpenInterest": 7, + "pchangeinOpenInterest": 4.60526315789474, + "totalTradedVolume": 29, + "impliedVolatility": 20.9, + "lastPrice": 1859.1, + "change": -368.9, + "pChange": -16.5574506283663, + "totalBuyQuantity": 4775, + "totalSellQuantity": 4600, + "bidQty": 25, + "bidprice": 1825.15, + "askQty": 25, + "askPrice": 1870.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25900.00", + "openInterest": 1880, + "changeinOpenInterest": 239, + "pchangeinOpenInterest": 14.5642900670323, + "totalTradedVolume": 2655, + "impliedVolatility": 13.64, + "lastPrice": 18.85, + "change": 8.1, + "pChange": 75.3488372093024, + "totalBuyQuantity": 45500, + "totalSellQuantity": 3325, + "bidQty": 4975, + "bidprice": 17, + "askQty": 100, + "askPrice": 19.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25900, + "expiryDate": "30-Jan-2025", + "PE": { + "strikePrice": 25900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2175, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1466.5, + "askQty": 1775, + "askPrice": 2162.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25900, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25900.00", + "openInterest": 275, + "changeinOpenInterest": 6, + "pchangeinOpenInterest": 2.23048327137546, + "totalTradedVolume": 56, + "impliedVolatility": 11.1, + "lastPrice": 58, + "change": 23.15, + "pChange": 66.4275466284075, + "totalBuyQuantity": 10750, + "totalSellQuantity": 625, + "bidQty": 50, + "bidprice": 58, + "askQty": 75, + "askPrice": 62, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25950, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25950.00", + "openInterest": 693, + "changeinOpenInterest": 128, + "pchangeinOpenInterest": 22.6548672566372, + "totalTradedVolume": 3835, + "impliedVolatility": 23.8, + "lastPrice": 1, + "change": -0.75, + "pChange": -42.8571428571429, + "totalBuyQuantity": 88400, + "totalSellQuantity": 12700, + "bidQty": 25, + "bidprice": 1, + "askQty": 750, + "askPrice": 1.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25950.00", + "openInterest": 58, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 3.57142857142857, + "totalTradedVolume": 7, + "impliedVolatility": 44.24, + "lastPrice": 2050, + "change": -515, + "pChange": -20.0779727095517, + "totalBuyQuantity": 5050, + "totalSellQuantity": 5575, + "bidQty": 100, + "bidprice": 2039.6, + "askQty": 50, + "askPrice": 2069.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25950, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 25950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE25950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1784.4, + "askQty": 1775, + "askPrice": 2244.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25950, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE25950.00", + "openInterest": 291, + "changeinOpenInterest": 6, + "pchangeinOpenInterest": 2.10526315789474, + "totalTradedVolume": 91, + "impliedVolatility": 18.62, + "lastPrice": 3.9, + "change": 1.2, + "pChange": 44.4444444444444, + "totalBuyQuantity": 46500, + "totalSellQuantity": 18450, + "bidQty": 300, + "bidprice": 2.1, + "askQty": 600, + "askPrice": 3.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25950, + "expiryDate": "12-Dec-2024", + "CE": { + "strikePrice": 25950, + "expiryDate": "12-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY12-12-2024CE25950.00", + "openInterest": 179, + "changeinOpenInterest": 116, + "pchangeinOpenInterest": 184.126984126984, + "totalTradedVolume": 237, + "impliedVolatility": 15.15, + "lastPrice": 4.85, + "change": 0.5, + "pChange": 11.4942528735632, + "totalBuyQuantity": 30800, + "totalSellQuantity": 7300, + "bidQty": 450, + "bidprice": 4.2, + "askQty": 100, + "askPrice": 5.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25950, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 25950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE25950.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1973.95, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3700, + "totalSellQuantity": 3700, + "bidQty": 25, + "bidprice": 1821, + "askQty": 25, + "askPrice": 1934.35, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE25950.00", + "openInterest": 207, + "changeinOpenInterest": 100, + "pchangeinOpenInterest": 93.4579439252337, + "totalTradedVolume": 200, + "impliedVolatility": 13.54, + "lastPrice": 16.2, + "change": 5, + "pChange": 44.6428571428571, + "totalBuyQuantity": 27075, + "totalSellQuantity": 2000, + "bidQty": 900, + "bidprice": 14.05, + "askQty": 600, + "askPrice": 24.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25950, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 25950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE25950.00", + "openInterest": 239, + "changeinOpenInterest": -70, + "pchangeinOpenInterest": -22.6537216828479, + "totalTradedVolume": 83, + "impliedVolatility": 11.28, + "lastPrice": 56.65, + "change": 24.95, + "pChange": 78.7066246056782, + "totalBuyQuantity": 8575, + "totalSellQuantity": 1875, + "bidQty": 900, + "bidprice": 42.4, + "askQty": 625, + "askPrice": 158.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25950, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE25950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2250, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1496.75, + "askQty": 1775, + "askPrice": 2255.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26000.00", + "openInterest": 40309, + "changeinOpenInterest": -7075, + "pchangeinOpenInterest": -14.9312004052001, + "totalTradedVolume": 9598, + "impliedVolatility": 43.97, + "lastPrice": 2095.15, + "change": -547.35, + "pChange": -20.713339640492, + "totalBuyQuantity": 7350, + "totalSellQuantity": 8800, + "bidQty": 75, + "bidprice": 2087.8, + "askQty": 50, + "askPrice": 2101.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26000.00", + "openInterest": 236483, + "changeinOpenInterest": 52068, + "pchangeinOpenInterest": 28.2341458124339, + "totalTradedVolume": 395698, + "impliedVolatility": 24.43, + "lastPrice": 1.05, + "change": -0.65, + "pChange": -38.2352941176471, + "totalBuyQuantity": 1629875, + "totalSellQuantity": 208850, + "bidQty": 9075, + "bidprice": 1.05, + "askQty": 175, + "askPrice": 1.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 26000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE26000.00", + "openInterest": 4301, + "changeinOpenInterest": 1137, + "pchangeinOpenInterest": 35.9355246523388, + "totalTradedVolume": 4866, + "impliedVolatility": 18.09, + "lastPrice": 2.65, + "change": -0.35, + "pChange": -11.6666666666667, + "totalBuyQuantity": 129925, + "totalSellQuantity": 34850, + "bidQty": 900, + "bidprice": 2.25, + "askQty": 100, + "askPrice": 2.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26000, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE26000.00", + "openInterest": 28, + "changeinOpenInterest": 21, + "pchangeinOpenInterest": 300, + "totalTradedVolume": 26, + "impliedVolatility": 38.11, + "lastPrice": 2119, + "change": -424.6, + "pChange": -16.6928762384023, + "totalBuyQuantity": 4050, + "totalSellQuantity": 4100, + "bidQty": 300, + "bidprice": 1885.5, + "askQty": 300, + "askPrice": 2097.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26000.00", + "openInterest": 110420, + "changeinOpenInterest": 496, + "pchangeinOpenInterest": 0.451220843491867, + "totalTradedVolume": 72335, + "impliedVolatility": 13.87, + "lastPrice": 16.5, + "change": 5.8, + "pChange": 54.2056074766355, + "totalBuyQuantity": 102800, + "totalSellQuantity": 37325, + "bidQty": 500, + "bidprice": 15.4, + "askQty": 1775, + "askPrice": 16.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26000.00", + "openInterest": 38961, + "changeinOpenInterest": 2040, + "pchangeinOpenInterest": 5.52531079873243, + "totalTradedVolume": 8229, + "impliedVolatility": 20.36, + "lastPrice": 1938.15, + "change": -533.95, + "pChange": -21.599045346062, + "totalBuyQuantity": 8000, + "totalSellQuantity": 9250, + "bidQty": 25, + "bidprice": 1937.3, + "askQty": 25, + "askPrice": 1956.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 26000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE26000.00", + "openInterest": 14649, + "changeinOpenInterest": 738, + "pchangeinOpenInterest": 5.30515419452232, + "totalTradedVolume": 15007, + "impliedVolatility": 11.21, + "lastPrice": 51, + "change": 20.95, + "pChange": 69.7171381031614, + "totalBuyQuantity": 30250, + "totalSellQuantity": 9875, + "bidQty": 300, + "bidprice": 49, + "askQty": 300, + "askPrice": 51.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26000, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE26000.00", + "openInterest": 177, + "changeinOpenInterest": 65, + "pchangeinOpenInterest": 58.0357142857143, + "totalTradedVolume": 118, + "impliedVolatility": 18.66, + "lastPrice": 1846.2, + "change": -435.6, + "pChange": -19.0901919537208, + "totalBuyQuantity": 3375, + "totalSellQuantity": 4475, + "bidQty": 400, + "bidprice": 1769.35, + "askQty": 50, + "askPrice": 1814.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "27-Mar-2025", + "CE": { + "strikePrice": 26000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE26000.00", + "openInterest": 22853, + "changeinOpenInterest": -125, + "pchangeinOpenInterest": -0.543998607363565, + "totalTradedVolume": 11493, + "impliedVolatility": 10.22, + "lastPrice": 167, + "change": 61.85, + "pChange": 58.8207322872087, + "totalBuyQuantity": 26825, + "totalSellQuantity": 8025, + "bidQty": 25, + "bidprice": 164.2, + "askQty": 2625, + "askPrice": 167, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE26000.00", + "openInterest": 18207, + "changeinOpenInterest": -118, + "pchangeinOpenInterest": -0.643929058663029, + "totalTradedVolume": 1264, + "impliedVolatility": 16.38, + "lastPrice": 1668.95, + "change": -413.9, + "pChange": -19.8718102599803, + "totalBuyQuantity": 1300, + "totalSellQuantity": 300, + "bidQty": 25, + "bidprice": 1658.4, + "askQty": 25, + "askPrice": 1687.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "26-Jun-2025", + "CE": { + "strikePrice": 26000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE26000.00", + "openInterest": 2298, + "changeinOpenInterest": 402, + "pchangeinOpenInterest": 21.2025316455696, + "totalTradedVolume": 956, + "impliedVolatility": 9.04, + "lastPrice": 414.2, + "change": 111.55, + "pChange": 36.8577564843879, + "totalBuyQuantity": 22000, + "totalSellQuantity": 3225, + "bidQty": 1175, + "bidprice": 414.2, + "askQty": 75, + "askPrice": 428.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE26000.00", + "openInterest": 1644, + "changeinOpenInterest": 55, + "pchangeinOpenInterest": 3.46129641283826, + "totalTradedVolume": 299, + "impliedVolatility": 16.89, + "lastPrice": 1575.8, + "change": -326.3, + "pChange": -17.1547237264077, + "totalBuyQuantity": 1175, + "totalSellQuantity": 2475, + "bidQty": 25, + "bidprice": 1552.4, + "askQty": 75, + "askPrice": 1595, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "25-Sep-2025", + "CE": { + "strikePrice": 26000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025CE26000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE26000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 960.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 26000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE26000.00", + "openInterest": 3673, + "changeinOpenInterest": 158, + "pchangeinOpenInterest": 4.4950213371266, + "totalTradedVolume": 424, + "impliedVolatility": 18.18, + "lastPrice": 1505, + "change": -248.6, + "pChange": -14.1765510948905, + "totalBuyQuantity": 2625, + "totalSellQuantity": 1950, + "bidQty": 100, + "bidprice": 1500, + "askQty": 50, + "askPrice": 1510, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE26000.00", + "openInterest": 2847, + "changeinOpenInterest": 343, + "pchangeinOpenInterest": 13.6980830670927, + "totalTradedVolume": 817, + "impliedVolatility": 7.85, + "lastPrice": 1100, + "change": 199.15, + "pChange": 22.1068990397957, + "totalBuyQuantity": 3250, + "totalSellQuantity": 3750, + "bidQty": 75, + "bidprice": 1096.25, + "askQty": 400, + "askPrice": 1100, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 26000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE26000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5700, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 3.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE26000.00", + "openInterest": 18, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 3, + "impliedVolatility": 0, + "lastPrice": 1585, + "change": 84, + "pChange": 5.5962691538974, + "totalBuyQuantity": 2975, + "totalSellQuantity": 100, + "bidQty": 25, + "bidprice": 1450, + "askQty": 50, + "askPrice": 1600, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 26000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE26000.00", + "openInterest": 9, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1300, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2350, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 1010.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE26000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 1650, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 26000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE26000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 7200, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 2.85, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 26000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE26000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.25, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 26000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE26000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 26000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE26000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 26000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE26000.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1391.75, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26050, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26050.00", + "openInterest": 1341, + "changeinOpenInterest": 244, + "pchangeinOpenInterest": 22.2424794895169, + "totalTradedVolume": 8713, + "impliedVolatility": 24.68, + "lastPrice": 0.95, + "change": -0.8, + "pChange": -45.7142857142857, + "totalBuyQuantity": 89300, + "totalSellQuantity": 21650, + "bidQty": 3575, + "bidprice": 0.95, + "askQty": 1425, + "askPrice": 1.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26050.00", + "openInterest": 149, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2661.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4325, + "totalSellQuantity": 4300, + "bidQty": 25, + "bidprice": 2100.1, + "askQty": 625, + "askPrice": 2217.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26050, + "expiryDate": "05-Dec-2024", + "PE": { + "strikePrice": 26050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE26050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 1834.1, + "askQty": 1775, + "askPrice": 2423.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26050, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE26050.00", + "openInterest": 119, + "changeinOpenInterest": 36, + "pchangeinOpenInterest": 43.3734939759036, + "totalTradedVolume": 65, + "impliedVolatility": 18.14, + "lastPrice": 2.3, + "change": -0.45, + "pChange": -16.3636363636364, + "totalBuyQuantity": 40900, + "totalSellQuantity": 16825, + "bidQty": 1800, + "bidprice": 1.9, + "askQty": 175, + "askPrice": 2.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26050, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26050.00", + "openInterest": 277, + "changeinOpenInterest": 117, + "pchangeinOpenInterest": 73.125, + "totalTradedVolume": 535, + "impliedVolatility": 13.72, + "lastPrice": 13.85, + "change": 3.85, + "pChange": 38.5, + "totalBuyQuantity": 32400, + "totalSellQuantity": 2025, + "bidQty": 750, + "bidprice": 11.8, + "askQty": 900, + "askPrice": 24.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26050.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1057, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 1857.5, + "askQty": 900, + "askPrice": 2320.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26050, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 26050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE26050.00", + "openInterest": 287, + "changeinOpenInterest": -5, + "pchangeinOpenInterest": -1.71232876712329, + "totalTradedVolume": 7, + "impliedVolatility": 10.11, + "lastPrice": 30.25, + "change": -0.100000000000001, + "pChange": -0.329489291598028, + "totalBuyQuantity": 12900, + "totalSellQuantity": 2425, + "bidQty": 25, + "bidprice": 33.9, + "askQty": 900, + "askPrice": 61.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26050, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE26050.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1504.3, + "askQty": 1775, + "askPrice": 2416.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26100, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26100.00", + "openInterest": 10255, + "changeinOpenInterest": -75, + "pchangeinOpenInterest": -0.726040658276864, + "totalTradedVolume": 12323, + "impliedVolatility": 25.04, + "lastPrice": 0.9, + "change": -0.8, + "pChange": -47.0588235294118, + "totalBuyQuantity": 186575, + "totalSellQuantity": 23050, + "bidQty": 7200, + "bidprice": 0.9, + "askQty": 100, + "askPrice": 1.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26100.00", + "openInterest": 1496, + "changeinOpenInterest": -24, + "pchangeinOpenInterest": -1.57894736842105, + "totalTradedVolume": 30, + "impliedVolatility": 54.27, + "lastPrice": 2240, + "change": -501.4, + "pChange": -18.289924855913, + "totalBuyQuantity": 4700, + "totalSellQuantity": 4350, + "bidQty": 75, + "bidprice": 2142.25, + "askQty": 100, + "askPrice": 2205.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26100, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 26100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE26100.00", + "openInterest": 241, + "changeinOpenInterest": 70, + "pchangeinOpenInterest": 40.9356725146199, + "totalTradedVolume": 419, + "impliedVolatility": 18.41, + "lastPrice": 2.2, + "change": -0.9, + "pChange": -29.0322580645161, + "totalBuyQuantity": 98675, + "totalSellQuantity": 20825, + "bidQty": 25, + "bidprice": 2.15, + "askQty": 1800, + "askPrice": 2.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26100, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE26100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1902.15, + "askQty": 1775, + "askPrice": 2405.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26100, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26100.00", + "openInterest": 238, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -0.833333333333333, + "totalTradedVolume": 25, + "impliedVolatility": 22.91, + "lastPrice": 2065, + "change": -294.35, + "pChange": -12.475893784305, + "totalBuyQuantity": 4775, + "totalSellQuantity": 4200, + "bidQty": 25, + "bidprice": 2015.25, + "askQty": 25, + "askPrice": 2082.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26100.00", + "openInterest": 1146, + "changeinOpenInterest": -141, + "pchangeinOpenInterest": -10.955710955711, + "totalTradedVolume": 990, + "impliedVolatility": 14.06, + "lastPrice": 14.2, + "change": 4.15, + "pChange": 41.2935323383084, + "totalBuyQuantity": 42275, + "totalSellQuantity": 1450, + "bidQty": 250, + "bidprice": 11.7, + "askQty": 100, + "askPrice": 18.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26100, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 26100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE26100.00", + "openInterest": 180, + "changeinOpenInterest": 18, + "pchangeinOpenInterest": 11.1111111111111, + "totalTradedVolume": 88, + "impliedVolatility": 10.91, + "lastPrice": 38.45, + "change": 8.35, + "pChange": 27.7408637873754, + "totalBuyQuantity": 9050, + "totalSellQuantity": 1800, + "bidQty": 125, + "bidprice": 40.4, + "askQty": 800, + "askPrice": 63.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26100, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE26100.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 900, + "totalSellQuantity": 1775, + "bidQty": 900, + "bidprice": 1518.45, + "askQty": 1775, + "askPrice": 2363.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26150, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26150.00", + "openInterest": 706, + "changeinOpenInterest": 246, + "pchangeinOpenInterest": 53.4782608695652, + "totalTradedVolume": 2797, + "impliedVolatility": 26.43, + "lastPrice": 1.25, + "change": -0.45, + "pChange": -26.4705882352941, + "totalBuyQuantity": 78575, + "totalSellQuantity": 23250, + "bidQty": 7200, + "bidprice": 0.9, + "askQty": 3175, + "askPrice": 1.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26150.00", + "openInterest": 87, + "changeinOpenInterest": 7, + "pchangeinOpenInterest": 8.75, + "totalTradedVolume": 122, + "impliedVolatility": 52.36, + "lastPrice": 2274.35, + "change": -514.65, + "pChange": -18.4528504840445, + "totalBuyQuantity": 4500, + "totalSellQuantity": 4100, + "bidQty": 25, + "bidprice": 2226.55, + "askQty": 50, + "askPrice": 2270.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26150, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 26150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE26150.00", + "openInterest": 286, + "changeinOpenInterest": 62, + "pchangeinOpenInterest": 27.6785714285714, + "totalTradedVolume": 215, + "impliedVolatility": 18.57, + "lastPrice": 2, + "change": -0.85, + "pChange": -29.8245614035088, + "totalBuyQuantity": 45675, + "totalSellQuantity": 17725, + "bidQty": 250, + "bidprice": 2, + "askQty": 1000, + "askPrice": 3.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26150, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE26150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1961.35, + "askQty": 1775, + "askPrice": 2460.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26150, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26150.00", + "openInterest": 7, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1751, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3400, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 1856.25, + "askQty": 900, + "askPrice": 2422.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26150.00", + "openInterest": 188, + "changeinOpenInterest": 45, + "pchangeinOpenInterest": 31.4685314685315, + "totalTradedVolume": 147, + "impliedVolatility": 14.12, + "lastPrice": 13, + "change": 2.9, + "pChange": 28.7128712871287, + "totalBuyQuantity": 30225, + "totalSellQuantity": 5275, + "bidQty": 750, + "bidprice": 10.1, + "askQty": 400, + "askPrice": 20.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26150, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 26150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE26150.00", + "openInterest": 63, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 30, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 9350, + "totalSellQuantity": 2900, + "bidQty": 50, + "bidprice": 31.5, + "askQty": 500, + "askPrice": 57, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26150, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE26150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2175, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1618.9, + "askQty": 1775, + "askPrice": 2520.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26200.00", + "openInterest": 2228, + "changeinOpenInterest": -119, + "pchangeinOpenInterest": -5.07030251384747, + "totalTradedVolume": 145, + "impliedVolatility": 52.65, + "lastPrice": 2321.4, + "change": -520.1, + "pChange": -18.3037128277318, + "totalBuyQuantity": 4375, + "totalSellQuantity": 4475, + "bidQty": 100, + "bidprice": 2288.4, + "askQty": 100, + "askPrice": 2301.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26200.00", + "openInterest": 3851, + "changeinOpenInterest": 523, + "pchangeinOpenInterest": 15.7151442307692, + "totalTradedVolume": 11801, + "impliedVolatility": 26.7, + "lastPrice": 1.15, + "change": -0.55, + "pChange": -32.3529411764706, + "totalBuyQuantity": 170175, + "totalSellQuantity": 29225, + "bidQty": 1450, + "bidprice": 0.95, + "askQty": 2050, + "askPrice": 1.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26200, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 26200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE26200.00", + "openInterest": 660, + "changeinOpenInterest": 196, + "pchangeinOpenInterest": 42.2413793103448, + "totalTradedVolume": 649, + "impliedVolatility": 18.93, + "lastPrice": 2, + "change": -0.75, + "pChange": -27.2727272727273, + "totalBuyQuantity": 100525, + "totalSellQuantity": 20775, + "bidQty": 2700, + "bidprice": 1.9, + "askQty": 175, + "askPrice": 2.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26200, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE26200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2003.6, + "askQty": 1775, + "askPrice": 2591.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26200, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26200.00", + "openInterest": 4780, + "changeinOpenInterest": -1081, + "pchangeinOpenInterest": -18.4439515441051, + "totalTradedVolume": 7940, + "impliedVolatility": 14.13, + "lastPrice": 11.65, + "change": 2.5, + "pChange": 27.3224043715847, + "totalBuyQuantity": 38075, + "totalSellQuantity": 3525, + "bidQty": 100, + "bidprice": 9.9, + "askQty": 50, + "askPrice": 14.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26200.00", + "openInterest": 470, + "changeinOpenInterest": 54, + "pchangeinOpenInterest": 12.9807692307692, + "totalTradedVolume": 79, + "impliedVolatility": 25.22, + "lastPrice": 2189.7, + "change": -465.3, + "pChange": -17.5254237288136, + "totalBuyQuantity": 4750, + "totalSellQuantity": 4075, + "bidQty": 100, + "bidprice": 2106.05, + "askQty": 25, + "askPrice": 2176.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26200, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 26200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE26200.00", + "openInterest": 413, + "changeinOpenInterest": 220, + "pchangeinOpenInterest": 113.989637305699, + "totalTradedVolume": 554, + "impliedVolatility": 11.51, + "lastPrice": 40.5, + "change": 12.8, + "pChange": 46.2093862815885, + "totalBuyQuantity": 19400, + "totalSellQuantity": 2600, + "bidQty": 500, + "bidprice": 34, + "askQty": 800, + "askPrice": 54, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26200, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE26200.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 1888.2, + "askQty": 1775, + "askPrice": 2482.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26250, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26250.00", + "openInterest": 63, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 71.92, + "lastPrice": 2493.3, + "change": -254.65, + "pChange": -9.26690805873468, + "totalBuyQuantity": 3100, + "totalSellQuantity": 3150, + "bidQty": 325, + "bidprice": 2222.5, + "askQty": 375, + "askPrice": 2457.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26250.00", + "openInterest": 1921, + "changeinOpenInterest": 607, + "pchangeinOpenInterest": 46.1948249619483, + "totalTradedVolume": 6983, + "impliedVolatility": 26.67, + "lastPrice": 0.95, + "change": -0.7, + "pChange": -42.4242424242424, + "totalBuyQuantity": 75500, + "totalSellQuantity": 23175, + "bidQty": 3325, + "bidprice": 0.95, + "askQty": 900, + "askPrice": 2.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26250, + "expiryDate": "05-Dec-2024", + "CE": { + "strikePrice": 26250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024CE26250.00", + "openInterest": 263, + "changeinOpenInterest": 62, + "pchangeinOpenInterest": 30.8457711442786, + "totalTradedVolume": 433, + "impliedVolatility": 19.4, + "lastPrice": 2.1, + "change": -0.8, + "pChange": -27.5862068965517, + "totalBuyQuantity": 158050, + "totalSellQuantity": 20500, + "bidQty": 975, + "bidprice": 2, + "askQty": 1375, + "askPrice": 2.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26250, + "expiryDate": "05-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY05-12-2024PE26250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2049.65, + "askQty": 1775, + "askPrice": 2578.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26250, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26250.00", + "openInterest": 55, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1514, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 1963.8, + "askQty": 900, + "askPrice": 2524.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26250.00", + "openInterest": 179, + "changeinOpenInterest": 51, + "pchangeinOpenInterest": 39.84375, + "totalTradedVolume": 245, + "impliedVolatility": 14.47, + "lastPrice": 12, + "change": 3, + "pChange": 33.3333333333333, + "totalBuyQuantity": 27025, + "totalSellQuantity": 2900, + "bidQty": 600, + "bidprice": 9.15, + "askQty": 25, + "askPrice": 19, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26250, + "expiryDate": "30-Jan-2025", + "CE": { + "strikePrice": 26250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025CE26250.00", + "openInterest": 820, + "changeinOpenInterest": 30, + "pchangeinOpenInterest": 3.79746835443038, + "totalTradedVolume": 600, + "impliedVolatility": 11.76, + "lastPrice": 40.9, + "change": 10.7, + "pChange": 35.4304635761589, + "totalBuyQuantity": 13200, + "totalSellQuantity": 8100, + "bidQty": 450, + "bidprice": 36.2, + "askQty": 100, + "askPrice": 42, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26250, + "expiryDate": "30-Jan-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-01-2025PE26250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 2675, + "totalSellQuantity": 2675, + "bidQty": 1775, + "bidprice": 1933.8, + "askQty": 900, + "askPrice": 2508.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26300.00", + "openInterest": 4384, + "changeinOpenInterest": 391, + "pchangeinOpenInterest": 9.79213623841723, + "totalTradedVolume": 11886, + "impliedVolatility": 27.16, + "lastPrice": 0.95, + "change": -0.75, + "pChange": -44.1176470588235, + "totalBuyQuantity": 151150, + "totalSellQuantity": 24175, + "bidQty": 400, + "bidprice": 0.95, + "askQty": 25, + "askPrice": 1.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26300.00", + "openInterest": 1171, + "changeinOpenInterest": 34, + "pchangeinOpenInterest": 2.99032541776605, + "totalTradedVolume": 109, + "impliedVolatility": 59.35, + "lastPrice": 2449.65, + "change": -470.35, + "pChange": -16.1078767123288, + "totalBuyQuantity": 5675, + "totalSellQuantity": 5500, + "bidQty": 100, + "bidprice": 2384, + "askQty": 75, + "askPrice": 2405.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26300, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26300.00", + "openInterest": 71, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 6, + "impliedVolatility": 24.66, + "lastPrice": 2267.05, + "change": -92.9499999999998, + "pChange": -3.93855932203389, + "totalBuyQuantity": 4675, + "totalSellQuantity": 3750, + "bidQty": 25, + "bidprice": 2205.45, + "askQty": 75, + "askPrice": 2296.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26300.00", + "openInterest": 1490, + "changeinOpenInterest": -55, + "pchangeinOpenInterest": -3.55987055016181, + "totalTradedVolume": 1579, + "impliedVolatility": 14.63, + "lastPrice": 11.45, + "change": 2.5, + "pChange": 27.9329608938548, + "totalBuyQuantity": 39050, + "totalSellQuantity": 2950, + "bidQty": 125, + "bidprice": 11, + "askQty": 75, + "askPrice": 13.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26350.00", + "openInterest": 6, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2970, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 1775, + "bidprice": 2257.6, + "askQty": 1250, + "askPrice": 2547, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26350.00", + "openInterest": 440, + "changeinOpenInterest": 126, + "pchangeinOpenInterest": 40.1273885350319, + "totalTradedVolume": 2237, + "impliedVolatility": 27.65, + "lastPrice": 0.95, + "change": -0.7, + "pChange": -42.4242424242424, + "totalBuyQuantity": 78900, + "totalSellQuantity": 22575, + "bidQty": 6800, + "bidprice": 0.9, + "askQty": 150, + "askPrice": 1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26350, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26350.00", + "openInterest": 112, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -1.75438596491228, + "totalTradedVolume": 5, + "impliedVolatility": 14.99, + "lastPrice": 11.9, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 64675, + "totalSellQuantity": 6950, + "bidQty": 600, + "bidprice": 8.55, + "askQty": 600, + "askPrice": 14, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26350.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 602.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 2049.8, + "askQty": 900, + "askPrice": 2632.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26400, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26400.00", + "openInterest": 3754, + "changeinOpenInterest": -544, + "pchangeinOpenInterest": -12.6570497906003, + "totalTradedVolume": 6403, + "impliedVolatility": 27.99, + "lastPrice": 0.9, + "change": -0.75, + "pChange": -45.4545454545455, + "totalBuyQuantity": 205925, + "totalSellQuantity": 22225, + "bidQty": 6850, + "bidprice": 0.9, + "askQty": 900, + "askPrice": 3.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26400.00", + "openInterest": 1140, + "changeinOpenInterest": -42, + "pchangeinOpenInterest": -3.55329949238579, + "totalTradedVolume": 190, + "impliedVolatility": 60.56, + "lastPrice": 2546.65, + "change": -502.7, + "pChange": -16.4854805122403, + "totalBuyQuantity": 5525, + "totalSellQuantity": 5400, + "bidQty": 175, + "bidprice": 2476.75, + "askQty": 200, + "askPrice": 2510.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26400, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26400.00", + "openInterest": 28, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 3.7037037037037, + "totalTradedVolume": 8, + "impliedVolatility": 26, + "lastPrice": 2375.55, + "change": -496.9, + "pChange": -17.2988215634737, + "totalBuyQuantity": 3900, + "totalSellQuantity": 2850, + "bidQty": 900, + "bidprice": 2121.45, + "askQty": 75, + "askPrice": 2420.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26400.00", + "openInterest": 2838, + "changeinOpenInterest": 34, + "pchangeinOpenInterest": 1.21255349500713, + "totalTradedVolume": 1862, + "impliedVolatility": 14.46, + "lastPrice": 8.5, + "change": 0.55, + "pChange": 6.91823899371069, + "totalBuyQuantity": 40750, + "totalSellQuantity": 2800, + "bidQty": 125, + "bidprice": 8.9, + "askQty": 1000, + "askPrice": 19.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26450, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26450.00", + "openInterest": 470, + "changeinOpenInterest": -262, + "pchangeinOpenInterest": -35.792349726776, + "totalTradedVolume": 4909, + "impliedVolatility": 28.48, + "lastPrice": 0.9, + "change": -0.75, + "pChange": -45.4545454545455, + "totalBuyQuantity": 92875, + "totalSellQuantity": 22450, + "bidQty": 1475, + "bidprice": 0.85, + "askQty": 750, + "askPrice": 1.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26450.00", + "openInterest": 19, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2934.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4050, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 2499.05, + "askQty": 625, + "askPrice": 2600.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26450, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26450.00", + "openInterest": 63, + "changeinOpenInterest": 5, + "pchangeinOpenInterest": 8.62068965517242, + "totalTradedVolume": 8, + "impliedVolatility": 15.45, + "lastPrice": 11.55, + "change": -0.449999999999999, + "pChange": -3.74999999999999, + "totalBuyQuantity": 28825, + "totalSellQuantity": 3475, + "bidQty": 600, + "bidprice": 8.05, + "askQty": 300, + "askPrice": 12.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 1900, + "bidQty": 1775, + "bidprice": 2061.3, + "askQty": 900, + "askPrice": 2741, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26500, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26500.00", + "openInterest": 43281, + "changeinOpenInterest": 10078, + "pchangeinOpenInterest": 30.3526789747914, + "totalTradedVolume": 174699, + "impliedVolatility": 28.79, + "lastPrice": 0.85, + "change": -0.75, + "pChange": -46.875, + "totalBuyQuantity": 1110500, + "totalSellQuantity": 108900, + "bidQty": 58025, + "bidprice": 0.85, + "askQty": 3725, + "askPrice": 0.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26500.00", + "openInterest": 10093, + "changeinOpenInterest": -905, + "pchangeinOpenInterest": -8.22876886706674, + "totalTradedVolume": 1968, + "impliedVolatility": 56.25, + "lastPrice": 2615, + "change": -535.75, + "pChange": -17.0038879631834, + "totalBuyQuantity": 5750, + "totalSellQuantity": 6200, + "bidQty": 25, + "bidprice": 2596, + "askQty": 25, + "askPrice": 2603.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26500, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26500.00", + "openInterest": 24797, + "changeinOpenInterest": -1845, + "pchangeinOpenInterest": -6.9251557690864, + "totalTradedVolume": 19912, + "impliedVolatility": 15.02, + "lastPrice": 8.7, + "change": 1.2, + "pChange": 16, + "totalBuyQuantity": 50875, + "totalSellQuantity": 4725, + "bidQty": 275, + "bidprice": 8.55, + "askQty": 75, + "askPrice": 9.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26500.00", + "openInterest": 3553, + "changeinOpenInterest": -70, + "pchangeinOpenInterest": -1.9321004692244, + "totalTradedVolume": 290, + "impliedVolatility": 24.29, + "lastPrice": 2438.45, + "change": -528.7, + "pChange": -17.8184453094721, + "totalBuyQuantity": 5900, + "totalSellQuantity": 6975, + "bidQty": 25, + "bidprice": 2420, + "askQty": 25, + "askPrice": 2444.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26550, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26550.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3032.85, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 2452.65, + "askQty": 1000, + "askPrice": 2825.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26550.00", + "openInterest": 946, + "changeinOpenInterest": 364, + "pchangeinOpenInterest": 62.5429553264605, + "totalTradedVolume": 2008, + "impliedVolatility": 29.27, + "lastPrice": 0.85, + "change": -0.8, + "pChange": -48.4848484848485, + "totalBuyQuantity": 214825, + "totalSellQuantity": 21725, + "bidQty": 1250, + "bidprice": 0.85, + "askQty": 1325, + "askPrice": 0.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26550, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26550.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1261.6, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 2225, + "bidQty": 1775, + "bidprice": 2388.3, + "askQty": 1000, + "askPrice": 2841.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26550.00", + "openInterest": 151, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 6.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 33525, + "totalSellQuantity": 1700, + "bidQty": 800, + "bidprice": 7.7, + "askQty": 600, + "askPrice": 11.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26600, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26600.00", + "openInterest": 10417, + "changeinOpenInterest": 754, + "pchangeinOpenInterest": 7.80295974335093, + "totalTradedVolume": 41266, + "impliedVolatility": 29.58, + "lastPrice": 0.8, + "change": -0.7, + "pChange": -46.6666666666667, + "totalBuyQuantity": 393750, + "totalSellQuantity": 41250, + "bidQty": 4075, + "bidprice": 0.8, + "askQty": 8525, + "askPrice": 0.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26600.00", + "openInterest": 136, + "changeinOpenInterest": -12, + "pchangeinOpenInterest": -8.10810810810811, + "totalTradedVolume": 13, + "impliedVolatility": 54.46, + "lastPrice": 2700, + "change": -546.5, + "pChange": -16.8335130140151, + "totalBuyQuantity": 5875, + "totalSellQuantity": 5275, + "bidQty": 25, + "bidprice": 2676.55, + "askQty": 100, + "askPrice": 2718.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26600, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26600.00", + "openInterest": 1503, + "changeinOpenInterest": 147, + "pchangeinOpenInterest": 10.8407079646018, + "totalTradedVolume": 403, + "impliedVolatility": 15.56, + "lastPrice": 8.8, + "change": 0.75, + "pChange": 9.3167701863354, + "totalBuyQuantity": 38725, + "totalSellQuantity": 4150, + "bidQty": 900, + "bidprice": 7.55, + "askQty": 250, + "askPrice": 11, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26600.00", + "openInterest": 198, + "changeinOpenInterest": 79, + "pchangeinOpenInterest": 66.3865546218488, + "totalTradedVolume": 104, + "impliedVolatility": 23.17, + "lastPrice": 2514.5, + "change": -525.5, + "pChange": -17.2861842105263, + "totalBuyQuantity": 3850, + "totalSellQuantity": 3150, + "bidQty": 75, + "bidprice": 2491.7, + "askQty": 25, + "askPrice": 2578.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26650, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26650.00", + "openInterest": 1144, + "changeinOpenInterest": 606, + "pchangeinOpenInterest": 112.639405204461, + "totalTradedVolume": 3442, + "impliedVolatility": 31.02, + "lastPrice": 1.1, + "change": -0.5, + "pChange": -31.25, + "totalBuyQuantity": 107775, + "totalSellQuantity": 24425, + "bidQty": 1800, + "bidprice": 0.8, + "askQty": 1800, + "askPrice": 1.2, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26650.00", + "openInterest": 22, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3130.05, + "change": -1.94999999999982, + "pChange": -0.0622605363984616, + "totalBuyQuantity": 4150, + "totalSellQuantity": 4925, + "bidQty": 25, + "bidprice": 2708.85, + "askQty": 1000, + "askPrice": 3019.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26650, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 1000, + "bidQty": 1775, + "bidprice": 2391.9, + "askQty": 1000, + "askPrice": 2963, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26650.00", + "openInterest": 149, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 8, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 24625, + "totalSellQuantity": 1800, + "bidQty": 900, + "bidprice": 6.1, + "askQty": 600, + "askPrice": 12, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26700, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26700.00", + "openInterest": 1626, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.0614628149969269, + "totalTradedVolume": 1, + "impliedVolatility": 88.94, + "lastPrice": 3010, + "change": -135.95, + "pChange": -4.32142913905179, + "totalBuyQuantity": 5725, + "totalSellQuantity": 5375, + "bidQty": 225, + "bidprice": 2776.8, + "askQty": 225, + "askPrice": 2812.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26700.00", + "openInterest": 3033, + "changeinOpenInterest": -272, + "pchangeinOpenInterest": -8.22995461422088, + "totalTradedVolume": 5565, + "impliedVolatility": 31.36, + "lastPrice": 1.05, + "change": -0.55, + "pChange": -34.375, + "totalBuyQuantity": 385200, + "totalSellQuantity": 23900, + "bidQty": 4875, + "bidprice": 0.8, + "askQty": 1000, + "askPrice": 1.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26700, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26700.00", + "openInterest": 993, + "changeinOpenInterest": -45, + "pchangeinOpenInterest": -4.33526011560694, + "totalTradedVolume": 190, + "impliedVolatility": 15.92, + "lastPrice": 8.3, + "change": 1.6, + "pChange": 23.8805970149254, + "totalBuyQuantity": 40525, + "totalSellQuantity": 5050, + "bidQty": 900, + "bidprice": 6.6, + "askQty": 1000, + "askPrice": 18.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26700.00", + "openInterest": 10, + "changeinOpenInterest": 8, + "pchangeinOpenInterest": 400, + "totalTradedVolume": 8, + "impliedVolatility": 21.29, + "lastPrice": 2587.15, + "change": 502.15, + "pChange": 24.083932853717, + "totalBuyQuantity": 3900, + "totalSellQuantity": 3875, + "bidQty": 900, + "bidprice": 2336.7, + "askQty": 875, + "askPrice": 2916.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26750.00", + "openInterest": 862, + "changeinOpenInterest": -266, + "pchangeinOpenInterest": -23.5815602836879, + "totalTradedVolume": 8818, + "impliedVolatility": 31.18, + "lastPrice": 0.85, + "change": -0.7, + "pChange": -45.1612903225807, + "totalBuyQuantity": 134150, + "totalSellQuantity": 31675, + "bidQty": 2675, + "bidprice": 0.85, + "askQty": 1400, + "askPrice": 1.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26750.00", + "openInterest": 19, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 111.66, + "lastPrice": 3253.75, + "change": 26.3000000000002, + "pChange": 0.814884816186159, + "totalBuyQuantity": 3900, + "totalSellQuantity": 3275, + "bidQty": 50, + "bidprice": 2804.6, + "askQty": 275, + "askPrice": 2944.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26750, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26750.00", + "openInterest": 47, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 15.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 27475, + "totalSellQuantity": 1300, + "bidQty": 900, + "bidprice": 6.1, + "askQty": 600, + "askPrice": 11, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 900, + "bidprice": 2325.25, + "askQty": 1000, + "askPrice": 3136.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26800, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26800.00", + "openInterest": 10560, + "changeinOpenInterest": -3619, + "pchangeinOpenInterest": -25.5236617532971, + "totalTradedVolume": 8136, + "impliedVolatility": 31.46, + "lastPrice": 0.8, + "change": -0.85, + "pChange": -51.5151515151515, + "totalBuyQuantity": 319675, + "totalSellQuantity": 37925, + "bidQty": 300, + "bidprice": 0.8, + "askQty": 2575, + "askPrice": 1.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26800.00", + "openInterest": 149, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.666666666666667, + "totalTradedVolume": 3, + "impliedVolatility": 56.38, + "lastPrice": 2895.65, + "change": -555.25, + "pChange": -16.0900055058101, + "totalBuyQuantity": 4450, + "totalSellQuantity": 4275, + "bidQty": 450, + "bidprice": 2881, + "askQty": 25, + "askPrice": 2903.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26800, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26800.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3126.85, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3700, + "bidQty": 900, + "bidprice": 2369.5, + "askQty": 25, + "askPrice": 2776.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26800.00", + "openInterest": 871, + "changeinOpenInterest": 25, + "pchangeinOpenInterest": 2.95508274231679, + "totalTradedVolume": 469, + "impliedVolatility": 16.13, + "lastPrice": 7.35, + "change": 1, + "pChange": 15.748031496063, + "totalBuyQuantity": 42475, + "totalSellQuantity": 7050, + "bidQty": 100, + "bidprice": 7, + "askQty": 500, + "askPrice": 12.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26850, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26850.00", + "openInterest": 914, + "changeinOpenInterest": 53, + "pchangeinOpenInterest": 6.15563298490128, + "totalTradedVolume": 2063, + "impliedVolatility": 31.93, + "lastPrice": 0.8, + "change": -0.75, + "pChange": -48.3870967741935, + "totalBuyQuantity": 95600, + "totalSellQuantity": 20550, + "bidQty": 5925, + "bidprice": 0.8, + "askQty": 25, + "askPrice": 1.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26850.00", + "openInterest": 33, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 103.33, + "lastPrice": 3257.95, + "change": 79.7999999999997, + "pChange": 2.51089470289318, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4525, + "bidQty": 625, + "bidprice": 2893.45, + "askQty": 125, + "askPrice": 3014.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26850, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 900, + "bidprice": 2411.4, + "askQty": 1000, + "askPrice": 3160.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26850.00", + "openInterest": 111, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 7, + "change": -1, + "pChange": -12.5, + "totalBuyQuantity": 28825, + "totalSellQuantity": 4100, + "bidQty": 900, + "bidprice": 5.1, + "askQty": 600, + "askPrice": 10.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26900, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26900.00", + "openInterest": 2111, + "changeinOpenInterest": -137, + "pchangeinOpenInterest": -6.09430604982206, + "totalTradedVolume": 8030, + "impliedVolatility": 32.39, + "lastPrice": 0.8, + "change": -0.7, + "pChange": -46.6666666666667, + "totalBuyQuantity": 345925, + "totalSellQuantity": 24550, + "bidQty": 250, + "bidprice": 0.8, + "askQty": 300, + "askPrice": 1.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26900.00", + "openInterest": 186, + "changeinOpenInterest": -6, + "pchangeinOpenInterest": -3.125, + "totalTradedVolume": 6, + "impliedVolatility": 58.98, + "lastPrice": 3000, + "change": -550, + "pChange": -15.4929577464789, + "totalBuyQuantity": 4275, + "totalSellQuantity": 4275, + "bidQty": 100, + "bidprice": 2967.65, + "askQty": 900, + "askPrice": 3043.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26900, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 26900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26900.00", + "openInterest": 221, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -0.896860986547085, + "totalTradedVolume": 4, + "impliedVolatility": 16.33, + "lastPrice": 6.5, + "change": 0.55, + "pChange": 9.24369747899159, + "totalBuyQuantity": 40125, + "totalSellQuantity": 8050, + "bidQty": 800, + "bidprice": 6.2, + "askQty": 600, + "askPrice": 10.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26900.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 25.84, + "lastPrice": 2820, + "change": -52, + "pChange": -1.81058495821727, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3700, + "bidQty": 1775, + "bidprice": 2456.9, + "askQty": 25, + "askPrice": 2878.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26950, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26950.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3426.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3700, + "totalSellQuantity": 3675, + "bidQty": 25, + "bidprice": 2972.05, + "askQty": 1000, + "askPrice": 3177.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26950.00", + "openInterest": 683, + "changeinOpenInterest": 205, + "pchangeinOpenInterest": 42.8870292887029, + "totalTradedVolume": 4558, + "impliedVolatility": 33.58, + "lastPrice": 1, + "change": -0.55, + "pChange": -35.4838709677419, + "totalBuyQuantity": 90975, + "totalSellQuantity": 20175, + "bidQty": 10800, + "bidprice": 0.7, + "askQty": 200, + "askPrice": 1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26950, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 26950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE26950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1925, + "bidQty": 1000, + "bidprice": 2500.65, + "askQty": 1025, + "askPrice": 3356.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE26950.00", + "openInterest": 57, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 7, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 37300, + "totalSellQuantity": 900, + "bidQty": 500, + "bidprice": 5.65, + "askQty": 300, + "askPrice": 10.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27000.00", + "openInterest": 104572, + "changeinOpenInterest": 2538, + "pchangeinOpenInterest": 2.4874061587314, + "totalTradedVolume": 239189, + "impliedVolatility": 33.12, + "lastPrice": 0.75, + "change": -0.7, + "pChange": -48.2758620689655, + "totalBuyQuantity": 1090350, + "totalSellQuantity": 143300, + "bidQty": 272050, + "bidprice": 0.75, + "askQty": 26375, + "askPrice": 0.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27000.00", + "openInterest": 19705, + "changeinOpenInterest": -399, + "pchangeinOpenInterest": -1.98467966573816, + "totalTradedVolume": 1401, + "impliedVolatility": 63.99, + "lastPrice": 3114.75, + "change": -533.25, + "pChange": -14.6175986842105, + "totalBuyQuantity": 4950, + "totalSellQuantity": 7200, + "bidQty": 50, + "bidprice": 3091.5, + "askQty": 275, + "askPrice": 3105.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27000.00", + "openInterest": 60562, + "changeinOpenInterest": -1105, + "pchangeinOpenInterest": -1.79188220604213, + "totalTradedVolume": 14454, + "impliedVolatility": 16.99, + "lastPrice": 7.05, + "change": 0.7, + "pChange": 11.0236220472441, + "totalBuyQuantity": 64025, + "totalSellQuantity": 24275, + "bidQty": 425, + "bidprice": 7.05, + "askQty": 350, + "askPrice": 7.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27000.00", + "openInterest": 22963, + "changeinOpenInterest": -48, + "pchangeinOpenInterest": -0.208595888922689, + "totalTradedVolume": 1022, + "impliedVolatility": 28.21, + "lastPrice": 2940.45, + "change": -517.8, + "pChange": -14.9728909130341, + "totalBuyQuantity": 4700, + "totalSellQuantity": 6600, + "bidQty": 200, + "bidprice": 2906.35, + "askQty": 250, + "askPrice": 2934.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "27-Mar-2025", + "CE": { + "strikePrice": 27000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE27000.00", + "openInterest": 21328, + "changeinOpenInterest": 779, + "pchangeinOpenInterest": 3.79093873181177, + "totalTradedVolume": 5062, + "impliedVolatility": 11.25, + "lastPrice": 70.5, + "change": 18.6, + "pChange": 35.8381502890173, + "totalBuyQuantity": 21375, + "totalSellQuantity": 5500, + "bidQty": 850, + "bidprice": 70, + "askQty": 50, + "askPrice": 71.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE27000.00", + "openInterest": 7489, + "changeinOpenInterest": -73, + "pchangeinOpenInterest": -0.965353081195451, + "totalTradedVolume": 275, + "impliedVolatility": 19.34, + "lastPrice": 2540, + "change": -441.15, + "pChange": -14.7979806450531, + "totalBuyQuantity": 800, + "totalSellQuantity": 1525, + "bidQty": 25, + "bidprice": 2517.2, + "askQty": 25, + "askPrice": 2544, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "26-Jun-2025", + "CE": { + "strikePrice": 27000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE27000.00", + "openInterest": 1582, + "changeinOpenInterest": 134, + "pchangeinOpenInterest": 9.25414364640884, + "totalTradedVolume": 1122, + "impliedVolatility": 9.7, + "lastPrice": 206.8, + "change": 57.7, + "pChange": 38.6988598256204, + "totalBuyQuantity": 15600, + "totalSellQuantity": 3150, + "bidQty": 300, + "bidprice": 196.05, + "askQty": 125, + "askPrice": 206.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE27000.00", + "openInterest": 119, + "changeinOpenInterest": -20, + "pchangeinOpenInterest": -14.3884892086331, + "totalTradedVolume": 61, + "impliedVolatility": 19.07, + "lastPrice": 2342.05, + "change": -337.3, + "pChange": -12.588874167242, + "totalBuyQuantity": 1250, + "totalSellQuantity": 750, + "bidQty": 25, + "bidprice": 2207.2, + "askQty": 50, + "askPrice": 2337.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "25-Sep-2025", + "CE": { + "strikePrice": 27000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025CE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 1350.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 27000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE27000.00", + "openInterest": 2459, + "changeinOpenInterest": 40, + "pchangeinOpenInterest": 1.65357585779248, + "totalTradedVolume": 152, + "impliedVolatility": 18.62, + "lastPrice": 2020, + "change": -299.65, + "pChange": -12.9178970965447, + "totalBuyQuantity": 2575, + "totalSellQuantity": 1425, + "bidQty": 25, + "bidprice": 1987.2, + "askQty": 25, + "askPrice": 2038.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE27000.00", + "openInterest": 6079, + "changeinOpenInterest": 84, + "pchangeinOpenInterest": 1.40116763969975, + "totalTradedVolume": 721, + "impliedVolatility": 8.66, + "lastPrice": 720, + "change": 134.15, + "pChange": 22.8983528206879, + "totalBuyQuantity": 5900, + "totalSellQuantity": 2600, + "bidQty": 250, + "bidprice": 711, + "askQty": 50, + "askPrice": 725, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "25-Jun-2026", + "CE": { + "strikePrice": 27000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 325, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 2, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 27000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 13150, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 1050.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 325, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 2, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 27000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 7200, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 4.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 27000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.85, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 27000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 27000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 27000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE27000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5425, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27050, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27050.00", + "openInterest": 302, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 841.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4200, + "bidQty": 625, + "bidprice": 3088.95, + "askQty": 625, + "askPrice": 3201.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27050.00", + "openInterest": 1938, + "changeinOpenInterest": 674, + "pchangeinOpenInterest": 53.3227848101266, + "totalTradedVolume": 5924, + "impliedVolatility": 34.52, + "lastPrice": 1, + "change": -0.6, + "pChange": -37.5, + "totalBuyQuantity": 68975, + "totalSellQuantity": 28075, + "bidQty": 2700, + "bidprice": 0.75, + "askQty": 750, + "askPrice": 1.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27050, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27050.00", + "openInterest": 1, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 864.7, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1000, + "bidQty": 1775, + "bidprice": 2813.75, + "askQty": 1000, + "askPrice": 3443.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27050, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27050.00", + "openInterest": 92, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 5.25, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 86750, + "totalSellQuantity": 1700, + "bidQty": 750, + "bidprice": 5.5, + "askQty": 300, + "askPrice": 10.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27100, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27100.00", + "openInterest": 5893, + "changeinOpenInterest": 3523, + "pchangeinOpenInterest": 148.649789029536, + "totalTradedVolume": 33932, + "impliedVolatility": 34.24, + "lastPrice": 0.8, + "change": -0.75, + "pChange": -48.3870967741935, + "totalBuyQuantity": 470750, + "totalSellQuantity": 55275, + "bidQty": 2025, + "bidprice": 0.75, + "askQty": 8250, + "askPrice": 0.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27100.00", + "openInterest": 79, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 56.07, + "lastPrice": 3180, + "change": -404.6, + "pChange": -11.2871729063215, + "totalBuyQuantity": 5325, + "totalSellQuantity": 5300, + "bidQty": 50, + "bidprice": 3159.4, + "askQty": 50, + "askPrice": 3208.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27100, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27100.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2367.15, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 2800, + "bidQty": 1775, + "bidprice": 2900.9, + "askQty": 1000, + "askPrice": 3370.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27100, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27100.00", + "openInterest": 92, + "changeinOpenInterest": 45, + "pchangeinOpenInterest": 95.7446808510638, + "totalTradedVolume": 73, + "impliedVolatility": 17.4, + "lastPrice": 6.85, + "change": 2, + "pChange": 41.2371134020619, + "totalBuyQuantity": 34200, + "totalSellQuantity": 3200, + "bidQty": 225, + "bidprice": 5.5, + "askQty": 600, + "askPrice": 11.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27150, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27150.00", + "openInterest": 2656, + "changeinOpenInterest": 442, + "pchangeinOpenInterest": 19.9638663053297, + "totalTradedVolume": 6086, + "impliedVolatility": 34.7, + "lastPrice": 0.8, + "change": -0.75, + "pChange": -48.3870967741935, + "totalBuyQuantity": 80750, + "totalSellQuantity": 24325, + "bidQty": 7200, + "bidprice": 0.7, + "askQty": 650, + "askPrice": 0.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27150.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3625.4, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 900, + "bidprice": 2866.65, + "askQty": 1000, + "askPrice": 3361.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27150, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27150.00", + "openInterest": 99, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 4.21052631578947, + "totalTradedVolume": 8, + "impliedVolatility": 17.35, + "lastPrice": 6.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 23375, + "totalSellQuantity": 3775, + "bidQty": 900, + "bidprice": 4.4, + "askQty": 600, + "askPrice": 11, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27150, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27150.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2909.3, + "askQty": 1000, + "askPrice": 3556.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27200.00", + "openInterest": 112, + "changeinOpenInterest": -9, + "pchangeinOpenInterest": -7.43801652892562, + "totalTradedVolume": 23, + "impliedVolatility": 57.45, + "lastPrice": 3280, + "change": -89.9000000000001, + "pChange": -2.66773494762456, + "totalBuyQuantity": 3975, + "totalSellQuantity": 3950, + "bidQty": 75, + "bidprice": 3268.85, + "askQty": 50, + "askPrice": 3319.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27200.00", + "openInterest": 4556, + "changeinOpenInterest": 383, + "pchangeinOpenInterest": 9.17804936496525, + "totalTradedVolume": 8457, + "impliedVolatility": 35.74, + "lastPrice": 0.95, + "change": -0.5, + "pChange": -34.4827586206897, + "totalBuyQuantity": 177000, + "totalSellQuantity": 26800, + "bidQty": 7200, + "bidprice": 0.7, + "askQty": 1625, + "askPrice": 0.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27200, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27200.00", + "openInterest": 3, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 200, + "totalTradedVolume": 2, + "impliedVolatility": 44.59, + "lastPrice": 3400, + "change": 700, + "pChange": 25.9259259259259, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 2988.75, + "askQty": 1775, + "askPrice": 3576.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27200, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27200.00", + "openInterest": 226, + "changeinOpenInterest": 26, + "pchangeinOpenInterest": 13, + "totalTradedVolume": 71, + "impliedVolatility": 17.74, + "lastPrice": 6.5, + "change": -1.7, + "pChange": -20.7317073170732, + "totalBuyQuantity": 105400, + "totalSellQuantity": 2975, + "bidQty": 1500, + "bidprice": 4.3, + "askQty": 500, + "askPrice": 10.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27250, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3285.6, + "askQty": 625, + "askPrice": 3401.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27250.00", + "openInterest": 1667, + "changeinOpenInterest": 477, + "pchangeinOpenInterest": 40.0840336134454, + "totalTradedVolume": 3737, + "impliedVolatility": 35.4, + "lastPrice": 0.75, + "change": -0.75, + "pChange": -50, + "totalBuyQuantity": 103825, + "totalSellQuantity": 30725, + "bidQty": 8750, + "bidprice": 0.7, + "askQty": 750, + "askPrice": 1.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27250, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27250.00", + "openInterest": 26, + "changeinOpenInterest": 9, + "pchangeinOpenInterest": 52.9411764705882, + "totalTradedVolume": 9, + "impliedVolatility": 18.78, + "lastPrice": 8.9, + "change": -1.2, + "pChange": -11.8811881188119, + "totalBuyQuantity": 26225, + "totalSellQuantity": 3075, + "bidQty": 100, + "bidprice": 4.1, + "askQty": 600, + "askPrice": 9.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27250, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 3033.6, + "askQty": 1000, + "askPrice": 3677.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27300.00", + "openInterest": 4323, + "changeinOpenInterest": 1394, + "pchangeinOpenInterest": 47.5930351655855, + "totalTradedVolume": 15280, + "impliedVolatility": 35.85, + "lastPrice": 0.75, + "change": -0.8, + "pChange": -51.6129032258065, + "totalBuyQuantity": 243425, + "totalSellQuantity": 45125, + "bidQty": 4225, + "bidprice": 0.75, + "askQty": 50, + "askPrice": 0.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27300.00", + "openInterest": 12, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -7.69230769230769, + "totalTradedVolume": 9, + "impliedVolatility": 69.71, + "lastPrice": 3420, + "change": -221, + "pChange": -6.06976105465531, + "totalBuyQuantity": 5550, + "totalSellQuantity": 5525, + "bidQty": 625, + "bidprice": 3342.8, + "askQty": 350, + "askPrice": 3419.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27300, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27300.00", + "openInterest": 274, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.363636363636364, + "totalTradedVolume": 2, + "impliedVolatility": 18.01, + "lastPrice": 6, + "change": -0.0499999999999998, + "pChange": -0.826446280991733, + "totalBuyQuantity": 35550, + "totalSellQuantity": 7850, + "bidQty": 800, + "bidprice": 5, + "askQty": 500, + "askPrice": 9.7, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27300, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27300.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 29.57, + "lastPrice": 3230, + "change": 480, + "pChange": 17.4545454545455, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 3063.4, + "askQty": 1000, + "askPrice": 3740.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 2925, + "bidQty": 1775, + "bidprice": 3287.75, + "askQty": 250, + "askPrice": 3567, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27350.00", + "openInterest": 2410, + "changeinOpenInterest": 695, + "pchangeinOpenInterest": 40.5247813411079, + "totalTradedVolume": 5677, + "impliedVolatility": 36.07, + "lastPrice": 0.7, + "change": -0.8, + "pChange": -53.3333333333333, + "totalBuyQuantity": 106100, + "totalSellQuantity": 26625, + "bidQty": 7175, + "bidprice": 0.7, + "askQty": 50, + "askPrice": 1.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27350, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27350.00", + "openInterest": 12, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 3, + "impliedVolatility": 19.05, + "lastPrice": 8.25, + "change": 0.75, + "pChange": 10, + "totalBuyQuantity": 32775, + "totalSellQuantity": 7050, + "bidQty": 800, + "bidprice": 4.7, + "askQty": 500, + "askPrice": 9.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27350, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 3121.95, + "askQty": 1000, + "askPrice": 3780.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27400, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27400.00", + "openInterest": 27, + "changeinOpenInterest": -7, + "pchangeinOpenInterest": -20.5882352941177, + "totalTradedVolume": 9, + "impliedVolatility": 73.4, + "lastPrice": 3530, + "change": -242, + "pChange": -6.41569459172853, + "totalBuyQuantity": 4300, + "totalSellQuantity": 5125, + "bidQty": 275, + "bidprice": 3449.4, + "askQty": 25, + "askPrice": 3521.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27400.00", + "openInterest": 8737, + "changeinOpenInterest": 2778, + "pchangeinOpenInterest": 46.6185601611009, + "totalTradedVolume": 28785, + "impliedVolatility": 36.75, + "lastPrice": 0.75, + "change": -0.7, + "pChange": -48.2758620689655, + "totalBuyQuantity": 331075, + "totalSellQuantity": 31625, + "bidQty": 1850, + "bidprice": 0.75, + "askQty": 2500, + "askPrice": 0.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27400, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27400.00", + "openInterest": 56, + "changeinOpenInterest": -5, + "pchangeinOpenInterest": -8.19672131147541, + "totalTradedVolume": 10, + "impliedVolatility": 18.34, + "lastPrice": 5.7, + "change": -1.6, + "pChange": -21.9178082191781, + "totalBuyQuantity": 30850, + "totalSellQuantity": 8650, + "bidQty": 475, + "bidprice": 5.6, + "askQty": 600, + "askPrice": 10.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27400, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27400.00", + "openInterest": 7, + "changeinOpenInterest": 7, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 7, + "impliedVolatility": 33.68, + "lastPrice": 3375, + "change": 525, + "pChange": 18.4210526315789, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 3157.25, + "askQty": 900, + "askPrice": 3711.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27450, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27450.00", + "openInterest": 12, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2860, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3476.25, + "askQty": 625, + "askPrice": 3600.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27450.00", + "openInterest": 10825, + "changeinOpenInterest": 752, + "pchangeinOpenInterest": 7.46550183659287, + "totalTradedVolume": 15884, + "impliedVolatility": 37.64, + "lastPrice": 0.85, + "change": -0.7, + "pChange": -45.1612903225807, + "totalBuyQuantity": 144275, + "totalSellQuantity": 84350, + "bidQty": 3875, + "bidprice": 0.8, + "askQty": 225, + "askPrice": 0.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27450, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27450.00", + "openInterest": 30, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 10.4, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 27325, + "totalSellQuantity": 2900, + "bidQty": 800, + "bidprice": 4.7, + "askQty": 600, + "askPrice": 9.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27450, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27450.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 3271.1, + "askQty": 1775, + "askPrice": 3973.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27500, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27500.00", + "openInterest": 4279, + "changeinOpenInterest": -236, + "pchangeinOpenInterest": -5.22702104097453, + "totalTradedVolume": 291, + "impliedVolatility": 72.7, + "lastPrice": 3620.05, + "change": -520.8, + "pChange": -12.5771278843716, + "totalBuyQuantity": 6075, + "totalSellQuantity": 5375, + "bidQty": 50, + "bidprice": 3573.35, + "askQty": 50, + "askPrice": 3603.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27500.00", + "openInterest": 62295, + "changeinOpenInterest": 13031, + "pchangeinOpenInterest": 26.4513640792465, + "totalTradedVolume": 225638, + "impliedVolatility": 37.64, + "lastPrice": 0.75, + "change": -0.65, + "pChange": -46.4285714285714, + "totalBuyQuantity": 1354075, + "totalSellQuantity": 208850, + "bidQty": 109925, + "bidprice": 0.75, + "askQty": 4050, + "askPrice": 0.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27500, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27500.00", + "openInterest": 394, + "changeinOpenInterest": 107, + "pchangeinOpenInterest": 37.2822299651568, + "totalTradedVolume": 139, + "impliedVolatility": 28.56, + "lastPrice": 3403.05, + "change": -569.2, + "pChange": -14.3294102838442, + "totalBuyQuantity": 4050, + "totalSellQuantity": 6100, + "bidQty": 350, + "bidprice": 3386, + "askQty": 75, + "askPrice": 3454.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27500, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27500.00", + "openInterest": 4516, + "changeinOpenInterest": 286, + "pchangeinOpenInterest": 6.7612293144208, + "totalTradedVolume": 2005, + "impliedVolatility": 19.04, + "lastPrice": 6.3, + "change": 0.6, + "pChange": 10.5263157894737, + "totalBuyQuantity": 42750, + "totalSellQuantity": 13275, + "bidQty": 150, + "bidprice": 5.5, + "askQty": 25, + "askPrice": 6.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27550, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27550.00", + "openInterest": 16053, + "changeinOpenInterest": 7537, + "pchangeinOpenInterest": 88.5039924847346, + "totalTradedVolume": 48945, + "impliedVolatility": 38.54, + "lastPrice": 0.85, + "change": -0.55, + "pChange": -39.2857142857143, + "totalBuyQuantity": 120975, + "totalSellQuantity": 97250, + "bidQty": 6800, + "bidprice": 0.7, + "askQty": 5500, + "askPrice": 0.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27550.00", + "openInterest": 13, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2990, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 900, + "bidprice": 3376.15, + "askQty": 3025, + "askPrice": 3940.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27550, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27550.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3200, + "totalSellQuantity": 1775, + "bidQty": 1775, + "bidprice": 3172.85, + "askQty": 1775, + "askPrice": 4075.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27550, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27550.00", + "openInterest": 73, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 6.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 28625, + "totalSellQuantity": 1300, + "bidQty": 900, + "bidprice": 3.25, + "askQty": 600, + "askPrice": 9.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27600, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27600.00", + "openInterest": 14, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -6.66666666666667, + "totalTradedVolume": 9, + "impliedVolatility": 69.13, + "lastPrice": 3700, + "change": -371.65, + "pChange": -9.12774919258777, + "totalBuyQuantity": 5475, + "totalSellQuantity": 5475, + "bidQty": 375, + "bidprice": 3644.35, + "askQty": 900, + "askPrice": 3748.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27600.00", + "openInterest": 10775, + "changeinOpenInterest": 3170, + "pchangeinOpenInterest": 41.6831032215648, + "totalTradedVolume": 31877, + "impliedVolatility": 38.53, + "lastPrice": 0.75, + "change": -0.7, + "pChange": -48.2758620689655, + "totalBuyQuantity": 328575, + "totalSellQuantity": 135975, + "bidQty": 7200, + "bidprice": 0.7, + "askQty": 3600, + "askPrice": 0.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27600, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27600.00", + "openInterest": 1, + "changeinOpenInterest": 1, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 30.85, + "lastPrice": 3520, + "change": 2139.95, + "pChange": 155.063222347016, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 3360.65, + "askQty": 1775, + "askPrice": 4124.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27600, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27600.00", + "openInterest": 12, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 5.5, + "change": -0.25, + "pChange": -4.34782608695652, + "totalBuyQuantity": 35825, + "totalSellQuantity": 4200, + "bidQty": 800, + "bidprice": 3.7, + "askQty": 300, + "askPrice": 9.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27650, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27650.00", + "openInterest": 14, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3705, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 1775, + "bidprice": 3507.15, + "askQty": 625, + "askPrice": 3820, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27650.00", + "openInterest": 21271, + "changeinOpenInterest": 14007, + "pchangeinOpenInterest": 192.827643171806, + "totalTradedVolume": 72024, + "impliedVolatility": 38.97, + "lastPrice": 0.75, + "change": -0.65, + "pChange": -46.4285714285714, + "totalBuyQuantity": 184200, + "totalSellQuantity": 101425, + "bidQty": 7200, + "bidprice": 0.7, + "askQty": 2650, + "askPrice": 0.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27650, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 3409.1, + "askQty": 1775, + "askPrice": 4097.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27650, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27650.00", + "openInterest": 48, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 5.9, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 32525, + "totalSellQuantity": 4075, + "bidQty": 1500, + "bidprice": 3.3, + "askQty": 300, + "askPrice": 9.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27700, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27700.00", + "openInterest": 26, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 125.2, + "lastPrice": 4155.65, + "change": -24.3500000000004, + "pChange": -0.582535885167473, + "totalBuyQuantity": 4400, + "totalSellQuantity": 4250, + "bidQty": 100, + "bidprice": 3781.3, + "askQty": 100, + "askPrice": 3851.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27700.00", + "openInterest": 20535, + "changeinOpenInterest": 6516, + "pchangeinOpenInterest": 46.4797774448962, + "totalTradedVolume": 55861, + "impliedVolatility": 39.42, + "lastPrice": 0.75, + "change": -0.6, + "pChange": -44.4444444444445, + "totalBuyQuantity": 324325, + "totalSellQuantity": 112925, + "bidQty": 6875, + "bidprice": 0.7, + "askQty": 2450, + "askPrice": 0.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27700, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27700.00", + "openInterest": 126, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 7.05, + "change": -0.0499999999999998, + "pChange": -0.704225352112674, + "totalBuyQuantity": 21075, + "totalSellQuantity": 3300, + "bidQty": 900, + "bidprice": 3.8, + "askQty": 600, + "askPrice": 9.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27700, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27700.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1900, + "bidQty": 900, + "bidprice": 3117.95, + "askQty": 900, + "askPrice": 4152, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27750.00", + "openInterest": 66035, + "changeinOpenInterest": 52556, + "pchangeinOpenInterest": 389.910230729283, + "totalTradedVolume": 392941, + "impliedVolatility": 39.85, + "lastPrice": 0.75, + "change": -0.65, + "pChange": -46.4285714285714, + "totalBuyQuantity": 768475, + "totalSellQuantity": 699300, + "bidQty": 236475, + "bidprice": 0.7, + "askQty": 159725, + "askPrice": 0.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27750.00", + "openInterest": 10, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3746.2, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3795.55, + "askQty": 625, + "askPrice": 3903.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27750, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1900, + "bidQty": 1775, + "bidprice": 3518.4, + "askQty": 900, + "askPrice": 4204, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27750, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27750.00", + "openInterest": 48, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 9.09090909090909, + "totalTradedVolume": 7, + "impliedVolatility": 19.77, + "lastPrice": 5.4, + "change": -2.65, + "pChange": -32.9192546583851, + "totalBuyQuantity": 26975, + "totalSellQuantity": 4100, + "bidQty": 1800, + "bidprice": 4.2, + "askQty": 800, + "askPrice": 12.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27800, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27800.00", + "openInterest": 50518, + "changeinOpenInterest": 7235, + "pchangeinOpenInterest": 16.7155696231777, + "totalTradedVolume": 105779, + "impliedVolatility": 40.29, + "lastPrice": 0.75, + "change": -0.5, + "pChange": -40, + "totalBuyQuantity": 429875, + "totalSellQuantity": 52500, + "bidQty": 2525, + "bidprice": 0.75, + "askQty": 375, + "askPrice": 0.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27800.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 4242.1, + "change": 1.45000000000073, + "pChange": 0.0341928713758676, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3845, + "askQty": 625, + "askPrice": 3952.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27800, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 27800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27800.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1000, + "bidQty": 1775, + "bidprice": 3562.8, + "askQty": 1000, + "askPrice": 4259.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27800, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27800.00", + "openInterest": 126, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 6.15, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 75450, + "totalSellQuantity": 2800, + "bidQty": 1800, + "bidprice": 4.3, + "askQty": 500, + "askPrice": 11, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27850, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27850.00", + "openInterest": 51594, + "changeinOpenInterest": 12935, + "pchangeinOpenInterest": 33.4592203626581, + "totalTradedVolume": 127715, + "impliedVolatility": 40.48, + "lastPrice": 0.7, + "change": -0.55, + "pChange": -44, + "totalBuyQuantity": 549175, + "totalSellQuantity": 82400, + "bidQty": 36400, + "bidprice": 0.7, + "askQty": 5875, + "askPrice": 0.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 129.33, + "lastPrice": 4317.15, + "change": -93.1000000000004, + "pChange": -2.11099144039454, + "totalBuyQuantity": 5200, + "totalSellQuantity": 4850, + "bidQty": 50, + "bidprice": 3898.25, + "askQty": 550, + "askPrice": 4032.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27850, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27850.00", + "openInterest": 153, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 6.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 31825, + "totalSellQuantity": 2775, + "bidQty": 1800, + "bidprice": 4.3, + "askQty": 500, + "askPrice": 11, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27850, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1000, + "bidQty": 1775, + "bidprice": 3641.05, + "askQty": 1000, + "askPrice": 4310.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27900.00", + "openInterest": 105, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 4361.8, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4950, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3931.95, + "askQty": 625, + "askPrice": 4053.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27900.00", + "openInterest": 112821, + "changeinOpenInterest": 18218, + "pchangeinOpenInterest": 19.2573174212234, + "totalTradedVolume": 327682, + "impliedVolatility": 41.17, + "lastPrice": 0.75, + "change": -0.55, + "pChange": -42.3076923076923, + "totalBuyQuantity": 1540200, + "totalSellQuantity": 452925, + "bidQty": 205075, + "bidprice": 0.7, + "askQty": 143900, + "askPrice": 0.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27900, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27900.00", + "openInterest": 175, + "changeinOpenInterest": 7, + "pchangeinOpenInterest": 4.16666666666667, + "totalTradedVolume": 118, + "impliedVolatility": 20.23, + "lastPrice": 5, + "change": -1.25, + "pChange": -20, + "totalBuyQuantity": 32375, + "totalSellQuantity": 5175, + "bidQty": 400, + "bidprice": 5, + "askQty": 500, + "askPrice": 9.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27900, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27900.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1900, + "bidQty": 1775, + "bidprice": 3683.7, + "askQty": 900, + "askPrice": 4361.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27950, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27950.00", + "openInterest": 5, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -16.6666666666667, + "totalTradedVolume": 1, + "impliedVolatility": 123.19, + "lastPrice": 4350, + "change": -80, + "pChange": -1.8058690744921, + "totalBuyQuantity": 5150, + "totalSellQuantity": 4550, + "bidQty": 225, + "bidprice": 4027.05, + "askQty": 300, + "askPrice": 4110.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27950.00", + "openInterest": 146886, + "changeinOpenInterest": 26503, + "pchangeinOpenInterest": 22.015566982049, + "totalTradedVolume": 725475, + "impliedVolatility": 41.34, + "lastPrice": 0.7, + "change": -0.55, + "pChange": -44, + "totalBuyQuantity": 2808475, + "totalSellQuantity": 414100, + "bidQty": 456200, + "bidprice": 0.7, + "askQty": 11425, + "askPrice": 0.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27950, + "expiryDate": "26-Dec-2024", + "CE": { + "strikePrice": 27950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE27950.00", + "openInterest": 273, + "changeinOpenInterest": -18, + "pchangeinOpenInterest": -6.18556701030928, + "totalTradedVolume": 133, + "impliedVolatility": 20.49, + "lastPrice": 5.1, + "change": -0.550000000000001, + "pChange": -9.7345132743363, + "totalBuyQuantity": 31425, + "totalSellQuantity": 3575, + "bidQty": 700, + "bidprice": 4.25, + "askQty": 500, + "askPrice": 9.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27950, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE27950.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 1900, + "bidQty": 1775, + "bidprice": 3729.05, + "askQty": 900, + "askPrice": 4423.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 28000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE28000.00", + "openInterest": 10925, + "changeinOpenInterest": 519, + "pchangeinOpenInterest": 4.98750720738036, + "totalTradedVolume": 802, + "impliedVolatility": 33.6, + "lastPrice": 3919.65, + "change": -528.1, + "pChange": -11.8734191445113, + "totalBuyQuantity": 6500, + "totalSellQuantity": 4525, + "bidQty": 750, + "bidprice": 3882.05, + "askQty": 50, + "askPrice": 3916, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 28000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE28000.00", + "openInterest": 33394, + "changeinOpenInterest": -262, + "pchangeinOpenInterest": -0.778464463988591, + "totalTradedVolume": 7544, + "impliedVolatility": 20.79, + "lastPrice": 5.25, + "change": 0.0499999999999998, + "pChange": 0.961538461538458, + "totalBuyQuantity": 59775, + "totalSellQuantity": 19050, + "bidQty": 200, + "bidprice": 5.25, + "askQty": 900, + "askPrice": 5.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "27-Mar-2025", + "PE": { + "strikePrice": 28000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE28000.00", + "openInterest": 4787, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 110, + "impliedVolatility": 22.06, + "lastPrice": 3445.3, + "change": -476.4, + "pChange": -12.1477930489329, + "totalBuyQuantity": 1850, + "totalSellQuantity": 2150, + "bidQty": 25, + "bidprice": 3445, + "askQty": 25, + "askPrice": 3480.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 28000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE28000.00", + "openInterest": 17991, + "changeinOpenInterest": -506, + "pchangeinOpenInterest": -2.73557874249878, + "totalTradedVolume": 2108, + "impliedVolatility": 12.8, + "lastPrice": 39, + "change": 6.05, + "pChange": 18.361153262519, + "totalBuyQuantity": 18575, + "totalSellQuantity": 4150, + "bidQty": 150, + "bidprice": 39, + "askQty": 50, + "askPrice": 41.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "26-Jun-2025", + "CE": { + "strikePrice": 28000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE28000.00", + "openInterest": 1303, + "changeinOpenInterest": 72, + "pchangeinOpenInterest": 5.84890333062551, + "totalTradedVolume": 283, + "impliedVolatility": 10.6, + "lastPrice": 112, + "change": 20.3, + "pChange": 22.1374045801527, + "totalBuyQuantity": 11400, + "totalSellQuantity": 2800, + "bidQty": 100, + "bidprice": 112, + "askQty": 100, + "askPrice": 115.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 28000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 2430.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "25-Sep-2025", + "CE": { + "strikePrice": 28000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025CE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 28000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 1920.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "24-Dec-2025", + "CE": { + "strikePrice": 28000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE28000.00", + "openInterest": 2101, + "changeinOpenInterest": 183, + "pchangeinOpenInterest": 9.54118873826903, + "totalTradedVolume": 490, + "impliedVolatility": 9.1, + "lastPrice": 446, + "change": 83.85, + "pChange": 23.1533894794975, + "totalBuyQuantity": 8525, + "totalSellQuantity": 2975, + "bidQty": 150, + "bidprice": 442, + "askQty": 200, + "askPrice": 444, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 28000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE28000.00", + "openInterest": 2205, + "changeinOpenInterest": 74, + "pchangeinOpenInterest": 3.47254809948381, + "totalTradedVolume": 153, + "impliedVolatility": 19.64, + "lastPrice": 2660, + "change": -350, + "pChange": -11.6279069767442, + "totalBuyQuantity": 1975, + "totalSellQuantity": 2400, + "bidQty": 25, + "bidprice": 2607.55, + "askQty": 75, + "askPrice": 2641.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "25-Jun-2026", + "CE": { + "strikePrice": 28000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 350, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 28000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "31-Dec-2026", + "CE": { + "strikePrice": 28000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 350, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 2, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 28000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 1275.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 28000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 10800, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 2.25, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 28000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027CE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 28000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 28000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 28000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.25, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 28000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 28000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE28000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5425, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 2.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 29000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE29000.00", + "openInterest": 20714, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 0.0193143408981169, + "totalTradedVolume": 217, + "impliedVolatility": 43.43, + "lastPrice": 4954.85, + "change": -507, + "pChange": -9.28256909288977, + "totalBuyQuantity": 4575, + "totalSellQuantity": 4100, + "bidQty": 25, + "bidprice": 4887.25, + "askQty": 25, + "askPrice": 4954.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 29000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE29000.00", + "openInterest": 26758, + "changeinOpenInterest": -144, + "pchangeinOpenInterest": -0.535276187644041, + "totalTradedVolume": 1993, + "impliedVolatility": 24.29, + "lastPrice": 4.15, + "change": -0.8, + "pChange": -16.1616161616162, + "totalBuyQuantity": 45800, + "totalSellQuantity": 14625, + "bidQty": 2275, + "bidprice": 4.05, + "askQty": 1500, + "askPrice": 4.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "27-Mar-2025", + "PE": { + "strikePrice": 29000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE29000.00", + "openInterest": 766, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 0.261780104712042, + "totalTradedVolume": 7, + "impliedVolatility": 29.2, + "lastPrice": 4536, + "change": -333, + "pChange": -6.83918669131239, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 4030.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 29000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE29000.00", + "openInterest": 3347, + "changeinOpenInterest": -664, + "pchangeinOpenInterest": -16.5544751932187, + "totalTradedVolume": 2215, + "impliedVolatility": 14.53, + "lastPrice": 26.35, + "change": 2.7, + "pChange": 11.4164904862579, + "totalBuyQuantity": 14800, + "totalSellQuantity": 5200, + "bidQty": 1100, + "bidprice": 21.2, + "askQty": 50, + "askPrice": 28, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 29000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 3395.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 29000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE29000.00", + "openInterest": 1236, + "changeinOpenInterest": -20, + "pchangeinOpenInterest": -1.59235668789809, + "totalTradedVolume": 43, + "impliedVolatility": 11.57, + "lastPrice": 66, + "change": 10.15, + "pChange": 18.1736794986571, + "totalBuyQuantity": 11475, + "totalSellQuantity": 1975, + "bidQty": 25, + "bidprice": 62, + "askQty": 500, + "askPrice": 70, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "25-Sep-2025", + "CE": { + "strikePrice": 29000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025CE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 29000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 2805.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "24-Dec-2025", + "CE": { + "strikePrice": 29000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE29000.00", + "openInterest": 665, + "changeinOpenInterest": 44, + "pchangeinOpenInterest": 7.085346215781, + "totalTradedVolume": 119, + "impliedVolatility": 9.33, + "lastPrice": 259, + "change": 50.85, + "pChange": 24.4294979582032, + "totalBuyQuantity": 1275, + "totalSellQuantity": 1350, + "bidQty": 25, + "bidprice": 249.2, + "askQty": 25, + "askPrice": 259, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 29000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE29000.00", + "openInterest": 37, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3800, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 275, + "totalSellQuantity": 600, + "bidQty": 25, + "bidprice": 2519.85, + "askQty": 25, + "askPrice": 4240.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "25-Jun-2026", + "CE": { + "strikePrice": 29000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 350, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 29000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "31-Dec-2026", + "CE": { + "strikePrice": 29000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 350, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 29000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 1600.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "24-Jun-2027", + "CE": { + "strikePrice": 29000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027CE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 29000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "30-Dec-2027", + "CE": { + "strikePrice": 29000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027CE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 29000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 29000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 2.25, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 29000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 29000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 29000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE29000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5425, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.75, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 30000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE30000.00", + "openInterest": 1036, + "changeinOpenInterest": -22, + "pchangeinOpenInterest": -2.07939508506616, + "totalTradedVolume": 45, + "impliedVolatility": 46.47, + "lastPrice": 5916.65, + "change": -485.5, + "pChange": -7.58338995493701, + "totalBuyQuantity": 4325, + "totalSellQuantity": 4425, + "bidQty": 25, + "bidprice": 5874.5, + "askQty": 25, + "askPrice": 5935.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 30000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE30000.00", + "openInterest": 25466, + "changeinOpenInterest": -461, + "pchangeinOpenInterest": -1.77806919427624, + "totalTradedVolume": 3280, + "impliedVolatility": 27.42, + "lastPrice": 3.25, + "change": -1.35, + "pChange": -29.3478260869565, + "totalBuyQuantity": 39000, + "totalSellQuantity": 24875, + "bidQty": 1400, + "bidprice": 3.25, + "askQty": 3600, + "askPrice": 3.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "27-Mar-2025", + "PE": { + "strikePrice": 30000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE30000.00", + "openInterest": 70, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 5150, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 30000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE30000.00", + "openInterest": 6869, + "changeinOpenInterest": -81, + "pchangeinOpenInterest": -1.16546762589928, + "totalTradedVolume": 692, + "impliedVolatility": 15.81, + "lastPrice": 16.45, + "change": -0.650000000000002, + "pChange": -3.80116959064329, + "totalBuyQuantity": 17725, + "totalSellQuantity": 4600, + "bidQty": 600, + "bidprice": 15.85, + "askQty": 275, + "askPrice": 16.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "26-Jun-2025", + "PE": { + "strikePrice": 30000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 4315.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 30000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6900, + "totalSellQuantity": 0, + "bidQty": 1800, + "bidprice": 5.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "25-Sep-2025", + "CE": { + "strikePrice": 30000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025CE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 30000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 3745.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "24-Dec-2025", + "PE": { + "strikePrice": 30000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE30000.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 4100, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 50, + "bidQty": 25, + "bidprice": 4001.15, + "askQty": 25, + "askPrice": 4999.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 30000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE30000.00", + "openInterest": 542, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 0.37037037037037, + "totalTradedVolume": 92, + "impliedVolatility": 10.24, + "lastPrice": 183, + "change": 23, + "pChange": 14.375, + "totalBuyQuantity": 1475, + "totalSellQuantity": 1900, + "bidQty": 150, + "bidprice": 175.35, + "askQty": 100, + "askPrice": 185, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "25-Jun-2026", + "CE": { + "strikePrice": 30000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 350, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 30000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 30000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 1950.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 30000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 350, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "24-Jun-2027", + "PE": { + "strikePrice": 30000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 30000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027CE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "30-Dec-2027", + "CE": { + "strikePrice": 30000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027CE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 30000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "29-Jun-2028", + "CE": { + "strikePrice": 30000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028CE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 30000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "28-Dec-2028", + "PE": { + "strikePrice": 30000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.65, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 30000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 30000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE30000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5425, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 2.35, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "26-Dec-2024", + "PE": { + "strikePrice": 31000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024PE31000.00", + "openInterest": 2326, + "changeinOpenInterest": 1415, + "pchangeinOpenInterest": 155.323819978046, + "totalTradedVolume": 6623, + "impliedVolatility": 52.04, + "lastPrice": 6910.65, + "change": -489.35, + "pChange": -6.61283783783784, + "totalBuyQuantity": 4050, + "totalSellQuantity": 5050, + "bidQty": 25, + "bidprice": 6863.75, + "askQty": 25, + "askPrice": 6909.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 31000, + "expiryDate": "26-Dec-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-12-2024CE31000.00", + "openInterest": 12345, + "changeinOpenInterest": 191, + "pchangeinOpenInterest": 1.57149909494817, + "totalTradedVolume": 7317, + "impliedVolatility": 31.46, + "lastPrice": 3.7, + "change": -0.9, + "pChange": -19.5652173913043, + "totalBuyQuantity": 72575, + "totalSellQuantity": 32950, + "bidQty": 2625, + "bidprice": 3.2, + "askQty": 1650, + "askPrice": 3.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "27-Mar-2025", + "PE": { + "strikePrice": 31000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 31000, + "expiryDate": "27-Mar-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY27-03-2025CE31000.00", + "openInterest": 790, + "changeinOpenInterest": -16, + "pchangeinOpenInterest": -1.98511166253102, + "totalTradedVolume": 88, + "impliedVolatility": 17.07, + "lastPrice": 11.05, + "change": -0.75, + "pChange": -6.35593220338983, + "totalBuyQuantity": 11825, + "totalSellQuantity": 250, + "bidQty": 200, + "bidprice": 11.3, + "askQty": 75, + "askPrice": 14, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "26-Jun-2025", + "CE": { + "strikePrice": 31000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025CE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 6900, + "totalSellQuantity": 0, + "bidQty": 1800, + "bidprice": 2.5, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 31000, + "expiryDate": "26-Jun-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY26-06-2025PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 5245.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "25-Sep-2025", + "PE": { + "strikePrice": 31000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 4710.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 31000, + "expiryDate": "25-Sep-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-09-2025CE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "24-Dec-2025", + "CE": { + "strikePrice": 31000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025CE31000.00", + "openInterest": 178, + "changeinOpenInterest": 19, + "pchangeinOpenInterest": 11.9496855345912, + "totalTradedVolume": 36, + "impliedVolatility": 11, + "lastPrice": 130, + "change": 5, + "pChange": 4, + "totalBuyQuantity": 1075, + "totalSellQuantity": 400, + "bidQty": 25, + "bidprice": 130, + "askQty": 100, + "askPrice": 144, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 31000, + "expiryDate": "24-Dec-2025", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-12-2025PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 25, + "totalSellQuantity": 0, + "bidQty": 25, + "bidprice": 4080.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "25-Jun-2026", + "PE": { + "strikePrice": 31000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 31000, + "expiryDate": "25-Jun-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY25-06-2026CE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 350, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "31-Dec-2026", + "PE": { + "strikePrice": 31000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 250, + "totalSellQuantity": 0, + "bidQty": 250, + "bidprice": 2325.05, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 31000, + "expiryDate": "31-Dec-2026", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY31-12-2026CE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 350, + "totalSellQuantity": 0, + "bidQty": 300, + "bidprice": 1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "24-Jun-2027", + "CE": { + "strikePrice": 31000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027CE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 31000, + "expiryDate": "24-Jun-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY24-06-2027PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "30-Dec-2027", + "PE": { + "strikePrice": 31000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 31000, + "expiryDate": "30-Dec-2027", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY30-12-2027CE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "29-Jun-2028", + "PE": { + "strikePrice": 31000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 0, + "totalSellQuantity": 0, + "bidQty": 0, + "bidprice": 0, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 31000, + "expiryDate": "29-Jun-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY29-06-2028CE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "28-Dec-2028", + "CE": { + "strikePrice": 31000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028CE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 50, + "totalSellQuantity": 0, + "bidQty": 50, + "bidprice": 0.1, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 31000, + "expiryDate": "28-Dec-2028", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-12-2028PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5400, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.15, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 31000, + "expiryDate": "28-Jun-2029", + "PE": { + "strikePrice": 31000, + "expiryDate": "28-Jun-2029", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-06-2029PE31000.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 5425, + "totalSellQuantity": 0, + "bidQty": 5400, + "bidprice": 1.45, + "askQty": 0, + "askPrice": 0, + "underlyingValue": 23907.25 + } + } + ], + "timestamp": "22-Nov-2024 15:30:00", + "underlyingValue": 23907.25, + "strikePrices": [12000, 13000, 14000, 15000, 16000, 16500, 17000, 18000, 18500, 19000, 19500, 20000, 21000, 21600, 21650, 21700, 21750, 21800, 21850, 21900, 21950, 22000, 22050, 22100, 22150, 22200, 22250, 22300, 22350, 22400, 22450, 22500, 22550, 22600, 22650, 22700, 22750, 22800, 22850, 22900, 22950, 23000, 23050, 23100, 23150, 23200, 23250, 23300, 23350, 23400, 23450, 23500, 23550, 23600, 23650, 23700, 23750, 23800, 23850, 23900, 23950, 24000, 24050, 24100, 24150, 24200, 24250, 24300, 24350, 24400, 24450, 24500, 24550, 24600, 24650, 24700, 24750, 24800, 24850, 24900, 24950, 25000, 25050, 25100, 25150, 25200, 25250, 25300, 25350, 25400, 25450, 25500, 25550, 25600, 25650, 25700, 25750, 25800, 25850, 25900, 25950, 26000, 26050, 26100, 26150, 26200, 26250, 26300, 26350, 26400, 26450, 26500, 26550, 26600, 26650, 26700, 26750, 26800, 26850, 26900, 26950, 27000, 27050, 27100, 27150, 27200, 27250, 27300, 27350, 27400, 27450, 27500, 27550, 27600, 27650, 27700, 27750, 27800, 27850, 27900, 27950, 28000, 29000, 30000, 31000] + }, + "filtered": { + "data": [ + { + "strikePrice": 21600, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 21600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21600.00", + "openInterest": 170799, + "changeinOpenInterest": 170799, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1251412, + "impliedVolatility": 32.5, + "lastPrice": 2.05, + "change": -12.35, + "pChange": -85.7638888888889, + "totalBuyQuantity": 1114350, + "totalSellQuantity": 99125, + "bidQty": 475, + "bidprice": 2.05, + "askQty": 1050, + "askPrice": 2.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21600.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2164.8, + "askQty": 1000, + "askPrice": 2433.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21650, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 21650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21650.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 1775, + "totalSellQuantity": 2775, + "bidQty": 1775, + "bidprice": 2117.25, + "askQty": 1000, + "askPrice": 2382.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21650.00", + "openInterest": 27527, + "changeinOpenInterest": 27527, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 352050, + "impliedVolatility": 32.29, + "lastPrice": 2.3, + "change": -13.25, + "pChange": -85.2090032154341, + "totalBuyQuantity": 127825, + "totalSellQuantity": 31150, + "bidQty": 600, + "bidprice": 2.2, + "askQty": 1500, + "askPrice": 2.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21700, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 21700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21700.00", + "openInterest": 318402, + "changeinOpenInterest": 56264, + "pchangeinOpenInterest": 21.4635039559316, + "totalTradedVolume": 969104, + "impliedVolatility": 32.11, + "lastPrice": 2.6, + "change": -1.65, + "pChange": -38.8235294117647, + "totalBuyQuantity": 1143850, + "totalSellQuantity": 111500, + "bidQty": 2100, + "bidprice": 2.5, + "askQty": 1200, + "askPrice": 2.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21700.00", + "openInterest": 9, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 6, + "impliedVolatility": 0, + "lastPrice": 2235, + "change": 545, + "pChange": 32.2485207100592, + "totalBuyQuantity": 5550, + "totalSellQuantity": 5550, + "bidQty": 225, + "bidprice": 2142.9, + "askQty": 75, + "askPrice": 2241.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 21750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21750.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2041.55, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 1775, + "bidprice": 1919.5, + "askQty": 1000, + "askPrice": 2250.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21750.00", + "openInterest": 52721, + "changeinOpenInterest": 16931, + "pchangeinOpenInterest": 47.3065101983794, + "totalTradedVolume": 185028, + "impliedVolatility": 31.66, + "lastPrice": 2.75, + "change": -1.8, + "pChange": -39.5604395604396, + "totalBuyQuantity": 132800, + "totalSellQuantity": 19900, + "bidQty": 50, + "bidprice": 2.65, + "askQty": 275, + "askPrice": 2.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21800, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 21800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21800.00", + "openInterest": 146752, + "changeinOpenInterest": 30088, + "pchangeinOpenInterest": 25.7903037783721, + "totalTradedVolume": 456356, + "impliedVolatility": 31.13, + "lastPrice": 2.85, + "change": -1.75, + "pChange": -38.0434782608696, + "totalBuyQuantity": 224200, + "totalSellQuantity": 35350, + "bidQty": 750, + "bidprice": 2.75, + "askQty": 5075, + "askPrice": 3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21800.00", + "openInterest": 17, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 6, + "impliedVolatility": 0, + "lastPrice": 2070, + "change": 500, + "pChange": 31.8471337579618, + "totalBuyQuantity": 5525, + "totalSellQuantity": 5300, + "bidQty": 225, + "bidprice": 2057.3, + "askQty": 150, + "askPrice": 2115.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21850, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 21850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21850.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1510.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 1775, + "bidprice": 1823.7, + "askQty": 625, + "askPrice": 2113.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21850.00", + "openInterest": 29719, + "changeinOpenInterest": 6317, + "pchangeinOpenInterest": 26.9934193658662, + "totalTradedVolume": 115146, + "impliedVolatility": 30.53, + "lastPrice": 2.9, + "change": -1.9, + "pChange": -39.5833333333333, + "totalBuyQuantity": 129275, + "totalSellQuantity": 13625, + "bidQty": 600, + "bidprice": 2.7, + "askQty": 625, + "askPrice": 3.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21900, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 21900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21900.00", + "openInterest": 6, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 200, + "totalTradedVolume": 5, + "impliedVolatility": 0, + "lastPrice": 1972.15, + "change": 512.15, + "pChange": 35.0787671232877, + "totalBuyQuantity": 5450, + "totalSellQuantity": 5275, + "bidQty": 100, + "bidprice": 1987.55, + "askQty": 900, + "askPrice": 2055.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 21900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21900.00", + "openInterest": 64241, + "changeinOpenInterest": 19322, + "pchangeinOpenInterest": 43.0152051470425, + "totalTradedVolume": 284141, + "impliedVolatility": 30.11, + "lastPrice": 3.1, + "change": -2.3, + "pChange": -42.5925925925926, + "totalBuyQuantity": 115200, + "totalSellQuantity": 17000, + "bidQty": 125, + "bidprice": 3.1, + "askQty": 625, + "askPrice": 3.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 21950, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 21950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE21950.00", + "openInterest": 13536, + "changeinOpenInterest": 705, + "pchangeinOpenInterest": 5.49450549450549, + "totalTradedVolume": 90336, + "impliedVolatility": 29.62, + "lastPrice": 3.25, + "change": -2.5, + "pChange": -43.4782608695652, + "totalBuyQuantity": 105275, + "totalSellQuantity": 17425, + "bidQty": 750, + "bidprice": 2.8, + "askQty": 625, + "askPrice": 3.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 21950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE21950.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1534.8, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 625, + "bidprice": 1879.35, + "askQty": 1000, + "askPrice": 2008.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22000, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22000.00", + "openInterest": 1560, + "changeinOpenInterest": -130, + "pchangeinOpenInterest": -7.69230769230769, + "totalTradedVolume": 1067, + "impliedVolatility": 0, + "lastPrice": 1895.65, + "change": 544.55, + "pChange": 40.304196580564, + "totalBuyQuantity": 7450, + "totalSellQuantity": 7000, + "bidQty": 75, + "bidprice": 1899.65, + "askQty": 250, + "askPrice": 1911.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22000.00", + "openInterest": 229969, + "changeinOpenInterest": 64138, + "pchangeinOpenInterest": 38.6767250996496, + "totalTradedVolume": 1098157, + "impliedVolatility": 29.28, + "lastPrice": 3.55, + "change": -3.05, + "pChange": -46.2121212121212, + "totalBuyQuantity": 1458850, + "totalSellQuantity": 117150, + "bidQty": 225, + "bidprice": 3.5, + "askQty": 325, + "askPrice": 3.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22050, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22050.00", + "openInterest": 8676, + "changeinOpenInterest": -823, + "pchangeinOpenInterest": -8.66406990209496, + "totalTradedVolume": 166227, + "impliedVolatility": 28.54, + "lastPrice": 3.5, + "change": -3.6, + "pChange": -50.7042253521127, + "totalBuyQuantity": 104050, + "totalSellQuantity": 11450, + "bidQty": 225, + "bidprice": 3.45, + "askQty": 1250, + "askPrice": 3.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22050.00", + "openInterest": 5, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1483.1, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 1797.55, + "askQty": 625, + "askPrice": 1906.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22100, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22100.00", + "openInterest": 83, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 2.46913580246914, + "totalTradedVolume": 5, + "impliedVolatility": 0, + "lastPrice": 1809.7, + "change": 535, + "pChange": 41.9706597630815, + "totalBuyQuantity": 5700, + "totalSellQuantity": 5950, + "bidQty": 225, + "bidprice": 1749.5, + "askQty": 50, + "askPrice": 1823.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22100.00", + "openInterest": 40647, + "changeinOpenInterest": 20424, + "pchangeinOpenInterest": 100.993917816348, + "totalTradedVolume": 390397, + "impliedVolatility": 27.9, + "lastPrice": 3.55, + "change": -4.4, + "pChange": -55.3459119496855, + "totalBuyQuantity": 172575, + "totalSellQuantity": 12225, + "bidQty": 200, + "bidprice": 3.55, + "askQty": 625, + "askPrice": 3.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22150, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22150.00", + "openInterest": 8, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1196.35, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4950, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 1702.75, + "askQty": 625, + "askPrice": 1805.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22150.00", + "openInterest": 12825, + "changeinOpenInterest": 3634, + "pchangeinOpenInterest": 39.5386791426395, + "totalTradedVolume": 107828, + "impliedVolatility": 27.67, + "lastPrice": 4, + "change": -4.65, + "pChange": -53.757225433526, + "totalBuyQuantity": 104825, + "totalSellQuantity": 7525, + "bidQty": 125, + "bidprice": 3.85, + "askQty": 1125, + "askPrice": 4.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22200.00", + "openInterest": 111586, + "changeinOpenInterest": 52617, + "pchangeinOpenInterest": 89.2282385660262, + "totalTradedVolume": 710783, + "impliedVolatility": 26.92, + "lastPrice": 3.95, + "change": -5.6, + "pChange": -58.6387434554974, + "totalBuyQuantity": 114975, + "totalSellQuantity": 28875, + "bidQty": 50, + "bidprice": 3.95, + "askQty": 1125, + "askPrice": 4.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22200.00", + "openInterest": 42, + "changeinOpenInterest": 3, + "pchangeinOpenInterest": 7.69230769230769, + "totalTradedVolume": 4, + "impliedVolatility": 0, + "lastPrice": 1530, + "change": 368.9, + "pChange": 31.7715959004392, + "totalBuyQuantity": 5600, + "totalSellQuantity": 5950, + "bidQty": 75, + "bidprice": 1698.3, + "askQty": 100, + "askPrice": 1719.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22250, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22250.00", + "openInterest": 23354, + "changeinOpenInterest": 7360, + "pchangeinOpenInterest": 46.0172564711767, + "totalTradedVolume": 165455, + "impliedVolatility": 26.72, + "lastPrice": 4.5, + "change": -6.25, + "pChange": -58.1395348837209, + "totalBuyQuantity": 169450, + "totalSellQuantity": 24125, + "bidQty": 250, + "bidprice": 4.45, + "askQty": 525, + "askPrice": 4.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22250.00", + "openInterest": 10, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 1290.35, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 1775, + "bidprice": 1502.3, + "askQty": 1000, + "askPrice": 1716.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22300.00", + "openInterest": 142, + "changeinOpenInterest": 10, + "pchangeinOpenInterest": 7.57575757575758, + "totalTradedVolume": 45, + "impliedVolatility": 0, + "lastPrice": 1600, + "change": 538.15, + "pChange": 50.6804162546499, + "totalBuyQuantity": 5825, + "totalSellQuantity": 6050, + "bidQty": 275, + "bidprice": 1600.05, + "askQty": 900, + "askPrice": 1656.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22300.00", + "openInterest": 82519, + "changeinOpenInterest": 19315, + "pchangeinOpenInterest": 30.5597746978039, + "totalTradedVolume": 616706, + "impliedVolatility": 26.29, + "lastPrice": 4.85, + "change": -7.4, + "pChange": -60.4081632653061, + "totalBuyQuantity": 105100, + "totalSellQuantity": 25525, + "bidQty": 100, + "bidprice": 4.55, + "askQty": 1100, + "askPrice": 4.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22350.00", + "openInterest": 9141, + "changeinOpenInterest": -1037, + "pchangeinOpenInterest": -10.1886421693849, + "totalTradedVolume": 191795, + "impliedVolatility": 26.31, + "lastPrice": 5.85, + "change": -7.9, + "pChange": -57.4545454545455, + "totalBuyQuantity": 86650, + "totalSellQuantity": 18975, + "bidQty": 1175, + "bidprice": 5, + "askQty": 1125, + "askPrice": 5.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22350.00", + "openInterest": 6, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 0, + "lastPrice": 1444.15, + "change": 424.65, + "pChange": 41.6527709661599, + "totalBuyQuantity": 5050, + "totalSellQuantity": 5025, + "bidQty": 100, + "bidprice": 1537.8, + "askQty": 100, + "askPrice": 1571.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22400, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22400.00", + "openInterest": 82588, + "changeinOpenInterest": 31251, + "pchangeinOpenInterest": 60.8742232697664, + "totalTradedVolume": 699939, + "impliedVolatility": 25.2, + "lastPrice": 5.3, + "change": -10.3, + "pChange": -66.025641025641, + "totalBuyQuantity": 83525, + "totalSellQuantity": 36175, + "bidQty": 250, + "bidprice": 5.3, + "askQty": 1150, + "askPrice": 6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22400.00", + "openInterest": 210, + "changeinOpenInterest": 33, + "pchangeinOpenInterest": 18.6440677966102, + "totalTradedVolume": 222, + "impliedVolatility": 0, + "lastPrice": 1476.45, + "change": 513.8, + "pChange": 53.3735002337298, + "totalBuyQuantity": 5850, + "totalSellQuantity": 5225, + "bidQty": 150, + "bidprice": 1501.1, + "askQty": 50, + "askPrice": 1514.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22450, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22450.00", + "openInterest": 30606, + "changeinOpenInterest": 22246, + "pchangeinOpenInterest": 266.1004784689, + "totalTradedVolume": 303692, + "impliedVolatility": 24.72, + "lastPrice": 5.65, + "change": -11.85, + "pChange": -67.7142857142857, + "totalBuyQuantity": 92150, + "totalSellQuantity": 32950, + "bidQty": 50, + "bidprice": 5.65, + "askQty": 1000, + "askPrice": 6.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22450.00", + "openInterest": 655, + "changeinOpenInterest": -2, + "pchangeinOpenInterest": -0.30441400304414, + "totalTradedVolume": 90, + "impliedVolatility": 0, + "lastPrice": 1463.3, + "change": 543.9, + "pChange": 59.1581466173591, + "totalBuyQuantity": 5375, + "totalSellQuantity": 5325, + "bidQty": 25, + "bidprice": 1439.85, + "askQty": 75, + "askPrice": 1474.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22500, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22500.00", + "openInterest": 266048, + "changeinOpenInterest": 63660, + "pchangeinOpenInterest": 31.4544340573552, + "totalTradedVolume": 1400953, + "impliedVolatility": 24.82, + "lastPrice": 7, + "change": -13.35, + "pChange": -65.6019656019656, + "totalBuyQuantity": 908200, + "totalSellQuantity": 137075, + "bidQty": 8900, + "bidprice": 7, + "askQty": 50, + "askPrice": 7.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22500.00", + "openInterest": 17574, + "changeinOpenInterest": -2465, + "pchangeinOpenInterest": -12.301013024602, + "totalTradedVolume": 6780, + "impliedVolatility": 0, + "lastPrice": 1405, + "change": 541.8, + "pChange": 62.7664504170528, + "totalBuyQuantity": 10075, + "totalSellQuantity": 7175, + "bidQty": 50, + "bidprice": 1403.8, + "askQty": 75, + "askPrice": 1415.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22550, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22550.00", + "openInterest": 2978, + "changeinOpenInterest": 48, + "pchangeinOpenInterest": 1.6382252559727, + "totalTradedVolume": 171, + "impliedVolatility": 0, + "lastPrice": 1353.95, + "change": 525.55, + "pChange": 63.4415741187832, + "totalBuyQuantity": 7750, + "totalSellQuantity": 7150, + "bidQty": 150, + "bidprice": 1354.55, + "askQty": 150, + "askPrice": 1368.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22550.00", + "openInterest": 21505, + "changeinOpenInterest": 12363, + "pchangeinOpenInterest": 135.232990592868, + "totalTradedVolume": 289413, + "impliedVolatility": 24.29, + "lastPrice": 7.4, + "change": -15.75, + "pChange": -68.0345572354212, + "totalBuyQuantity": 78925, + "totalSellQuantity": 27200, + "bidQty": 25, + "bidprice": 7.65, + "askQty": 1000, + "askPrice": 8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22600, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22600.00", + "openInterest": 81478, + "changeinOpenInterest": 44424, + "pchangeinOpenInterest": 119.889890430183, + "totalTradedVolume": 821226, + "impliedVolatility": 24.07, + "lastPrice": 8.45, + "change": -18.15, + "pChange": -68.2330827067669, + "totalBuyQuantity": 81225, + "totalSellQuantity": 36500, + "bidQty": 1500, + "bidprice": 8.35, + "askQty": 550, + "askPrice": 8.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22600.00", + "openInterest": 669, + "changeinOpenInterest": -196, + "pchangeinOpenInterest": -22.6589595375723, + "totalTradedVolume": 1243, + "impliedVolatility": 0, + "lastPrice": 1303.5, + "change": 531.95, + "pChange": 68.9456289287797, + "totalBuyQuantity": 12050, + "totalSellQuantity": 8750, + "bidQty": 150, + "bidprice": 1306.05, + "askQty": 25, + "askPrice": 1316.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22650, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22650.00", + "openInterest": 470, + "changeinOpenInterest": 21, + "pchangeinOpenInterest": 4.67706013363029, + "totalTradedVolume": 177, + "impliedVolatility": 0, + "lastPrice": 1232.55, + "change": 500.95, + "pChange": 68.4732094040459, + "totalBuyQuantity": 8200, + "totalSellQuantity": 6175, + "bidQty": 50, + "bidprice": 1256.5, + "askQty": 50, + "askPrice": 1267.7, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22650.00", + "openInterest": 41599, + "changeinOpenInterest": 30918, + "pchangeinOpenInterest": 289.467278344724, + "totalTradedVolume": 439130, + "impliedVolatility": 23.79, + "lastPrice": 9.5, + "change": -20.9, + "pChange": -68.75, + "totalBuyQuantity": 77250, + "totalSellQuantity": 38300, + "bidQty": 1875, + "bidprice": 9.5, + "askQty": 1000, + "askPrice": 9.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22700, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22700.00", + "openInterest": 314, + "changeinOpenInterest": -33, + "pchangeinOpenInterest": -9.51008645533141, + "totalTradedVolume": 739, + "impliedVolatility": 0, + "lastPrice": 1198.65, + "change": 518.9, + "pChange": 76.3368885619713, + "totalBuyQuantity": 8800, + "totalSellQuantity": 7875, + "bidQty": 175, + "bidprice": 1209, + "askQty": 1800, + "askPrice": 1222.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22700.00", + "openInterest": 92963, + "changeinOpenInterest": 32670, + "pchangeinOpenInterest": 54.1853946560961, + "totalTradedVolume": 982139, + "impliedVolatility": 23.63, + "lastPrice": 11, + "change": -24.1, + "pChange": -68.6609686609687, + "totalBuyQuantity": 91725, + "totalSellQuantity": 48125, + "bidQty": 50, + "bidprice": 10.5, + "askQty": 1000, + "askPrice": 10.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22750, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22750.00", + "openInterest": 38866, + "changeinOpenInterest": 24284, + "pchangeinOpenInterest": 166.534083116171, + "totalTradedVolume": 433621, + "impliedVolatility": 23.47, + "lastPrice": 12.7, + "change": -27.6, + "pChange": -68.4863523573201, + "totalBuyQuantity": 81075, + "totalSellQuantity": 26675, + "bidQty": 125, + "bidprice": 12.15, + "askQty": 1000, + "askPrice": 12.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22750.00", + "openInterest": 658, + "changeinOpenInterest": -24, + "pchangeinOpenInterest": -3.51906158357771, + "totalTradedVolume": 328, + "impliedVolatility": 0, + "lastPrice": 1144.8, + "change": 516.75, + "pChange": 82.2784810126582, + "totalBuyQuantity": 10400, + "totalSellQuantity": 7150, + "bidQty": 1800, + "bidprice": 1159.2, + "askQty": 1800, + "askPrice": 1172.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22800, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22800.00", + "openInterest": 1789, + "changeinOpenInterest": 244, + "pchangeinOpenInterest": 15.7928802588997, + "totalTradedVolume": 3072, + "impliedVolatility": 0, + "lastPrice": 1105, + "change": 508.8, + "pChange": 85.340489768534, + "totalBuyQuantity": 13125, + "totalSellQuantity": 9500, + "bidQty": 1800, + "bidprice": 1111.2, + "askQty": 1800, + "askPrice": 1121.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22800.00", + "openInterest": 85464, + "changeinOpenInterest": 3052, + "pchangeinOpenInterest": 3.70334417317866, + "totalTradedVolume": 977648, + "impliedVolatility": 22.92, + "lastPrice": 13.5, + "change": -32.8, + "pChange": -70.8423326133909, + "totalBuyQuantity": 92700, + "totalSellQuantity": 53425, + "bidQty": 850, + "bidprice": 13.5, + "askQty": 675, + "askPrice": 13.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22850, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 22850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22850.00", + "openInterest": 1094, + "changeinOpenInterest": -58, + "pchangeinOpenInterest": -5.03472222222222, + "totalTradedVolume": 749, + "impliedVolatility": 0, + "lastPrice": 1045, + "change": 500.55, + "pChange": 91.9368169712554, + "totalBuyQuantity": 11950, + "totalSellQuantity": 6450, + "bidQty": 175, + "bidprice": 1063.35, + "askQty": 175, + "askPrice": 1075.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 22850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22850.00", + "openInterest": 19392, + "changeinOpenInterest": 7144, + "pchangeinOpenInterest": 58.3278902677988, + "totalTradedVolume": 363965, + "impliedVolatility": 22.62, + "lastPrice": 15.15, + "change": -38.05, + "pChange": -71.5225563909774, + "totalBuyQuantity": 73900, + "totalSellQuantity": 31475, + "bidQty": 50, + "bidprice": 14.3, + "askQty": 200, + "askPrice": 15.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22900.00", + "openInterest": 100159, + "changeinOpenInterest": 36565, + "pchangeinOpenInterest": 57.4975626631443, + "totalTradedVolume": 961386, + "impliedVolatility": 22.12, + "lastPrice": 16.3, + "change": -45.15, + "pChange": -73.4743694060212, + "totalBuyQuantity": 85775, + "totalSellQuantity": 59025, + "bidQty": 3800, + "bidprice": 16.1, + "askQty": 1725, + "askPrice": 16.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22900.00", + "openInterest": 848, + "changeinOpenInterest": -122, + "pchangeinOpenInterest": -12.5773195876289, + "totalTradedVolume": 2947, + "impliedVolatility": 0, + "lastPrice": 1010, + "change": 500.9, + "pChange": 98.3893144765272, + "totalBuyQuantity": 17425, + "totalSellQuantity": 10075, + "bidQty": 600, + "bidprice": 1014, + "askQty": 1800, + "askPrice": 1027.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 22950, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 22950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE22950.00", + "openInterest": 37047, + "changeinOpenInterest": 23043, + "pchangeinOpenInterest": 164.545844044559, + "totalTradedVolume": 470638, + "impliedVolatility": 21.94, + "lastPrice": 18.8, + "change": -50.65, + "pChange": -72.9301655867531, + "totalBuyQuantity": 75525, + "totalSellQuantity": 39125, + "bidQty": 700, + "bidprice": 18, + "askQty": 1000, + "askPrice": 18.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 22950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE22950.00", + "openInterest": 709, + "changeinOpenInterest": -93, + "pchangeinOpenInterest": -11.5960099750623, + "totalTradedVolume": 1268, + "impliedVolatility": 0, + "lastPrice": 963.35, + "change": 497.25, + "pChange": 106.683115211328, + "totalBuyQuantity": 176625, + "totalSellQuantity": 8900, + "bidQty": 175, + "bidprice": 966.85, + "askQty": 1800, + "askPrice": 977.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23000, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23000.00", + "openInterest": 39085, + "changeinOpenInterest": -4108, + "pchangeinOpenInterest": -9.51080036116963, + "totalTradedVolume": 75959, + "impliedVolatility": 0, + "lastPrice": 918.25, + "change": 493.05, + "pChange": 115.957196613358, + "totalBuyQuantity": 183900, + "totalSellQuantity": 13325, + "bidQty": 1800, + "bidprice": 919.35, + "askQty": 1800, + "askPrice": 928.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23000.00", + "openInterest": 283955, + "changeinOpenInterest": 63506, + "pchangeinOpenInterest": 28.8075700048537, + "totalTradedVolume": 2107105, + "impliedVolatility": 21.65, + "lastPrice": 21.2, + "change": -58.75, + "pChange": -73.4834271419637, + "totalBuyQuantity": 82450, + "totalSellQuantity": 522000, + "bidQty": 50, + "bidprice": 20.75, + "askQty": 425, + "askPrice": 21.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23050, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23050.00", + "openInterest": 1436, + "changeinOpenInterest": -52, + "pchangeinOpenInterest": -3.49462365591398, + "totalTradedVolume": 5866, + "impliedVolatility": 0, + "lastPrice": 857.9, + "change": 467.7, + "pChange": 119.861609431061, + "totalBuyQuantity": 104400, + "totalSellQuantity": 7400, + "bidQty": 175, + "bidprice": 872.35, + "askQty": 100, + "askPrice": 882.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23050.00", + "openInterest": 35884, + "changeinOpenInterest": 23339, + "pchangeinOpenInterest": 186.042247907533, + "totalTradedVolume": 532282, + "impliedVolatility": 21.16, + "lastPrice": 23, + "change": -67.9, + "pChange": -74.6974697469747, + "totalBuyQuantity": 15225, + "totalSellQuantity": 96275, + "bidQty": 2250, + "bidprice": 23, + "askQty": 1000, + "askPrice": 23.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23100, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23100.00", + "openInterest": 99867, + "changeinOpenInterest": 35212, + "pchangeinOpenInterest": 54.4613718969917, + "totalTradedVolume": 1149061, + "impliedVolatility": 20.98, + "lastPrice": 26.5, + "change": -77.15, + "pChange": -74.433188615533, + "totalBuyQuantity": 23550, + "totalSellQuantity": 126450, + "bidQty": 1200, + "bidprice": 26, + "askQty": 1000, + "askPrice": 27.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23100.00", + "openInterest": 6532, + "changeinOpenInterest": -2768, + "pchangeinOpenInterest": -29.7634408602151, + "totalTradedVolume": 31498, + "impliedVolatility": 0, + "lastPrice": 827.55, + "change": 476, + "pChange": 135.400369790926, + "totalBuyQuantity": 36575, + "totalSellQuantity": 9200, + "bidQty": 175, + "bidprice": 825.8, + "askQty": 1800, + "askPrice": 835.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23150, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23150.00", + "openInterest": 23616, + "changeinOpenInterest": 6563, + "pchangeinOpenInterest": 38.4858969096347, + "totalTradedVolume": 613793, + "impliedVolatility": 20.63, + "lastPrice": 29.6, + "change": -87.35, + "pChange": -74.690038477982, + "totalBuyQuantity": 16850, + "totalSellQuantity": 74100, + "bidQty": 1425, + "bidprice": 29.6, + "askQty": 1000, + "askPrice": 30.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23150.00", + "openInterest": 3157, + "changeinOpenInterest": -306, + "pchangeinOpenInterest": -8.83626913081144, + "totalTradedVolume": 16325, + "impliedVolatility": 0, + "lastPrice": 779.45, + "change": 465.1, + "pChange": 147.956099888659, + "totalBuyQuantity": 32850, + "totalSellQuantity": 9200, + "bidQty": 600, + "bidprice": 779, + "askQty": 1800, + "askPrice": 788.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23200, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23200.00", + "openInterest": 14620, + "changeinOpenInterest": -6747, + "pchangeinOpenInterest": -31.5767304722235, + "totalTradedVolume": 141244, + "impliedVolatility": 0, + "lastPrice": 733.4, + "change": 452.6, + "pChange": 161.182336182336, + "totalBuyQuantity": 41800, + "totalSellQuantity": 11500, + "bidQty": 50, + "bidprice": 733.1, + "askQty": 600, + "askPrice": 742.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23200.00", + "openInterest": 136799, + "changeinOpenInterest": 37683, + "pchangeinOpenInterest": 38.0190887445014, + "totalTradedVolume": 1653128, + "impliedVolatility": 20.44, + "lastPrice": 34, + "change": -99, + "pChange": -74.4360902255639, + "totalBuyQuantity": 27100, + "totalSellQuantity": 190275, + "bidQty": 25, + "bidprice": 33.15, + "askQty": 250, + "askPrice": 34, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23250, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23250.00", + "openInterest": 6124, + "changeinOpenInterest": -1808, + "pchangeinOpenInterest": -22.7937468482098, + "totalTradedVolume": 56069, + "impliedVolatility": 0, + "lastPrice": 685.7, + "change": 437.35, + "pChange": 176.1022750151, + "totalBuyQuantity": 22600, + "totalSellQuantity": 9475, + "bidQty": 600, + "bidprice": 687.8, + "askQty": 1800, + "askPrice": 696.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23250.00", + "openInterest": 38966, + "changeinOpenInterest": 18394, + "pchangeinOpenInterest": 89.4127940890531, + "totalTradedVolume": 761718, + "impliedVolatility": 20.25, + "lastPrice": 39, + "change": -111.35, + "pChange": -74.0605254406385, + "totalBuyQuantity": 9025, + "totalSellQuantity": 86125, + "bidQty": 25, + "bidprice": 38, + "askQty": 1250, + "askPrice": 39, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23300.00", + "openInterest": 44881, + "changeinOpenInterest": -60593, + "pchangeinOpenInterest": -57.4482810929708, + "totalTradedVolume": 606621, + "impliedVolatility": 0, + "lastPrice": 644.25, + "change": 428.3, + "pChange": 198.332947441537, + "totalBuyQuantity": 65075, + "totalSellQuantity": 52225, + "bidQty": 25, + "bidprice": 643.8, + "askQty": 25, + "askPrice": 650.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23300.00", + "openInterest": 157849, + "changeinOpenInterest": 6783, + "pchangeinOpenInterest": 4.49009042405306, + "totalTradedVolume": 2216083, + "impliedVolatility": 19.88, + "lastPrice": 43.4, + "change": -127.5, + "pChange": -74.6050321825629, + "totalBuyQuantity": 45725, + "totalSellQuantity": 367525, + "bidQty": 50, + "bidprice": 42.75, + "askQty": 1000, + "askPrice": 43.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23350.00", + "openInterest": 61717, + "changeinOpenInterest": 4977, + "pchangeinOpenInterest": 8.77158970743743, + "totalTradedVolume": 999230, + "impliedVolatility": 19.66, + "lastPrice": 49.5, + "change": -143.25, + "pChange": -74.3190661478599, + "totalBuyQuantity": 15775, + "totalSellQuantity": 156225, + "bidQty": 100, + "bidprice": 48, + "askQty": 1575, + "askPrice": 49.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23350.00", + "openInterest": 34510, + "changeinOpenInterest": -22464, + "pchangeinOpenInterest": -39.428511250746, + "totalTradedVolume": 353535, + "impliedVolatility": 11.66, + "lastPrice": 602.25, + "change": 413.95, + "pChange": 219.835369091875, + "totalBuyQuantity": 28450, + "totalSellQuantity": 9750, + "bidQty": 175, + "bidprice": 598.9, + "askQty": 1800, + "askPrice": 607.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23400, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23400.00", + "openInterest": 174634, + "changeinOpenInterest": 50682, + "pchangeinOpenInterest": 40.8884084161611, + "totalTradedVolume": 2832696, + "impliedVolatility": 19.28, + "lastPrice": 55.1, + "change": -160.35, + "pChange": -74.4256207936876, + "totalBuyQuantity": 45550, + "totalSellQuantity": 417650, + "bidQty": 25, + "bidprice": 55.15, + "askQty": 1000, + "askPrice": 55.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23400.00", + "openInterest": 67013, + "changeinOpenInterest": -44812, + "pchangeinOpenInterest": -40.0733288620613, + "totalTradedVolume": 1487702, + "impliedVolatility": 11.75, + "lastPrice": 555.35, + "change": 393.25, + "pChange": 242.597162245527, + "totalBuyQuantity": 47300, + "totalSellQuantity": 11700, + "bidQty": 25, + "bidprice": 555.35, + "askQty": 1800, + "askPrice": 562.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23450, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23450.00", + "openInterest": 30613, + "changeinOpenInterest": 9311, + "pchangeinOpenInterest": 43.7095108440522, + "totalTradedVolume": 948477, + "impliedVolatility": 12.78, + "lastPrice": 514.2, + "change": 374.6, + "pChange": 268.338108882522, + "totalBuyQuantity": 27550, + "totalSellQuantity": 7650, + "bidQty": 600, + "bidprice": 512.55, + "askQty": 25, + "askPrice": 518.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23450.00", + "openInterest": 57613, + "changeinOpenInterest": 43571, + "pchangeinOpenInterest": 310.290556900726, + "totalTradedVolume": 1371396, + "impliedVolatility": 19.15, + "lastPrice": 63.5, + "change": -177.8, + "pChange": -73.6842105263158, + "totalBuyQuantity": 18425, + "totalSellQuantity": 171775, + "bidQty": 1900, + "bidprice": 62, + "askQty": 25, + "askPrice": 63.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23500, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23500.00", + "openInterest": 307822, + "changeinOpenInterest": 154879, + "pchangeinOpenInterest": 101.265831061245, + "totalTradedVolume": 4386764, + "impliedVolatility": 18.78, + "lastPrice": 70.75, + "change": -198.6, + "pChange": -73.7330610729534, + "totalBuyQuantity": 498925, + "totalSellQuantity": 717500, + "bidQty": 775, + "bidprice": 69.2, + "askQty": 275, + "askPrice": 70.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23500.00", + "openInterest": 121711, + "changeinOpenInterest": -50772, + "pchangeinOpenInterest": -29.4359444119131, + "totalTradedVolume": 3718750, + "impliedVolatility": 13.06, + "lastPrice": 471.8, + "change": 355, + "pChange": 303.938356164384, + "totalBuyQuantity": 139625, + "totalSellQuantity": 24725, + "bidQty": 1800, + "bidprice": 471.6, + "askQty": 600, + "askPrice": 477.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23550, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23550.00", + "openInterest": 29696, + "changeinOpenInterest": 5923, + "pchangeinOpenInterest": 24.9148193328566, + "totalTradedVolume": 1632316, + "impliedVolatility": 13.52, + "lastPrice": 432.65, + "change": 334.95, + "pChange": 342.835209825998, + "totalBuyQuantity": 28350, + "totalSellQuantity": 11375, + "bidQty": 200, + "bidprice": 432.65, + "askQty": 600, + "askPrice": 438.4, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23550.00", + "openInterest": 61518, + "changeinOpenInterest": 49050, + "pchangeinOpenInterest": 393.407122232916, + "totalTradedVolume": 1450609, + "impliedVolatility": 18.42, + "lastPrice": 79, + "change": -218.35, + "pChange": -73.431982512191, + "totalBuyQuantity": 18800, + "totalSellQuantity": 223500, + "bidQty": 1000, + "bidprice": 77.7, + "askQty": 1025, + "askPrice": 80.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23600, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23600.00", + "openInterest": 71678, + "changeinOpenInterest": -32631, + "pchangeinOpenInterest": -31.2830148884564, + "totalTradedVolume": 3036181, + "impliedVolatility": 14.17, + "lastPrice": 397.6, + "change": 317.5, + "pChange": 396.379525593009, + "totalBuyQuantity": 67475, + "totalSellQuantity": 15850, + "bidQty": 600, + "bidprice": 392, + "askQty": 75, + "askPrice": 398.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23600.00", + "openInterest": 158077, + "changeinOpenInterest": 97365, + "pchangeinOpenInterest": 160.371919884043, + "totalTradedVolume": 2356407, + "impliedVolatility": 18.31, + "lastPrice": 90.8, + "change": -240.35, + "pChange": -72.580401630681, + "totalBuyQuantity": 47750, + "totalSellQuantity": 339150, + "bidQty": 150, + "bidprice": 89.55, + "askQty": 950, + "askPrice": 90.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23650, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23650.00", + "openInterest": 43355, + "changeinOpenInterest": 35670, + "pchangeinOpenInterest": 464.150943396226, + "totalTradedVolume": 912111, + "impliedVolatility": 17.92, + "lastPrice": 101, + "change": -264.8, + "pChange": -72.3892837616184, + "totalBuyQuantity": 21150, + "totalSellQuantity": 130275, + "bidQty": 1000, + "bidprice": 101.2, + "askQty": 1000, + "askPrice": 102.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23650.00", + "openInterest": 18407, + "changeinOpenInterest": -6105, + "pchangeinOpenInterest": -24.9061684073107, + "totalTradedVolume": 1360939, + "impliedVolatility": 13.78, + "lastPrice": 355.55, + "change": 289.9, + "pChange": 441.584158415842, + "totalBuyQuantity": 25450, + "totalSellQuantity": 6400, + "bidQty": 250, + "bidprice": 352.25, + "askQty": 25, + "askPrice": 358, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23700, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23700.00", + "openInterest": 71414, + "changeinOpenInterest": -46099, + "pchangeinOpenInterest": -39.228851276029, + "totalTradedVolume": 3142425, + "impliedVolatility": 14.08, + "lastPrice": 321.75, + "change": 268.95, + "pChange": 509.375, + "totalBuyQuantity": 89500, + "totalSellQuantity": 25100, + "bidQty": 600, + "bidprice": 317.25, + "askQty": 100, + "askPrice": 322.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23700.00", + "openInterest": 136308, + "changeinOpenInterest": 86174, + "pchangeinOpenInterest": 171.887341923645, + "totalTradedVolume": 1848835, + "impliedVolatility": 17.74, + "lastPrice": 114.65, + "change": -288.9, + "pChange": -71.58964192789, + "totalBuyQuantity": 945200, + "totalSellQuantity": 352475, + "bidQty": 50, + "bidprice": 114.65, + "askQty": 600, + "askPrice": 116, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23750.00", + "openInterest": 36581, + "changeinOpenInterest": 5728, + "pchangeinOpenInterest": 18.5654555472726, + "totalTradedVolume": 1352202, + "impliedVolatility": 13.74, + "lastPrice": 283.5, + "change": 240.75, + "pChange": 563.157894736842, + "totalBuyQuantity": 43550, + "totalSellQuantity": 8425, + "bidQty": 25, + "bidprice": 283.55, + "askQty": 1050, + "askPrice": 286.05, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23750.00", + "openInterest": 31588, + "changeinOpenInterest": 23888, + "pchangeinOpenInterest": 310.233766233766, + "totalTradedVolume": 575241, + "impliedVolatility": 17.77, + "lastPrice": 132.3, + "change": -314.45, + "pChange": -70.3861219921656, + "totalBuyQuantity": 652825, + "totalSellQuantity": 80400, + "bidQty": 200, + "bidprice": 130.05, + "askQty": 1000, + "askPrice": 131.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23800, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23800.00", + "openInterest": 126524, + "changeinOpenInterest": -15202, + "pchangeinOpenInterest": -10.7263310895672, + "totalTradedVolume": 3052931, + "impliedVolatility": 13.68, + "lastPrice": 250, + "change": 216.3, + "pChange": 641.839762611276, + "totalBuyQuantity": 310525, + "totalSellQuantity": 104725, + "bidQty": 675, + "bidprice": 249, + "askQty": 25, + "askPrice": 253, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23800.00", + "openInterest": 108627, + "changeinOpenInterest": 58584, + "pchangeinOpenInterest": 117.067322102991, + "totalTradedVolume": 1231331, + "impliedVolatility": 17.43, + "lastPrice": 147.25, + "change": -338.2, + "pChange": -69.6673189823875, + "totalBuyQuantity": 938000, + "totalSellQuantity": 182950, + "bidQty": 1000, + "bidprice": 145.6, + "askQty": 25, + "askPrice": 147, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23850, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23850.00", + "openInterest": 31771, + "changeinOpenInterest": 29079, + "pchangeinOpenInterest": 1080.20059435364, + "totalTradedVolume": 560728, + "impliedVolatility": 17.2, + "lastPrice": 165.2, + "change": -366.45, + "pChange": -68.9269256089533, + "totalBuyQuantity": 471250, + "totalSellQuantity": 76850, + "bidQty": 125, + "bidprice": 164, + "askQty": 1000, + "askPrice": 166.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23850.00", + "openInterest": 43517, + "changeinOpenInterest": 20915, + "pchangeinOpenInterest": 92.5360587558623, + "totalTradedVolume": 1436088, + "impliedVolatility": 13.83, + "lastPrice": 221.3, + "change": 194.3, + "pChange": 719.62962962963, + "totalBuyQuantity": 66125, + "totalSellQuantity": 19575, + "bidQty": 75, + "bidprice": 218.45, + "askQty": 600, + "askPrice": 222, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 23900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23900.00", + "openInterest": 116796, + "changeinOpenInterest": 96046, + "pchangeinOpenInterest": 462.872289156627, + "totalTradedVolume": 943596, + "impliedVolatility": 17.23, + "lastPrice": 188, + "change": -388.45, + "pChange": -67.38659033741, + "totalBuyQuantity": 587475, + "totalSellQuantity": 115450, + "bidQty": 150, + "bidprice": 185.55, + "askQty": 25, + "askPrice": 187.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 23900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23900.00", + "openInterest": 170415, + "changeinOpenInterest": 88904, + "pchangeinOpenInterest": 109.069941480291, + "totalTradedVolume": 2844722, + "impliedVolatility": 13.56, + "lastPrice": 190, + "change": 168.75, + "pChange": 794.117647058824, + "totalBuyQuantity": 438475, + "totalSellQuantity": 74400, + "bidQty": 125, + "bidprice": 189.45, + "askQty": 600, + "askPrice": 192.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 23950, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 23950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE23950.00", + "openInterest": 37012, + "changeinOpenInterest": 17673, + "pchangeinOpenInterest": 91.3852836237655, + "totalTradedVolume": 1282888, + "impliedVolatility": 13.63, + "lastPrice": 165, + "change": 147.75, + "pChange": 856.521739130435, + "totalBuyQuantity": 103775, + "totalSellQuantity": 43925, + "bidQty": 1000, + "bidprice": 163, + "askQty": 1000, + "askPrice": 164.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 23950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE23950.00", + "openInterest": 15114, + "changeinOpenInterest": 12674, + "pchangeinOpenInterest": 519.426229508197, + "totalTradedVolume": 201951, + "impliedVolatility": 16.94, + "lastPrice": 208.9, + "change": -412.55, + "pChange": -66.3850671815915, + "totalBuyQuantity": 21650, + "totalSellQuantity": 23575, + "bidQty": 25, + "bidprice": 208.4, + "askQty": 600, + "askPrice": 211.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24000, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24000.00", + "openInterest": 119938, + "changeinOpenInterest": 37810, + "pchangeinOpenInterest": 46.0378920709137, + "totalTradedVolume": 625011, + "impliedVolatility": 16.76, + "lastPrice": 233, + "change": -428.6, + "pChange": -64.782345828295, + "totalBuyQuantity": 131225, + "totalSellQuantity": 97900, + "bidQty": 150, + "bidprice": 233.05, + "askQty": 150, + "askPrice": 236.3, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24000.00", + "openInterest": 219128, + "changeinOpenInterest": -32645, + "pchangeinOpenInterest": -12.966044810206, + "totalTradedVolume": 4489548, + "impliedVolatility": 13.52, + "lastPrice": 140.25, + "change": 126.15, + "pChange": 894.68085106383, + "totalBuyQuantity": 928375, + "totalSellQuantity": 225675, + "bidQty": 25, + "bidprice": 140.2, + "askQty": 600, + "askPrice": 141.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24050, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24050.00", + "openInterest": 32013, + "changeinOpenInterest": 13066, + "pchangeinOpenInterest": 68.960785348604, + "totalTradedVolume": 1087937, + "impliedVolatility": 13.3, + "lastPrice": 116.5, + "change": 105.35, + "pChange": 944.843049327354, + "totalBuyQuantity": 347900, + "totalSellQuantity": 28775, + "bidQty": 1000, + "bidprice": 116.55, + "askQty": 350, + "askPrice": 119.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24050.00", + "openInterest": 7475, + "changeinOpenInterest": 6243, + "pchangeinOpenInterest": 506.737012987013, + "totalTradedVolume": 40872, + "impliedVolatility": 17.15, + "lastPrice": 265.8, + "change": -444.7, + "pChange": -62.5897255453906, + "totalBuyQuantity": 10275, + "totalSellQuantity": 14925, + "bidQty": 275, + "bidprice": 257.85, + "askQty": 350, + "askPrice": 266.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24100, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24100.00", + "openInterest": 26671, + "changeinOpenInterest": 7724, + "pchangeinOpenInterest": 40.766348234549, + "totalTradedVolume": 79368, + "impliedVolatility": 16.76, + "lastPrice": 291.2, + "change": -468.55, + "pChange": -61.6716025008226, + "totalBuyQuantity": 11950, + "totalSellQuantity": 20625, + "bidQty": 225, + "bidprice": 289.05, + "askQty": 1000, + "askPrice": 294.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24100.00", + "openInterest": 100863, + "changeinOpenInterest": 3044, + "pchangeinOpenInterest": 3.11186988212924, + "totalTradedVolume": 2204389, + "impliedVolatility": 13.27, + "lastPrice": 97.55, + "change": 88.5, + "pChange": 977.900552486188, + "totalBuyQuantity": 351950, + "totalSellQuantity": 65450, + "bidQty": 1075, + "bidprice": 97.3, + "askQty": 1000, + "askPrice": 99, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24150, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24150.00", + "openInterest": 3780, + "changeinOpenInterest": 2066, + "pchangeinOpenInterest": 120.536756126021, + "totalTradedVolume": 16792, + "impliedVolatility": 16.82, + "lastPrice": 323.8, + "change": -482.75, + "pChange": -59.8536978488624, + "totalBuyQuantity": 4550, + "totalSellQuantity": 10650, + "bidQty": 225, + "bidprice": 321.5, + "askQty": 300, + "askPrice": 329.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24150.00", + "openInterest": 35622, + "changeinOpenInterest": 15452, + "pchangeinOpenInterest": 76.6088249876054, + "totalTradedVolume": 1080400, + "impliedVolatility": 13.35, + "lastPrice": 82, + "change": 74.55, + "pChange": 1000.6711409396, + "totalBuyQuantity": 110975, + "totalSellQuantity": 40300, + "bidQty": 1000, + "bidprice": 80.4, + "askQty": 1000, + "askPrice": 81.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24200.00", + "openInterest": 45900, + "changeinOpenInterest": -927, + "pchangeinOpenInterest": -1.97962713818951, + "totalTradedVolume": 55405, + "impliedVolatility": 17.06, + "lastPrice": 360, + "change": -496.1, + "pChange": -57.948837752599, + "totalBuyQuantity": 10225, + "totalSellQuantity": 18800, + "bidQty": 1250, + "bidprice": 355.5, + "askQty": 600, + "askPrice": 364.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24200.00", + "openInterest": 149328, + "changeinOpenInterest": 18104, + "pchangeinOpenInterest": 13.7962567822959, + "totalTradedVolume": 2549995, + "impliedVolatility": 13.31, + "lastPrice": 67.25, + "change": 60.85, + "pChange": 950.78125, + "totalBuyQuantity": 578425, + "totalSellQuantity": 101800, + "bidQty": 600, + "bidprice": 66, + "askQty": 25, + "askPrice": 67.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24250, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24250.00", + "openInterest": 35523, + "changeinOpenInterest": 14802, + "pchangeinOpenInterest": 71.4347763138845, + "totalTradedVolume": 1121664, + "impliedVolatility": 13.09, + "lastPrice": 52.95, + "change": 47.55, + "pChange": 880.555555555556, + "totalBuyQuantity": 125400, + "totalSellQuantity": 22025, + "bidQty": 1600, + "bidprice": 52.95, + "askQty": 1000, + "askPrice": 53.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24250.00", + "openInterest": 2177, + "changeinOpenInterest": 48, + "pchangeinOpenInterest": 2.25457961484265, + "totalTradedVolume": 3440, + "impliedVolatility": 17.93, + "lastPrice": 404.4, + "change": -513.15, + "pChange": -55.9261075690698, + "totalBuyQuantity": 8800, + "totalSellQuantity": 10000, + "bidQty": 600, + "bidprice": 396, + "askQty": 600, + "askPrice": 401.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24300, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24300.00", + "openInterest": 51022, + "changeinOpenInterest": -615, + "pchangeinOpenInterest": -1.19100644886419, + "totalTradedVolume": 16781, + "impliedVolatility": 17.34, + "lastPrice": 434.75, + "change": -515.5, + "pChange": -54.2488818731913, + "totalBuyQuantity": 10000, + "totalSellQuantity": 14525, + "bidQty": 600, + "bidprice": 435.2, + "askQty": 600, + "askPrice": 441.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24300.00", + "openInterest": 152231, + "changeinOpenInterest": 36492, + "pchangeinOpenInterest": 31.5295622046156, + "totalTradedVolume": 1833866, + "impliedVolatility": 13.13, + "lastPrice": 43, + "change": 38.25, + "pChange": 805.263157894737, + "totalBuyQuantity": 488025, + "totalSellQuantity": 83250, + "bidQty": 1750, + "bidprice": 42.5, + "askQty": 3275, + "askPrice": 43, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24350.00", + "openInterest": 1485, + "changeinOpenInterest": 25, + "pchangeinOpenInterest": 1.71232876712329, + "totalTradedVolume": 739, + "impliedVolatility": 18.62, + "lastPrice": 485, + "change": -531.9, + "pChange": -52.3060281246927, + "totalBuyQuantity": 9475, + "totalSellQuantity": 10575, + "bidQty": 600, + "bidprice": 476.1, + "askQty": 600, + "askPrice": 484.2, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24350.00", + "openInterest": 24739, + "changeinOpenInterest": 12364, + "pchangeinOpenInterest": 99.9111111111111, + "totalTradedVolume": 885552, + "impliedVolatility": 13.06, + "lastPrice": 33.8, + "change": 29.7, + "pChange": 724.390243902439, + "totalBuyQuantity": 114525, + "totalSellQuantity": 27725, + "bidQty": 50, + "bidprice": 33.8, + "askQty": 1075, + "askPrice": 34.45, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24400, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24400.00", + "openInterest": 124294, + "changeinOpenInterest": 32732, + "pchangeinOpenInterest": 35.7484545990695, + "totalTradedVolume": 1841427, + "impliedVolatility": 13.22, + "lastPrice": 27.7, + "change": 24, + "pChange": 648.648648648649, + "totalBuyQuantity": 296750, + "totalSellQuantity": 65300, + "bidQty": 1600, + "bidprice": 27, + "askQty": 175, + "askPrice": 27.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24400.00", + "openInterest": 41192, + "changeinOpenInterest": -1935, + "pchangeinOpenInterest": -4.48674844065203, + "totalTradedVolume": 7915, + "impliedVolatility": 18.76, + "lastPrice": 525, + "change": -524.7, + "pChange": -49.9857102029151, + "totalBuyQuantity": 9350, + "totalSellQuantity": 14275, + "bidQty": 600, + "bidprice": 519.3, + "askQty": 250, + "askPrice": 526.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24450, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24450.00", + "openInterest": 1312, + "changeinOpenInterest": 4, + "pchangeinOpenInterest": 0.305810397553517, + "totalTradedVolume": 667, + "impliedVolatility": 19.69, + "lastPrice": 572.85, + "change": -522.3, + "pChange": -47.6920969730174, + "totalBuyQuantity": 9725, + "totalSellQuantity": 10450, + "bidQty": 600, + "bidprice": 562.4, + "askQty": 600, + "askPrice": 572.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24450.00", + "openInterest": 27857, + "changeinOpenInterest": 16069, + "pchangeinOpenInterest": 136.316593145572, + "totalTradedVolume": 842671, + "impliedVolatility": 13.24, + "lastPrice": 21.8, + "change": 18.55, + "pChange": 570.769230769231, + "totalBuyQuantity": 106525, + "totalSellQuantity": 21300, + "bidQty": 1000, + "bidprice": 21.45, + "askQty": 1525, + "askPrice": 22, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24500, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24500.00", + "openInterest": 257968, + "changeinOpenInterest": 16725, + "pchangeinOpenInterest": 6.93284364727681, + "totalTradedVolume": 2447961, + "impliedVolatility": 13.33, + "lastPrice": 17.4, + "change": 14.4, + "pChange": 480, + "totalBuyQuantity": 1373150, + "totalSellQuantity": 224475, + "bidQty": 75, + "bidprice": 17.4, + "askQty": 1025, + "askPrice": 17.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24500.00", + "openInterest": 76632, + "changeinOpenInterest": 1073, + "pchangeinOpenInterest": 1.4200823197766, + "totalTradedVolume": 37975, + "impliedVolatility": 19.31, + "lastPrice": 610.15, + "change": -543.55, + "pChange": -47.1136343936899, + "totalBuyQuantity": 12775, + "totalSellQuantity": 21575, + "bidQty": 1650, + "bidprice": 610, + "askQty": 250, + "askPrice": 616.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24550, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24550.00", + "openInterest": 33938, + "changeinOpenInterest": 18156, + "pchangeinOpenInterest": 115.042453427956, + "totalTradedVolume": 668483, + "impliedVolatility": 13.53, + "lastPrice": 14.25, + "change": 11.35, + "pChange": 391.379310344828, + "totalBuyQuantity": 292025, + "totalSellQuantity": 21750, + "bidQty": 625, + "bidprice": 12.25, + "askQty": 1275, + "askPrice": 13.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24550.00", + "openInterest": 780, + "changeinOpenInterest": -14, + "pchangeinOpenInterest": -1.7632241813602, + "totalTradedVolume": 173, + "impliedVolatility": 21.1, + "lastPrice": 665.8, + "change": -540.75, + "pChange": -44.8178691309933, + "totalBuyQuantity": 6600, + "totalSellQuantity": 6650, + "bidQty": 100, + "bidprice": 650.75, + "askQty": 100, + "askPrice": 666.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24600, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24600.00", + "openInterest": 125459, + "changeinOpenInterest": 61950, + "pchangeinOpenInterest": 97.5452298099482, + "totalTradedVolume": 1262138, + "impliedVolatility": 13.4, + "lastPrice": 10.45, + "change": 7.85, + "pChange": 301.923076923077, + "totalBuyQuantity": 774875, + "totalSellQuantity": 49500, + "bidQty": 1000, + "bidprice": 10, + "askQty": 1525, + "askPrice": 10.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24600.00", + "openInterest": 12908, + "changeinOpenInterest": -1215, + "pchangeinOpenInterest": -8.60298803370389, + "totalTradedVolume": 2687, + "impliedVolatility": 21.01, + "lastPrice": 706.75, + "change": -539.65, + "pChange": -43.2966944801027, + "totalBuyQuantity": 6875, + "totalSellQuantity": 7875, + "bidQty": 75, + "bidprice": 700.35, + "askQty": 25, + "askPrice": 711.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24650, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24650.00", + "openInterest": 869, + "changeinOpenInterest": -232, + "pchangeinOpenInterest": -21.0717529518619, + "totalTradedVolume": 713, + "impliedVolatility": 25.05, + "lastPrice": 780.25, + "change": -516.9, + "pChange": -39.8488995104653, + "totalBuyQuantity": 6100, + "totalSellQuantity": 6175, + "bidQty": 75, + "bidprice": 739.65, + "askQty": 25, + "askPrice": 761.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24650.00", + "openInterest": 38301, + "changeinOpenInterest": 32423, + "pchangeinOpenInterest": 551.599183395713, + "totalTradedVolume": 574531, + "impliedVolatility": 13.63, + "lastPrice": 8.6, + "change": 6.15, + "pChange": 251.020408163265, + "totalBuyQuantity": 158975, + "totalSellQuantity": 85350, + "bidQty": 200, + "bidprice": 8.2, + "askQty": 1125, + "askPrice": 8.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24700, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24700.00", + "openInterest": 80392, + "changeinOpenInterest": 40111, + "pchangeinOpenInterest": 99.577964797299, + "totalTradedVolume": 830831, + "impliedVolatility": 13.81, + "lastPrice": 6.95, + "change": 4.6, + "pChange": 195.744680851064, + "totalBuyQuantity": 616775, + "totalSellQuantity": 35325, + "bidQty": 1650, + "bidprice": 6.6, + "askQty": 925, + "askPrice": 6.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24700.00", + "openInterest": 12277, + "changeinOpenInterest": -457, + "pchangeinOpenInterest": -3.58881733940631, + "totalTradedVolume": 1500, + "impliedVolatility": 21.82, + "lastPrice": 798.1, + "change": -550.1, + "pChange": -40.8025515502151, + "totalBuyQuantity": 7700, + "totalSellQuantity": 9725, + "bidQty": 75, + "bidprice": 796.25, + "askQty": 100, + "askPrice": 806.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24750.00", + "openInterest": 18790, + "changeinOpenInterest": 13094, + "pchangeinOpenInterest": 229.880617977528, + "totalTradedVolume": 295853, + "impliedVolatility": 13.98, + "lastPrice": 5.6, + "change": 3.25, + "pChange": 138.297872340426, + "totalBuyQuantity": 143175, + "totalSellQuantity": 19125, + "bidQty": 4925, + "bidprice": 5, + "askQty": 1450, + "askPrice": 5.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24750.00", + "openInterest": 434, + "changeinOpenInterest": 23, + "pchangeinOpenInterest": 5.59610705596107, + "totalTradedVolume": 92, + "impliedVolatility": 30.46, + "lastPrice": 907.45, + "change": -503.55, + "pChange": -35.6874557051736, + "totalBuyQuantity": 5775, + "totalSellQuantity": 6250, + "bidQty": 150, + "bidprice": 839.85, + "askQty": 150, + "askPrice": 871, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24800, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24800.00", + "openInterest": 26351, + "changeinOpenInterest": -1918, + "pchangeinOpenInterest": -6.78481729102551, + "totalTradedVolume": 2815, + "impliedVolatility": 24.06, + "lastPrice": 900, + "change": -542.05, + "pChange": -37.5888492077251, + "totalBuyQuantity": 8525, + "totalSellQuantity": 7300, + "bidQty": 250, + "bidprice": 893.2, + "askQty": 50, + "askPrice": 905.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24800.00", + "openInterest": 123505, + "changeinOpenInterest": 54075, + "pchangeinOpenInterest": 77.884199913582, + "totalTradedVolume": 915072, + "impliedVolatility": 14.15, + "lastPrice": 4.5, + "change": 2.15, + "pChange": 91.4893617021277, + "totalBuyQuantity": 1518275, + "totalSellQuantity": 58650, + "bidQty": 25, + "bidprice": 4.4, + "askQty": 400, + "askPrice": 4.5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24850, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24850.00", + "openInterest": 457, + "changeinOpenInterest": -9, + "pchangeinOpenInterest": -1.931330472103, + "totalTradedVolume": 42, + "impliedVolatility": 25.02, + "lastPrice": 950, + "change": -566.75, + "pChange": -37.3660787868798, + "totalBuyQuantity": 5925, + "totalSellQuantity": 6500, + "bidQty": 75, + "bidprice": 933.85, + "askQty": 75, + "askPrice": 966.5, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24850.00", + "openInterest": 14907, + "changeinOpenInterest": 8697, + "pchangeinOpenInterest": 140.048309178744, + "totalTradedVolume": 210484, + "impliedVolatility": 14.45, + "lastPrice": 3.85, + "change": 1.55, + "pChange": 67.3913043478261, + "totalBuyQuantity": 108600, + "totalSellQuantity": 14875, + "bidQty": 25, + "bidprice": 3.85, + "askQty": 875, + "askPrice": 4.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 24900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24900.00", + "openInterest": 15715, + "changeinOpenInterest": -463, + "pchangeinOpenInterest": -2.861911237483, + "totalTradedVolume": 1081, + "impliedVolatility": 26.9, + "lastPrice": 1006, + "change": -548, + "pChange": -35.2638352638353, + "totalBuyQuantity": 6475, + "totalSellQuantity": 7475, + "bidQty": 25, + "bidprice": 1000, + "askQty": 75, + "askPrice": 1005.7, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 24900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24900.00", + "openInterest": 44048, + "changeinOpenInterest": 18435, + "pchangeinOpenInterest": 71.9751688595635, + "totalTradedVolume": 381312, + "impliedVolatility": 14.99, + "lastPrice": 3.65, + "change": 1.4, + "pChange": 62.2222222222222, + "totalBuyQuantity": 718000, + "totalSellQuantity": 42125, + "bidQty": 700, + "bidprice": 2.85, + "askQty": 1750, + "askPrice": 3.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 24950, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 24950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE24950.00", + "openInterest": 19018, + "changeinOpenInterest": 10026, + "pchangeinOpenInterest": 111.499110320285, + "totalTradedVolume": 151952, + "impliedVolatility": 15.47, + "lastPrice": 3.4, + "change": 1.2, + "pChange": 54.5454545454545, + "totalBuyQuantity": 246975, + "totalSellQuantity": 24075, + "bidQty": 1725, + "bidprice": 2.7, + "askQty": 1250, + "askPrice": 3.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 24950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE24950.00", + "openInterest": 681, + "changeinOpenInterest": -39, + "pchangeinOpenInterest": -5.41666666666667, + "totalTradedVolume": 196, + "impliedVolatility": 32.8, + "lastPrice": 1091.2, + "change": -509.75, + "pChange": -31.8404697211031, + "totalBuyQuantity": 6375, + "totalSellQuantity": 5875, + "bidQty": 475, + "bidprice": 1032, + "askQty": 25, + "askPrice": 1055.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25000, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25000.00", + "openInterest": 294780, + "changeinOpenInterest": 54354, + "pchangeinOpenInterest": 22.6073719148511, + "totalTradedVolume": 1369004, + "impliedVolatility": 15.57, + "lastPrice": 2.7, + "change": 0.5, + "pChange": 22.7272727272727, + "totalBuyQuantity": 1897750, + "totalSellQuantity": 167550, + "bidQty": 4125, + "bidprice": 2.7, + "askQty": 400, + "askPrice": 2.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25000.00", + "openInterest": 77075, + "changeinOpenInterest": -211, + "pchangeinOpenInterest": -0.273011929715602, + "totalTradedVolume": 12103, + "impliedVolatility": 27.84, + "lastPrice": 1100, + "change": -551.6, + "pChange": -33.3979171712279, + "totalBuyQuantity": 8825, + "totalSellQuantity": 9800, + "bidQty": 100, + "bidprice": 1094.45, + "askQty": 100, + "askPrice": 1105.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25050, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25050.00", + "openInterest": 9312, + "changeinOpenInterest": 6904, + "pchangeinOpenInterest": 286.71096345515, + "totalTradedVolume": 87341, + "impliedVolatility": 15.79, + "lastPrice": 2.25, + "change": 0.15, + "pChange": 7.14285714285714, + "totalBuyQuantity": 97400, + "totalSellQuantity": 15800, + "bidQty": 625, + "bidprice": 2.15, + "askQty": 1000, + "askPrice": 2.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25050.00", + "openInterest": 363, + "changeinOpenInterest": -4, + "pchangeinOpenInterest": -1.08991825613079, + "totalTradedVolume": 31, + "impliedVolatility": 28.32, + "lastPrice": 1147.4, + "change": -547.15, + "pChange": -32.2888082381753, + "totalBuyQuantity": 6250, + "totalSellQuantity": 6150, + "bidQty": 225, + "bidprice": 1138.1, + "askQty": 75, + "askPrice": 1155.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25100, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25100.00", + "openInterest": 41636, + "changeinOpenInterest": 10248, + "pchangeinOpenInterest": 32.6494201605709, + "totalTradedVolume": 211497, + "impliedVolatility": 16.19, + "lastPrice": 2.05, + "change": -0.1, + "pChange": -4.65116279069768, + "totalBuyQuantity": 698000, + "totalSellQuantity": 19025, + "bidQty": 20125, + "bidprice": 2, + "askQty": 725, + "askPrice": 2.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25100.00", + "openInterest": 6154, + "changeinOpenInterest": -93, + "pchangeinOpenInterest": -1.48871458299984, + "totalTradedVolume": 728, + "impliedVolatility": 33.76, + "lastPrice": 1226.1, + "change": -522.6, + "pChange": -29.8850574712644, + "totalBuyQuantity": 5750, + "totalSellQuantity": 6200, + "bidQty": 100, + "bidprice": 1192.95, + "askQty": 150, + "askPrice": 1205.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25150, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25150.00", + "openInterest": 8440, + "changeinOpenInterest": 4800, + "pchangeinOpenInterest": 131.868131868132, + "totalTradedVolume": 59457, + "impliedVolatility": 16.67, + "lastPrice": 1.95, + "change": -0.0999999999999999, + "pChange": -4.8780487804878, + "totalBuyQuantity": 115250, + "totalSellQuantity": 11625, + "bidQty": 25, + "bidprice": 1.8, + "askQty": 225, + "askPrice": 1.95, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25150.00", + "openInterest": 275, + "changeinOpenInterest": -23, + "pchangeinOpenInterest": -7.71812080536913, + "totalTradedVolume": 42, + "impliedVolatility": 42, + "lastPrice": 1331.35, + "change": -472, + "pChange": -26.1735104111792, + "totalBuyQuantity": 5925, + "totalSellQuantity": 5225, + "bidQty": 100, + "bidprice": 1231.6, + "askQty": 100, + "askPrice": 1254.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25200.00", + "openInterest": 27691, + "changeinOpenInterest": -159, + "pchangeinOpenInterest": -0.570915619389587, + "totalTradedVolume": 3158, + "impliedVolatility": 34.26, + "lastPrice": 1316.7, + "change": -544.25, + "pChange": -29.245815309385, + "totalBuyQuantity": 6100, + "totalSellQuantity": 7150, + "bidQty": 150, + "bidprice": 1293.3, + "askQty": 375, + "askPrice": 1305.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25200.00", + "openInterest": 41646, + "changeinOpenInterest": 8058, + "pchangeinOpenInterest": 23.9907109682029, + "totalTradedVolume": 167350, + "impliedVolatility": 16.89, + "lastPrice": 1.65, + "change": -0.35, + "pChange": -17.5, + "totalBuyQuantity": 382925, + "totalSellQuantity": 21500, + "bidQty": 650, + "bidprice": 1.65, + "askQty": 800, + "askPrice": 2.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25250, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25250.00", + "openInterest": 13196, + "changeinOpenInterest": 8049, + "pchangeinOpenInterest": 156.382358655528, + "totalTradedVolume": 53727, + "impliedVolatility": 17.53, + "lastPrice": 1.7, + "change": -0.25, + "pChange": -12.8205128205128, + "totalBuyQuantity": 116375, + "totalSellQuantity": 15325, + "bidQty": 4000, + "bidprice": 1.7, + "askQty": 1250, + "askPrice": 1.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25250.00", + "openInterest": 342, + "changeinOpenInterest": -14, + "pchangeinOpenInterest": -3.93258426966292, + "totalTradedVolume": 61, + "impliedVolatility": 40.49, + "lastPrice": 1403.3, + "change": -494.05, + "pChange": -26.0389490605318, + "totalBuyQuantity": 5750, + "totalSellQuantity": 5725, + "bidQty": 100, + "bidprice": 1331.2, + "askQty": 350, + "askPrice": 1376.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25300.00", + "openInterest": 34900, + "changeinOpenInterest": 10778, + "pchangeinOpenInterest": 44.6812038802753, + "totalTradedVolume": 144377, + "impliedVolatility": 18.03, + "lastPrice": 1.65, + "change": -0.25, + "pChange": -13.1578947368421, + "totalBuyQuantity": 388500, + "totalSellQuantity": 33575, + "bidQty": 1725, + "bidprice": 1.5, + "askQty": 1775, + "askPrice": 1.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25300.00", + "openInterest": 3036, + "changeinOpenInterest": -284, + "pchangeinOpenInterest": -8.55421686746988, + "totalTradedVolume": 590, + "impliedVolatility": 36.64, + "lastPrice": 1420, + "change": -525.35, + "pChange": -27.0054231886293, + "totalBuyQuantity": 4150, + "totalSellQuantity": 6125, + "bidQty": 50, + "bidprice": 1391.3, + "askQty": 75, + "askPrice": 1404.55, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25350.00", + "openInterest": 294, + "changeinOpenInterest": -9, + "pchangeinOpenInterest": -2.97029702970297, + "totalTradedVolume": 72, + "impliedVolatility": 38.75, + "lastPrice": 1477.55, + "change": -519.45, + "pChange": -26.0115172759139, + "totalBuyQuantity": 5775, + "totalSellQuantity": 5750, + "bidQty": 75, + "bidprice": 1431.25, + "askQty": 75, + "askPrice": 1484.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25350.00", + "openInterest": 3552, + "changeinOpenInterest": 1718, + "pchangeinOpenInterest": 93.6750272628135, + "totalTradedVolume": 31923, + "impliedVolatility": 18.38, + "lastPrice": 1.5, + "change": -0.35, + "pChange": -18.9189189189189, + "totalBuyQuantity": 115825, + "totalSellQuantity": 15100, + "bidQty": 250, + "bidprice": 1.45, + "askQty": 500, + "askPrice": 1.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25400, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25400.00", + "openInterest": 3089, + "changeinOpenInterest": -120, + "pchangeinOpenInterest": -3.73948270489249, + "totalTradedVolume": 344, + "impliedVolatility": 36.11, + "lastPrice": 1506, + "change": -530.95, + "pChange": -26.0659319079997, + "totalBuyQuantity": 6225, + "totalSellQuantity": 6525, + "bidQty": 75, + "bidprice": 1474.45, + "askQty": 25, + "askPrice": 1505.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25400.00", + "openInterest": 16361, + "changeinOpenInterest": 8545, + "pchangeinOpenInterest": 109.327021494371, + "totalTradedVolume": 70710, + "impliedVolatility": 18.7, + "lastPrice": 1.35, + "change": -0.5, + "pChange": -27.027027027027, + "totalBuyQuantity": 484000, + "totalSellQuantity": 27200, + "bidQty": 1250, + "bidprice": 1.3, + "askQty": 6100, + "askPrice": 1.35, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25450, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25450.00", + "openInterest": 2513, + "changeinOpenInterest": 1667, + "pchangeinOpenInterest": 197.044917257683, + "totalTradedVolume": 10410, + "impliedVolatility": 19.49, + "lastPrice": 1.5, + "change": -0.4, + "pChange": -21.0526315789474, + "totalBuyQuantity": 101275, + "totalSellQuantity": 14025, + "bidQty": 3600, + "bidprice": 1.15, + "askQty": 500, + "askPrice": 1.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25450.00", + "openInterest": 188, + "changeinOpenInterest": -22, + "pchangeinOpenInterest": -10.4761904761905, + "totalTradedVolume": 44, + "impliedVolatility": 40.43, + "lastPrice": 1576.4, + "change": -506, + "pChange": -24.2988859008836, + "totalBuyQuantity": 5950, + "totalSellQuantity": 6175, + "bidQty": 300, + "bidprice": 1530.55, + "askQty": 300, + "askPrice": 1603.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25500, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25500.00", + "openInterest": 23702, + "changeinOpenInterest": -1589, + "pchangeinOpenInterest": -6.28286742319402, + "totalTradedVolume": 2508, + "impliedVolatility": 36.74, + "lastPrice": 1600, + "change": -539.05, + "pChange": -25.2004394474183, + "totalBuyQuantity": 8275, + "totalSellQuantity": 8000, + "bidQty": 100, + "bidprice": 1589.8, + "askQty": 25, + "askPrice": 1601.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25500.00", + "openInterest": 176394, + "changeinOpenInterest": -33137, + "pchangeinOpenInterest": -15.8148436269573, + "totalTradedVolume": 779496, + "impliedVolatility": 19.53, + "lastPrice": 1.2, + "change": -0.75, + "pChange": -38.4615384615385, + "totalBuyQuantity": 2020400, + "totalSellQuantity": 234775, + "bidQty": 185550, + "bidprice": 1.2, + "askQty": 32675, + "askPrice": 1.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25550, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25550.00", + "openInterest": 370, + "changeinOpenInterest": -8, + "pchangeinOpenInterest": -2.11640211640212, + "totalTradedVolume": 16, + "impliedVolatility": 26.58, + "lastPrice": 1610.05, + "change": -590.35, + "pChange": -26.8292128703872, + "totalBuyQuantity": 5625, + "totalSellQuantity": 5600, + "bidQty": 100, + "bidprice": 1630.35, + "askQty": 375, + "askPrice": 1655.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25550.00", + "openInterest": 3094, + "changeinOpenInterest": 895, + "pchangeinOpenInterest": 40.7003183265121, + "totalTradedVolume": 13922, + "impliedVolatility": 20.42, + "lastPrice": 1.4, + "change": -0.5, + "pChange": -26.3157894736842, + "totalBuyQuantity": 113475, + "totalSellQuantity": 13550, + "bidQty": 5200, + "bidprice": 1.2, + "askQty": 1675, + "askPrice": 1.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25600, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25600.00", + "openInterest": 13363, + "changeinOpenInterest": 5050, + "pchangeinOpenInterest": 60.7482256706364, + "totalTradedVolume": 53980, + "impliedVolatility": 20.7, + "lastPrice": 1.25, + "change": -0.6, + "pChange": -32.4324324324324, + "totalBuyQuantity": 238375, + "totalSellQuantity": 14150, + "bidQty": 1275, + "bidprice": 1.25, + "askQty": 1450, + "askPrice": 1.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25600.00", + "openInterest": 2799, + "changeinOpenInterest": -217, + "pchangeinOpenInterest": -7.19496021220159, + "totalTradedVolume": 478, + "impliedVolatility": 29.77, + "lastPrice": 1666, + "change": -575.4, + "pChange": -25.6714553404122, + "totalBuyQuantity": 7200, + "totalSellQuantity": 6175, + "bidQty": 400, + "bidprice": 1676.45, + "askQty": 100, + "askPrice": 1701.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25650, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25650.00", + "openInterest": 301, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 46.86, + "lastPrice": 1794.1, + "change": -357.3, + "pChange": -16.6077902760993, + "totalBuyQuantity": 4000, + "totalSellQuantity": 4050, + "bidQty": 75, + "bidprice": 1728.1, + "askQty": 100, + "askPrice": 1759.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25650.00", + "openInterest": 1495, + "changeinOpenInterest": 695, + "pchangeinOpenInterest": 86.875, + "totalTradedVolume": 10660, + "impliedVolatility": 21.13, + "lastPrice": 1.2, + "change": -0.6, + "pChange": -33.3333333333333, + "totalBuyQuantity": 112475, + "totalSellQuantity": 10150, + "bidQty": 325, + "bidprice": 1.15, + "askQty": 750, + "askPrice": 2.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25700, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25700.00", + "openInterest": 7484, + "changeinOpenInterest": 1091, + "pchangeinOpenInterest": 17.0655404348506, + "totalTradedVolume": 40245, + "impliedVolatility": 21.66, + "lastPrice": 1.2, + "change": -0.65, + "pChange": -35.1351351351351, + "totalBuyQuantity": 227250, + "totalSellQuantity": 11725, + "bidQty": 3200, + "bidprice": 1.2, + "askQty": 250, + "askPrice": 1.45, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25700.00", + "openInterest": 2864, + "changeinOpenInterest": -66, + "pchangeinOpenInterest": -2.25255972696246, + "totalTradedVolume": 126, + "impliedVolatility": 49.61, + "lastPrice": 1856.3, + "change": -495.5, + "pChange": -21.0689684496981, + "totalBuyQuantity": 5625, + "totalSellQuantity": 3050, + "bidQty": 300, + "bidprice": 1782.2, + "askQty": 75, + "askPrice": 1801.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25750.00", + "openInterest": 2079, + "changeinOpenInterest": -237, + "pchangeinOpenInterest": -10.2331606217617, + "totalTradedVolume": 5576, + "impliedVolatility": 21.98, + "lastPrice": 1.1, + "change": -0.7, + "pChange": -38.8888888888889, + "totalBuyQuantity": 105650, + "totalSellQuantity": 13600, + "bidQty": 3600, + "bidprice": 1.05, + "askQty": 700, + "askPrice": 1.5, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25750.00", + "openInterest": 116, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.854700854700855, + "totalTradedVolume": 10, + "impliedVolatility": 37.46, + "lastPrice": 1834.4, + "change": -548.4, + "pChange": -23.0149404062448, + "totalBuyQuantity": 4475, + "totalSellQuantity": 5225, + "bidQty": 175, + "bidprice": 1828.2, + "askQty": 75, + "askPrice": 1859.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25800, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25800.00", + "openInterest": 5561, + "changeinOpenInterest": -278, + "pchangeinOpenInterest": -4.76108922760747, + "totalTradedVolume": 374, + "impliedVolatility": 44.7, + "lastPrice": 1915, + "change": -528.2, + "pChange": -21.6191879502292, + "totalBuyQuantity": 6125, + "totalSellQuantity": 6200, + "bidQty": 675, + "bidprice": 1869.35, + "askQty": 100, + "askPrice": 1903.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25800.00", + "openInterest": 9652, + "changeinOpenInterest": -2390, + "pchangeinOpenInterest": -19.8472014615512, + "totalTradedVolume": 69158, + "impliedVolatility": 22.5, + "lastPrice": 1.1, + "change": -0.75, + "pChange": -40.5405405405405, + "totalBuyQuantity": 277800, + "totalSellQuantity": 31400, + "bidQty": 2750, + "bidprice": 1.1, + "askQty": 400, + "askPrice": 1.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25850, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25850.00", + "openInterest": 51, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -1.92307692307692, + "totalTradedVolume": 4, + "impliedVolatility": 74.75, + "lastPrice": 2187.25, + "change": -312.75, + "pChange": -12.51, + "totalBuyQuantity": 5525, + "totalSellQuantity": 5325, + "bidQty": 50, + "bidprice": 1928.85, + "askQty": 50, + "askPrice": 1973.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25850.00", + "openInterest": 1491, + "changeinOpenInterest": 423, + "pchangeinOpenInterest": 39.6067415730337, + "totalTradedVolume": 4925, + "impliedVolatility": 23.23, + "lastPrice": 1.2, + "change": -0.55, + "pChange": -31.4285714285714, + "totalBuyQuantity": 99875, + "totalSellQuantity": 10475, + "bidQty": 2500, + "bidprice": 1, + "askQty": 1350, + "askPrice": 1.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 25900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25900.00", + "openInterest": 2476, + "changeinOpenInterest": -31, + "pchangeinOpenInterest": -1.23653769445552, + "totalTradedVolume": 55, + "impliedVolatility": 49.98, + "lastPrice": 2035.3, + "change": -502.6, + "pChange": -19.8037747744198, + "totalBuyQuantity": 6450, + "totalSellQuantity": 6375, + "bidQty": 150, + "bidprice": 1975.5, + "askQty": 25, + "askPrice": 2012.75, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 25900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25900.00", + "openInterest": 4350, + "changeinOpenInterest": -621, + "pchangeinOpenInterest": -12.4924562462281, + "totalTradedVolume": 23398, + "impliedVolatility": 23.29, + "lastPrice": 1, + "change": -0.7, + "pChange": -41.1764705882353, + "totalBuyQuantity": 149925, + "totalSellQuantity": 10550, + "bidQty": 250, + "bidprice": 1, + "askQty": 1800, + "askPrice": 5, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 25950, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 25950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE25950.00", + "openInterest": 693, + "changeinOpenInterest": 128, + "pchangeinOpenInterest": 22.6548672566372, + "totalTradedVolume": 3835, + "impliedVolatility": 23.8, + "lastPrice": 1, + "change": -0.75, + "pChange": -42.8571428571429, + "totalBuyQuantity": 88400, + "totalSellQuantity": 12700, + "bidQty": 25, + "bidprice": 1, + "askQty": 750, + "askPrice": 1.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 25950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE25950.00", + "openInterest": 58, + "changeinOpenInterest": 2, + "pchangeinOpenInterest": 3.57142857142857, + "totalTradedVolume": 7, + "impliedVolatility": 44.24, + "lastPrice": 2050, + "change": -515, + "pChange": -20.0779727095517, + "totalBuyQuantity": 5050, + "totalSellQuantity": 5575, + "bidQty": 100, + "bidprice": 2039.6, + "askQty": 50, + "askPrice": 2069.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26000, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26000.00", + "openInterest": 40309, + "changeinOpenInterest": -7075, + "pchangeinOpenInterest": -14.9312004052001, + "totalTradedVolume": 9598, + "impliedVolatility": 43.97, + "lastPrice": 2095.15, + "change": -547.35, + "pChange": -20.713339640492, + "totalBuyQuantity": 7350, + "totalSellQuantity": 8800, + "bidQty": 75, + "bidprice": 2087.8, + "askQty": 50, + "askPrice": 2101.9, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26000.00", + "openInterest": 236483, + "changeinOpenInterest": 52068, + "pchangeinOpenInterest": 28.2341458124339, + "totalTradedVolume": 395698, + "impliedVolatility": 24.43, + "lastPrice": 1.05, + "change": -0.65, + "pChange": -38.2352941176471, + "totalBuyQuantity": 1629875, + "totalSellQuantity": 208850, + "bidQty": 9075, + "bidprice": 1.05, + "askQty": 175, + "askPrice": 1.1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26050, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26050.00", + "openInterest": 1341, + "changeinOpenInterest": 244, + "pchangeinOpenInterest": 22.2424794895169, + "totalTradedVolume": 8713, + "impliedVolatility": 24.68, + "lastPrice": 0.95, + "change": -0.8, + "pChange": -45.7142857142857, + "totalBuyQuantity": 89300, + "totalSellQuantity": 21650, + "bidQty": 3575, + "bidprice": 0.95, + "askQty": 1425, + "askPrice": 1.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26050.00", + "openInterest": 149, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2661.45, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4325, + "totalSellQuantity": 4300, + "bidQty": 25, + "bidprice": 2100.1, + "askQty": 625, + "askPrice": 2217.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26100, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26100.00", + "openInterest": 10255, + "changeinOpenInterest": -75, + "pchangeinOpenInterest": -0.726040658276864, + "totalTradedVolume": 12323, + "impliedVolatility": 25.04, + "lastPrice": 0.9, + "change": -0.8, + "pChange": -47.0588235294118, + "totalBuyQuantity": 186575, + "totalSellQuantity": 23050, + "bidQty": 7200, + "bidprice": 0.9, + "askQty": 100, + "askPrice": 1.25, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26100.00", + "openInterest": 1496, + "changeinOpenInterest": -24, + "pchangeinOpenInterest": -1.57894736842105, + "totalTradedVolume": 30, + "impliedVolatility": 54.27, + "lastPrice": 2240, + "change": -501.4, + "pChange": -18.289924855913, + "totalBuyQuantity": 4700, + "totalSellQuantity": 4350, + "bidQty": 75, + "bidprice": 2142.25, + "askQty": 100, + "askPrice": 2205.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26150, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26150.00", + "openInterest": 706, + "changeinOpenInterest": 246, + "pchangeinOpenInterest": 53.4782608695652, + "totalTradedVolume": 2797, + "impliedVolatility": 26.43, + "lastPrice": 1.25, + "change": -0.45, + "pChange": -26.4705882352941, + "totalBuyQuantity": 78575, + "totalSellQuantity": 23250, + "bidQty": 7200, + "bidprice": 0.9, + "askQty": 3175, + "askPrice": 1.3, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26150.00", + "openInterest": 87, + "changeinOpenInterest": 7, + "pchangeinOpenInterest": 8.75, + "totalTradedVolume": 122, + "impliedVolatility": 52.36, + "lastPrice": 2274.35, + "change": -514.65, + "pChange": -18.4528504840445, + "totalBuyQuantity": 4500, + "totalSellQuantity": 4100, + "bidQty": 25, + "bidprice": 2226.55, + "askQty": 50, + "askPrice": 2270.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26200.00", + "openInterest": 2228, + "changeinOpenInterest": -119, + "pchangeinOpenInterest": -5.07030251384747, + "totalTradedVolume": 145, + "impliedVolatility": 52.65, + "lastPrice": 2321.4, + "change": -520.1, + "pChange": -18.3037128277318, + "totalBuyQuantity": 4375, + "totalSellQuantity": 4475, + "bidQty": 100, + "bidprice": 2288.4, + "askQty": 100, + "askPrice": 2301.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26200.00", + "openInterest": 3851, + "changeinOpenInterest": 523, + "pchangeinOpenInterest": 15.7151442307692, + "totalTradedVolume": 11801, + "impliedVolatility": 26.7, + "lastPrice": 1.15, + "change": -0.55, + "pChange": -32.3529411764706, + "totalBuyQuantity": 170175, + "totalSellQuantity": 29225, + "bidQty": 1450, + "bidprice": 0.95, + "askQty": 2050, + "askPrice": 1.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26250, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26250.00", + "openInterest": 63, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 2, + "impliedVolatility": 71.92, + "lastPrice": 2493.3, + "change": -254.65, + "pChange": -9.26690805873468, + "totalBuyQuantity": 3100, + "totalSellQuantity": 3150, + "bidQty": 325, + "bidprice": 2222.5, + "askQty": 375, + "askPrice": 2457.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26250.00", + "openInterest": 1921, + "changeinOpenInterest": 607, + "pchangeinOpenInterest": 46.1948249619483, + "totalTradedVolume": 6983, + "impliedVolatility": 26.67, + "lastPrice": 0.95, + "change": -0.7, + "pChange": -42.4242424242424, + "totalBuyQuantity": 75500, + "totalSellQuantity": 23175, + "bidQty": 3325, + "bidprice": 0.95, + "askQty": 900, + "askPrice": 2.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26300.00", + "openInterest": 4384, + "changeinOpenInterest": 391, + "pchangeinOpenInterest": 9.79213623841723, + "totalTradedVolume": 11886, + "impliedVolatility": 27.16, + "lastPrice": 0.95, + "change": -0.75, + "pChange": -44.1176470588235, + "totalBuyQuantity": 151150, + "totalSellQuantity": 24175, + "bidQty": 400, + "bidprice": 0.95, + "askQty": 25, + "askPrice": 1.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26300.00", + "openInterest": 1171, + "changeinOpenInterest": 34, + "pchangeinOpenInterest": 2.99032541776605, + "totalTradedVolume": 109, + "impliedVolatility": 59.35, + "lastPrice": 2449.65, + "change": -470.35, + "pChange": -16.1078767123288, + "totalBuyQuantity": 5675, + "totalSellQuantity": 5500, + "bidQty": 100, + "bidprice": 2384, + "askQty": 75, + "askPrice": 2405.7, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26350.00", + "openInterest": 6, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2970, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 1775, + "bidprice": 2257.6, + "askQty": 1250, + "askPrice": 2547, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26350.00", + "openInterest": 440, + "changeinOpenInterest": 126, + "pchangeinOpenInterest": 40.1273885350319, + "totalTradedVolume": 2237, + "impliedVolatility": 27.65, + "lastPrice": 0.95, + "change": -0.7, + "pChange": -42.4242424242424, + "totalBuyQuantity": 78900, + "totalSellQuantity": 22575, + "bidQty": 6800, + "bidprice": 0.9, + "askQty": 150, + "askPrice": 1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26400, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26400.00", + "openInterest": 3754, + "changeinOpenInterest": -544, + "pchangeinOpenInterest": -12.6570497906003, + "totalTradedVolume": 6403, + "impliedVolatility": 27.99, + "lastPrice": 0.9, + "change": -0.75, + "pChange": -45.4545454545455, + "totalBuyQuantity": 205925, + "totalSellQuantity": 22225, + "bidQty": 6850, + "bidprice": 0.9, + "askQty": 900, + "askPrice": 3.6, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26400.00", + "openInterest": 1140, + "changeinOpenInterest": -42, + "pchangeinOpenInterest": -3.55329949238579, + "totalTradedVolume": 190, + "impliedVolatility": 60.56, + "lastPrice": 2546.65, + "change": -502.7, + "pChange": -16.4854805122403, + "totalBuyQuantity": 5525, + "totalSellQuantity": 5400, + "bidQty": 175, + "bidprice": 2476.75, + "askQty": 200, + "askPrice": 2510.6, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26450, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26450.00", + "openInterest": 470, + "changeinOpenInterest": -262, + "pchangeinOpenInterest": -35.792349726776, + "totalTradedVolume": 4909, + "impliedVolatility": 28.48, + "lastPrice": 0.9, + "change": -0.75, + "pChange": -45.4545454545455, + "totalBuyQuantity": 92875, + "totalSellQuantity": 22450, + "bidQty": 1475, + "bidprice": 0.85, + "askQty": 750, + "askPrice": 1.35, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26450.00", + "openInterest": 19, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2934.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4050, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 2499.05, + "askQty": 625, + "askPrice": 2600.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26500, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26500.00", + "openInterest": 43281, + "changeinOpenInterest": 10078, + "pchangeinOpenInterest": 30.3526789747914, + "totalTradedVolume": 174699, + "impliedVolatility": 28.79, + "lastPrice": 0.85, + "change": -0.75, + "pChange": -46.875, + "totalBuyQuantity": 1110500, + "totalSellQuantity": 108900, + "bidQty": 58025, + "bidprice": 0.85, + "askQty": 3725, + "askPrice": 0.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26500.00", + "openInterest": 10093, + "changeinOpenInterest": -905, + "pchangeinOpenInterest": -8.22876886706674, + "totalTradedVolume": 1968, + "impliedVolatility": 56.25, + "lastPrice": 2615, + "change": -535.75, + "pChange": -17.0038879631834, + "totalBuyQuantity": 5750, + "totalSellQuantity": 6200, + "bidQty": 25, + "bidprice": 2596, + "askQty": 25, + "askPrice": 2603.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26550, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26550.00", + "openInterest": 4, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3032.85, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 1775, + "bidprice": 2452.65, + "askQty": 1000, + "askPrice": 2825.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26550.00", + "openInterest": 946, + "changeinOpenInterest": 364, + "pchangeinOpenInterest": 62.5429553264605, + "totalTradedVolume": 2008, + "impliedVolatility": 29.27, + "lastPrice": 0.85, + "change": -0.8, + "pChange": -48.4848484848485, + "totalBuyQuantity": 214825, + "totalSellQuantity": 21725, + "bidQty": 1250, + "bidprice": 0.85, + "askQty": 1325, + "askPrice": 0.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26600, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26600.00", + "openInterest": 10417, + "changeinOpenInterest": 754, + "pchangeinOpenInterest": 7.80295974335093, + "totalTradedVolume": 41266, + "impliedVolatility": 29.58, + "lastPrice": 0.8, + "change": -0.7, + "pChange": -46.6666666666667, + "totalBuyQuantity": 393750, + "totalSellQuantity": 41250, + "bidQty": 4075, + "bidprice": 0.8, + "askQty": 8525, + "askPrice": 0.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26600.00", + "openInterest": 136, + "changeinOpenInterest": -12, + "pchangeinOpenInterest": -8.10810810810811, + "totalTradedVolume": 13, + "impliedVolatility": 54.46, + "lastPrice": 2700, + "change": -546.5, + "pChange": -16.8335130140151, + "totalBuyQuantity": 5875, + "totalSellQuantity": 5275, + "bidQty": 25, + "bidprice": 2676.55, + "askQty": 100, + "askPrice": 2718.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26650, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26650.00", + "openInterest": 1144, + "changeinOpenInterest": 606, + "pchangeinOpenInterest": 112.639405204461, + "totalTradedVolume": 3442, + "impliedVolatility": 31.02, + "lastPrice": 1.1, + "change": -0.5, + "pChange": -31.25, + "totalBuyQuantity": 107775, + "totalSellQuantity": 24425, + "bidQty": 1800, + "bidprice": 0.8, + "askQty": 1800, + "askPrice": 1.2, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26650.00", + "openInterest": 22, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3130.05, + "change": -1.94999999999982, + "pChange": -0.0622605363984616, + "totalBuyQuantity": 4150, + "totalSellQuantity": 4925, + "bidQty": 25, + "bidprice": 2708.85, + "askQty": 1000, + "askPrice": 3019.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26700, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26700.00", + "openInterest": 1626, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.0614628149969269, + "totalTradedVolume": 1, + "impliedVolatility": 88.94, + "lastPrice": 3010, + "change": -135.95, + "pChange": -4.32142913905179, + "totalBuyQuantity": 5725, + "totalSellQuantity": 5375, + "bidQty": 225, + "bidprice": 2776.8, + "askQty": 225, + "askPrice": 2812.65, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26700.00", + "openInterest": 3033, + "changeinOpenInterest": -272, + "pchangeinOpenInterest": -8.22995461422088, + "totalTradedVolume": 5565, + "impliedVolatility": 31.36, + "lastPrice": 1.05, + "change": -0.55, + "pChange": -34.375, + "totalBuyQuantity": 385200, + "totalSellQuantity": 23900, + "bidQty": 4875, + "bidprice": 0.8, + "askQty": 1000, + "askPrice": 1.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26750.00", + "openInterest": 862, + "changeinOpenInterest": -266, + "pchangeinOpenInterest": -23.5815602836879, + "totalTradedVolume": 8818, + "impliedVolatility": 31.18, + "lastPrice": 0.85, + "change": -0.7, + "pChange": -45.1612903225807, + "totalBuyQuantity": 134150, + "totalSellQuantity": 31675, + "bidQty": 2675, + "bidprice": 0.85, + "askQty": 1400, + "askPrice": 1.65, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26750.00", + "openInterest": 19, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 111.66, + "lastPrice": 3253.75, + "change": 26.3000000000002, + "pChange": 0.814884816186159, + "totalBuyQuantity": 3900, + "totalSellQuantity": 3275, + "bidQty": 50, + "bidprice": 2804.6, + "askQty": 275, + "askPrice": 2944.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26800, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26800.00", + "openInterest": 10560, + "changeinOpenInterest": -3619, + "pchangeinOpenInterest": -25.5236617532971, + "totalTradedVolume": 8136, + "impliedVolatility": 31.46, + "lastPrice": 0.8, + "change": -0.85, + "pChange": -51.5151515151515, + "totalBuyQuantity": 319675, + "totalSellQuantity": 37925, + "bidQty": 300, + "bidprice": 0.8, + "askQty": 2575, + "askPrice": 1.55, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26800.00", + "openInterest": 149, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -0.666666666666667, + "totalTradedVolume": 3, + "impliedVolatility": 56.38, + "lastPrice": 2895.65, + "change": -555.25, + "pChange": -16.0900055058101, + "totalBuyQuantity": 4450, + "totalSellQuantity": 4275, + "bidQty": 450, + "bidprice": 2881, + "askQty": 25, + "askPrice": 2903.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26850, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26850.00", + "openInterest": 914, + "changeinOpenInterest": 53, + "pchangeinOpenInterest": 6.15563298490128, + "totalTradedVolume": 2063, + "impliedVolatility": 31.93, + "lastPrice": 0.8, + "change": -0.75, + "pChange": -48.3870967741935, + "totalBuyQuantity": 95600, + "totalSellQuantity": 20550, + "bidQty": 5925, + "bidprice": 0.8, + "askQty": 25, + "askPrice": 1.15, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26850.00", + "openInterest": 33, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 103.33, + "lastPrice": 3257.95, + "change": 79.7999999999997, + "pChange": 2.51089470289318, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4525, + "bidQty": 625, + "bidprice": 2893.45, + "askQty": 125, + "askPrice": 3014.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26900, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 26900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26900.00", + "openInterest": 2111, + "changeinOpenInterest": -137, + "pchangeinOpenInterest": -6.09430604982206, + "totalTradedVolume": 8030, + "impliedVolatility": 32.39, + "lastPrice": 0.8, + "change": -0.7, + "pChange": -46.6666666666667, + "totalBuyQuantity": 345925, + "totalSellQuantity": 24550, + "bidQty": 250, + "bidprice": 0.8, + "askQty": 300, + "askPrice": 1.1, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 26900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26900.00", + "openInterest": 186, + "changeinOpenInterest": -6, + "pchangeinOpenInterest": -3.125, + "totalTradedVolume": 6, + "impliedVolatility": 58.98, + "lastPrice": 3000, + "change": -550, + "pChange": -15.4929577464789, + "totalBuyQuantity": 4275, + "totalSellQuantity": 4275, + "bidQty": 100, + "bidprice": 2967.65, + "askQty": 900, + "askPrice": 3043.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 26950, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 26950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE26950.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3426.5, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3700, + "totalSellQuantity": 3675, + "bidQty": 25, + "bidprice": 2972.05, + "askQty": 1000, + "askPrice": 3177.1, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 26950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE26950.00", + "openInterest": 683, + "changeinOpenInterest": 205, + "pchangeinOpenInterest": 42.8870292887029, + "totalTradedVolume": 4558, + "impliedVolatility": 33.58, + "lastPrice": 1, + "change": -0.55, + "pChange": -35.4838709677419, + "totalBuyQuantity": 90975, + "totalSellQuantity": 20175, + "bidQty": 10800, + "bidprice": 0.7, + "askQty": 200, + "askPrice": 1, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27000, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27000.00", + "openInterest": 104572, + "changeinOpenInterest": 2538, + "pchangeinOpenInterest": 2.4874061587314, + "totalTradedVolume": 239189, + "impliedVolatility": 33.12, + "lastPrice": 0.75, + "change": -0.7, + "pChange": -48.2758620689655, + "totalBuyQuantity": 1090350, + "totalSellQuantity": 143300, + "bidQty": 272050, + "bidprice": 0.75, + "askQty": 26375, + "askPrice": 0.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27000, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27000.00", + "openInterest": 19705, + "changeinOpenInterest": -399, + "pchangeinOpenInterest": -1.98467966573816, + "totalTradedVolume": 1401, + "impliedVolatility": 63.99, + "lastPrice": 3114.75, + "change": -533.25, + "pChange": -14.6175986842105, + "totalBuyQuantity": 4950, + "totalSellQuantity": 7200, + "bidQty": 50, + "bidprice": 3091.5, + "askQty": 275, + "askPrice": 3105.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27050, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27050.00", + "openInterest": 302, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 841.05, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4200, + "bidQty": 625, + "bidprice": 3088.95, + "askQty": 625, + "askPrice": 3201.25, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27050, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27050.00", + "openInterest": 1938, + "changeinOpenInterest": 674, + "pchangeinOpenInterest": 53.3227848101266, + "totalTradedVolume": 5924, + "impliedVolatility": 34.52, + "lastPrice": 1, + "change": -0.6, + "pChange": -37.5, + "totalBuyQuantity": 68975, + "totalSellQuantity": 28075, + "bidQty": 2700, + "bidprice": 0.75, + "askQty": 750, + "askPrice": 1.15, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27100, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27100.00", + "openInterest": 5893, + "changeinOpenInterest": 3523, + "pchangeinOpenInterest": 148.649789029536, + "totalTradedVolume": 33932, + "impliedVolatility": 34.24, + "lastPrice": 0.8, + "change": -0.75, + "pChange": -48.3870967741935, + "totalBuyQuantity": 470750, + "totalSellQuantity": 55275, + "bidQty": 2025, + "bidprice": 0.75, + "askQty": 8250, + "askPrice": 0.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27100, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27100.00", + "openInterest": 79, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 1, + "impliedVolatility": 56.07, + "lastPrice": 3180, + "change": -404.6, + "pChange": -11.2871729063215, + "totalBuyQuantity": 5325, + "totalSellQuantity": 5300, + "bidQty": 50, + "bidprice": 3159.4, + "askQty": 50, + "askPrice": 3208.4, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27150, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27150.00", + "openInterest": 2656, + "changeinOpenInterest": 442, + "pchangeinOpenInterest": 19.9638663053297, + "totalTradedVolume": 6086, + "impliedVolatility": 34.7, + "lastPrice": 0.8, + "change": -0.75, + "pChange": -48.3870967741935, + "totalBuyQuantity": 80750, + "totalSellQuantity": 24325, + "bidQty": 7200, + "bidprice": 0.7, + "askQty": 650, + "askPrice": 0.9, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27150, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27150.00", + "openInterest": 3, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3625.4, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 3675, + "bidQty": 900, + "bidprice": 2866.65, + "askQty": 1000, + "askPrice": 3361.05, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27200, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27200.00", + "openInterest": 112, + "changeinOpenInterest": -9, + "pchangeinOpenInterest": -7.43801652892562, + "totalTradedVolume": 23, + "impliedVolatility": 57.45, + "lastPrice": 3280, + "change": -89.9000000000001, + "pChange": -2.66773494762456, + "totalBuyQuantity": 3975, + "totalSellQuantity": 3950, + "bidQty": 75, + "bidprice": 3268.85, + "askQty": 50, + "askPrice": 3319.6, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27200, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27200.00", + "openInterest": 4556, + "changeinOpenInterest": 383, + "pchangeinOpenInterest": 9.17804936496525, + "totalTradedVolume": 8457, + "impliedVolatility": 35.74, + "lastPrice": 0.95, + "change": -0.5, + "pChange": -34.4827586206897, + "totalBuyQuantity": 177000, + "totalSellQuantity": 26800, + "bidQty": 7200, + "bidprice": 0.7, + "askQty": 1625, + "askPrice": 0.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27250, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27250.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3285.6, + "askQty": 625, + "askPrice": 3401.45, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27250, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27250.00", + "openInterest": 1667, + "changeinOpenInterest": 477, + "pchangeinOpenInterest": 40.0840336134454, + "totalTradedVolume": 3737, + "impliedVolatility": 35.4, + "lastPrice": 0.75, + "change": -0.75, + "pChange": -50, + "totalBuyQuantity": 103825, + "totalSellQuantity": 30725, + "bidQty": 8750, + "bidprice": 0.7, + "askQty": 750, + "askPrice": 1.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27300, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27300.00", + "openInterest": 4323, + "changeinOpenInterest": 1394, + "pchangeinOpenInterest": 47.5930351655855, + "totalTradedVolume": 15280, + "impliedVolatility": 35.85, + "lastPrice": 0.75, + "change": -0.8, + "pChange": -51.6129032258065, + "totalBuyQuantity": 243425, + "totalSellQuantity": 45125, + "bidQty": 4225, + "bidprice": 0.75, + "askQty": 50, + "askPrice": 0.8, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27300, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27300.00", + "openInterest": 12, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -7.69230769230769, + "totalTradedVolume": 9, + "impliedVolatility": 69.71, + "lastPrice": 3420, + "change": -221, + "pChange": -6.06976105465531, + "totalBuyQuantity": 5550, + "totalSellQuantity": 5525, + "bidQty": 625, + "bidprice": 3342.8, + "askQty": 350, + "askPrice": 3419.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27350, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27350.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 0, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 3675, + "totalSellQuantity": 2925, + "bidQty": 1775, + "bidprice": 3287.75, + "askQty": 250, + "askPrice": 3567, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27350, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27350.00", + "openInterest": 2410, + "changeinOpenInterest": 695, + "pchangeinOpenInterest": 40.5247813411079, + "totalTradedVolume": 5677, + "impliedVolatility": 36.07, + "lastPrice": 0.7, + "change": -0.8, + "pChange": -53.3333333333333, + "totalBuyQuantity": 106100, + "totalSellQuantity": 26625, + "bidQty": 7175, + "bidprice": 0.7, + "askQty": 50, + "askPrice": 1.2, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27400, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27400.00", + "openInterest": 27, + "changeinOpenInterest": -7, + "pchangeinOpenInterest": -20.5882352941177, + "totalTradedVolume": 9, + "impliedVolatility": 73.4, + "lastPrice": 3530, + "change": -242, + "pChange": -6.41569459172853, + "totalBuyQuantity": 4300, + "totalSellQuantity": 5125, + "bidQty": 275, + "bidprice": 3449.4, + "askQty": 25, + "askPrice": 3521.55, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27400, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27400.00", + "openInterest": 8737, + "changeinOpenInterest": 2778, + "pchangeinOpenInterest": 46.6185601611009, + "totalTradedVolume": 28785, + "impliedVolatility": 36.75, + "lastPrice": 0.75, + "change": -0.7, + "pChange": -48.2758620689655, + "totalBuyQuantity": 331075, + "totalSellQuantity": 31625, + "bidQty": 1850, + "bidprice": 0.75, + "askQty": 2500, + "askPrice": 0.95, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27450, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27450.00", + "openInterest": 12, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2860, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3476.25, + "askQty": 625, + "askPrice": 3600.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27450, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27450.00", + "openInterest": 10825, + "changeinOpenInterest": 752, + "pchangeinOpenInterest": 7.46550183659287, + "totalTradedVolume": 15884, + "impliedVolatility": 37.64, + "lastPrice": 0.85, + "change": -0.7, + "pChange": -45.1612903225807, + "totalBuyQuantity": 144275, + "totalSellQuantity": 84350, + "bidQty": 3875, + "bidprice": 0.8, + "askQty": 225, + "askPrice": 0.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27500, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27500.00", + "openInterest": 4279, + "changeinOpenInterest": -236, + "pchangeinOpenInterest": -5.22702104097453, + "totalTradedVolume": 291, + "impliedVolatility": 72.7, + "lastPrice": 3620.05, + "change": -520.8, + "pChange": -12.5771278843716, + "totalBuyQuantity": 6075, + "totalSellQuantity": 5375, + "bidQty": 50, + "bidprice": 3573.35, + "askQty": 50, + "askPrice": 3603.8, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27500, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27500.00", + "openInterest": 62295, + "changeinOpenInterest": 13031, + "pchangeinOpenInterest": 26.4513640792465, + "totalTradedVolume": 225638, + "impliedVolatility": 37.64, + "lastPrice": 0.75, + "change": -0.65, + "pChange": -46.4285714285714, + "totalBuyQuantity": 1354075, + "totalSellQuantity": 208850, + "bidQty": 109925, + "bidprice": 0.75, + "askQty": 4050, + "askPrice": 0.8, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27550, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27550.00", + "openInterest": 16053, + "changeinOpenInterest": 7537, + "pchangeinOpenInterest": 88.5039924847346, + "totalTradedVolume": 48945, + "impliedVolatility": 38.54, + "lastPrice": 0.85, + "change": -0.55, + "pChange": -39.2857142857143, + "totalBuyQuantity": 120975, + "totalSellQuantity": 97250, + "bidQty": 6800, + "bidprice": 0.7, + "askQty": 5500, + "askPrice": 0.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27550, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27550.00", + "openInterest": 13, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 2990, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 900, + "bidprice": 3376.15, + "askQty": 3025, + "askPrice": 3940.25, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27600, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27600.00", + "openInterest": 14, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -6.66666666666667, + "totalTradedVolume": 9, + "impliedVolatility": 69.13, + "lastPrice": 3700, + "change": -371.65, + "pChange": -9.12774919258777, + "totalBuyQuantity": 5475, + "totalSellQuantity": 5475, + "bidQty": 375, + "bidprice": 3644.35, + "askQty": 900, + "askPrice": 3748.4, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27600, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27600.00", + "openInterest": 10775, + "changeinOpenInterest": 3170, + "pchangeinOpenInterest": 41.6831032215648, + "totalTradedVolume": 31877, + "impliedVolatility": 38.53, + "lastPrice": 0.75, + "change": -0.7, + "pChange": -48.2758620689655, + "totalBuyQuantity": 328575, + "totalSellQuantity": 135975, + "bidQty": 7200, + "bidprice": 0.7, + "askQty": 3600, + "askPrice": 0.9, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27650, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27650.00", + "openInterest": 14, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3705, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4300, + "totalSellQuantity": 4300, + "bidQty": 1775, + "bidprice": 3507.15, + "askQty": 625, + "askPrice": 3820, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27650, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27650.00", + "openInterest": 21271, + "changeinOpenInterest": 14007, + "pchangeinOpenInterest": 192.827643171806, + "totalTradedVolume": 72024, + "impliedVolatility": 38.97, + "lastPrice": 0.75, + "change": -0.65, + "pChange": -46.4285714285714, + "totalBuyQuantity": 184200, + "totalSellQuantity": 101425, + "bidQty": 7200, + "bidprice": 0.7, + "askQty": 2650, + "askPrice": 0.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27700, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27700.00", + "openInterest": 26, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 125.2, + "lastPrice": 4155.65, + "change": -24.3500000000004, + "pChange": -0.582535885167473, + "totalBuyQuantity": 4400, + "totalSellQuantity": 4250, + "bidQty": 100, + "bidprice": 3781.3, + "askQty": 100, + "askPrice": 3851.15, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27700, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27700.00", + "openInterest": 20535, + "changeinOpenInterest": 6516, + "pchangeinOpenInterest": 46.4797774448962, + "totalTradedVolume": 55861, + "impliedVolatility": 39.42, + "lastPrice": 0.75, + "change": -0.6, + "pChange": -44.4444444444445, + "totalBuyQuantity": 324325, + "totalSellQuantity": 112925, + "bidQty": 6875, + "bidprice": 0.7, + "askQty": 2450, + "askPrice": 0.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27750, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27750.00", + "openInterest": 66035, + "changeinOpenInterest": 52556, + "pchangeinOpenInterest": 389.910230729283, + "totalTradedVolume": 392941, + "impliedVolatility": 39.85, + "lastPrice": 0.75, + "change": -0.65, + "pChange": -46.4285714285714, + "totalBuyQuantity": 768475, + "totalSellQuantity": 699300, + "bidQty": 236475, + "bidprice": 0.7, + "askQty": 159725, + "askPrice": 0.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27750, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27750.00", + "openInterest": 10, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 3746.2, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3795.55, + "askQty": 625, + "askPrice": 3903.85, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27800, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27800.00", + "openInterest": 50518, + "changeinOpenInterest": 7235, + "pchangeinOpenInterest": 16.7155696231777, + "totalTradedVolume": 105779, + "impliedVolatility": 40.29, + "lastPrice": 0.75, + "change": -0.5, + "pChange": -40, + "totalBuyQuantity": 429875, + "totalSellQuantity": 52500, + "bidQty": 2525, + "bidprice": 0.75, + "askQty": 375, + "askPrice": 0.85, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27800, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27800.00", + "openInterest": 2, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 4242.1, + "change": 1.45000000000073, + "pChange": 0.0341928713758676, + "totalBuyQuantity": 4925, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3845, + "askQty": 625, + "askPrice": 3952.65, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27850, + "expiryDate": "28-Nov-2024", + "CE": { + "strikePrice": 27850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27850.00", + "openInterest": 51594, + "changeinOpenInterest": 12935, + "pchangeinOpenInterest": 33.4592203626581, + "totalTradedVolume": 127715, + "impliedVolatility": 40.48, + "lastPrice": 0.7, + "change": -0.55, + "pChange": -44, + "totalBuyQuantity": 549175, + "totalSellQuantity": 82400, + "bidQty": 36400, + "bidprice": 0.7, + "askQty": 5875, + "askPrice": 0.75, + "underlyingValue": 23907.25 + }, + "PE": { + "strikePrice": 27850, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27850.00", + "openInterest": 0, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 8, + "impliedVolatility": 129.33, + "lastPrice": 4317.15, + "change": -93.1000000000004, + "pChange": -2.11099144039454, + "totalBuyQuantity": 5200, + "totalSellQuantity": 4850, + "bidQty": 50, + "bidprice": 3898.25, + "askQty": 550, + "askPrice": 4032.3, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27900, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27900.00", + "openInterest": 105, + "changeinOpenInterest": 0, + "pchangeinOpenInterest": 0, + "totalTradedVolume": 0, + "impliedVolatility": 0, + "lastPrice": 4361.8, + "change": 0, + "pChange": 0, + "totalBuyQuantity": 4950, + "totalSellQuantity": 4925, + "bidQty": 625, + "bidprice": 3931.95, + "askQty": 625, + "askPrice": 4053.95, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27900, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27900.00", + "openInterest": 112821, + "changeinOpenInterest": 18218, + "pchangeinOpenInterest": 19.2573174212234, + "totalTradedVolume": 327682, + "impliedVolatility": 41.17, + "lastPrice": 0.75, + "change": -0.55, + "pChange": -42.3076923076923, + "totalBuyQuantity": 1540200, + "totalSellQuantity": 452925, + "bidQty": 205075, + "bidprice": 0.7, + "askQty": 143900, + "askPrice": 0.75, + "underlyingValue": 23907.25 + } + }, + { + "strikePrice": 27950, + "expiryDate": "28-Nov-2024", + "PE": { + "strikePrice": 27950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024PE27950.00", + "openInterest": 5, + "changeinOpenInterest": -1, + "pchangeinOpenInterest": -16.6666666666667, + "totalTradedVolume": 1, + "impliedVolatility": 123.19, + "lastPrice": 4350, + "change": -80, + "pChange": -1.8058690744921, + "totalBuyQuantity": 5150, + "totalSellQuantity": 4550, + "bidQty": 225, + "bidprice": 4027.05, + "askQty": 300, + "askPrice": 4110.85, + "underlyingValue": 23907.25 + }, + "CE": { + "strikePrice": 27950, + "expiryDate": "28-Nov-2024", + "underlying": "NIFTY", + "identifier": "OPTIDXNIFTY28-11-2024CE27950.00", + "openInterest": 146886, + "changeinOpenInterest": 26503, + "pchangeinOpenInterest": 22.015566982049, + "totalTradedVolume": 725475, + "impliedVolatility": 41.34, + "lastPrice": 0.7, + "change": -0.55, + "pChange": -44, + "totalBuyQuantity": 2808475, + "totalSellQuantity": 414100, + "bidQty": 456200, + "bidprice": 0.7, + "askQty": 11425, + "askPrice": 0.75, + "underlyingValue": 23907.25 + } + } + ], + "CE": { + "totOI": 4393060, + "totVol": 58687943 + }, + "PE": { + "totOI": 5010524, + "totVol": 44927716 + } + } +} \ No newline at end of file diff --git a/nse/controllers/options/examples/20241128_formatted_nse_nifty_option_chain.json b/nse/controllers/options/examples/20241128_formatted_nse_nifty_option_chain.json new file mode 100644 index 0000000..5e7574d --- /dev/null +++ b/nse/controllers/options/examples/20241128_formatted_nse_nifty_option_chain.json @@ -0,0 +1,34811 @@ +[ + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21600, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE21600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2900, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 2140.95, + "askQty": 1000, + "askPrice": 2549.45 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE21600.00", + "oi": 156422, + "oiChg": -24997, + "oiPctChg": -13.778600918316164, + "totTradedVol": 1024948, + "iv": 57.24, + "ltp": 0.05, + "change": -0.4, + "pChange": -88.8888888888889, + "totBuyQty": 0, + "totSellQty": 2194575, + "bidQty": 0, + "bidPrice": 0, + "askQty": 771900, + "askPrice": 0.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21650, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE21650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2900, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 2104.95, + "askQty": 1000, + "askPrice": 2608.65 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE21650.00", + "oi": 22442, + "oiChg": -12802, + "oiPctChg": -36.323913290205425, + "totTradedVol": 216454, + "iv": 58.9, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 2536575, + "totSellQty": 495875, + "bidQty": 940250, + "bidPrice": 0.1, + "askQty": 173525, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21700, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE21700.00", + "oi": 8, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 164.94, + "ltp": 2370, + "change": -260, + "pChange": -9.885931558935361, + "totBuyQty": 5925, + "totSellQty": 6225, + "bidQty": 225, + "bidPrice": 2204.55, + "askQty": 225, + "askPrice": 2235.7 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE21700.00", + "oi": 143439, + "oiChg": -107328, + "oiPctChg": -42.799889937671225, + "totTradedVol": 753387, + "iv": 54.83, + "ltp": 0.1, + "change": -0.5, + "pChange": -83.33333333333334, + "totBuyQty": 1318375, + "totSellQty": 1531225, + "bidQty": 1318375, + "bidPrice": 0.05, + "askQty": 1018725, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21750, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE21750.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 2016.05, + "askQty": 1000, + "askPrice": 2394.45 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE21750.00", + "oi": 33539, + "oiChg": -12426, + "oiPctChg": -27.033612531273796, + "totTradedVol": 137064, + "iv": 58.19, + "ltp": 0.1, + "change": -0.5, + "pChange": -83.33333333333334, + "totBuyQty": 1833525, + "totSellQty": 509125, + "bidQty": 843025, + "bidPrice": 0.1, + "askQty": 131275, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21800, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE21800.00", + "oi": 10, + "oiChg": -7, + "oiPctChg": -41.1764705882353, + "totTradedVol": 13, + "iv": 121.15, + "ltp": 2190, + "change": -228.44999999999982, + "pChange": -9.446132853687272, + "totBuyQty": 7200, + "totSellQty": 6100, + "bidQty": 50, + "bidPrice": 2081.2, + "askQty": 50, + "askPrice": 2131 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE21800.00", + "oi": 40201, + "oiChg": -68584, + "oiPctChg": -63.04545663464632, + "totTradedVol": 539665, + "iv": 55.14, + "ltp": 0.1, + "change": -0.55, + "pChange": -84.61538461538461, + "totBuyQty": 3296625, + "totSellQty": 739950, + "bidQty": 1207475, + "bidPrice": 0.1, + "askQty": 383700, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21850, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE21850.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 1917.75, + "askQty": 1000, + "askPrice": 2239.2 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE21850.00", + "oi": 15676, + "oiChg": -6552, + "oiPctChg": -29.476336152600325, + "totTradedVol": 405981, + "iv": 53.89, + "ltp": 0.1, + "change": -0.55, + "pChange": -84.61538461538461, + "totBuyQty": 18150, + "totSellQty": 441150, + "bidQty": 18150, + "bidPrice": 0.05, + "askQty": 243750, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21900, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE21900.00", + "oi": 5, + "oiChg": 1, + "oiPctChg": 25, + "totTradedVol": 3, + "iv": 172.18, + "ltp": 2220.4, + "change": -129.5999999999999, + "pChange": -5.514893617021273, + "totBuyQty": 6300, + "totSellQty": 6125, + "bidQty": 50, + "bidPrice": 1979.15, + "askQty": 50, + "askPrice": 2037.85 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE21900.00", + "oi": 27562, + "oiChg": -27154, + "oiPctChg": -49.627165728488926, + "totTradedVol": 379573, + "iv": 52.65, + "ltp": 0.1, + "change": -0.55, + "pChange": -84.61538461538461, + "totBuyQty": 785650, + "totSellQty": 266100, + "bidQty": 785650, + "bidPrice": 0.05, + "askQty": 34475, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21950, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE21950.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 1781.35, + "askQty": 1000, + "askPrice": 2198.4 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE21950.00", + "oi": 9875, + "oiChg": 1189, + "oiPctChg": 13.688694450840433, + "totTradedVol": 229783, + "iv": 51.4, + "ltp": 0.1, + "change": -0.6, + "pChange": -85.71428571428572, + "totBuyQty": 193550, + "totSellQty": 217400, + "bidQty": 193550, + "bidPrice": 0.05, + "askQty": 14200, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22000.00", + "oi": 1042, + "oiChg": -136, + "oiPctChg": -11.544991511035654, + "totTradedVol": 513, + "iv": 94.64, + "ltp": 1920, + "change": -385.1999999999998, + "pChange": -16.71004685059864, + "totBuyQty": 10200, + "totSellQty": 10775, + "bidQty": 50, + "bidPrice": 1916.4, + "askQty": 225, + "askPrice": 1920.95 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22000.00", + "oi": 100779, + "oiChg": -29755, + "oiPctChg": -22.794827401290085, + "totTradedVol": 593302, + "iv": 50.15, + "ltp": 0.1, + "change": -0.55, + "pChange": -84.61538461538461, + "totBuyQty": 226400, + "totSellQty": 932975, + "bidQty": 226400, + "bidPrice": 0.05, + "askQty": 557625, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22050, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22050.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5300, + "totSellQty": 5300, + "bidQty": 1000, + "bidPrice": 1691.55, + "askQty": 1000, + "askPrice": 1939.35 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22050.00", + "oi": 13217, + "oiChg": 4474, + "oiPctChg": 51.17236646460025, + "totTradedVol": 104358, + "iv": 46.47, + "ltp": 0.05, + "change": -0.6499999999999999, + "pChange": -92.85714285714285, + "totBuyQty": 161975, + "totSellQty": 461775, + "bidQty": 161975, + "bidPrice": 0.05, + "askQty": 219350, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22100, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22100.00", + "oi": 70, + "oiChg": -13, + "oiPctChg": -15.662650602409638, + "totTradedVol": 30, + "iv": 97.6, + "ltp": 1875, + "change": -308.1999999999998, + "pChange": -14.116892634664705, + "totBuyQty": 8350, + "totSellQty": 7750, + "bidQty": 1000, + "bidPrice": 1799.85, + "askQty": 1000, + "askPrice": 1851.95 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22100.00", + "oi": 17946, + "oiChg": -3995, + "oiPctChg": -18.207921243334397, + "totTradedVol": 139080, + "iv": 47.66, + "ltp": 0.1, + "change": -0.6, + "pChange": -85.71428571428572, + "totBuyQty": 208500, + "totSellQty": 255150, + "bidQty": 208500, + "bidPrice": 0.05, + "askQty": 49700, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22150, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22150.00", + "oi": 7, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4700, + "bidQty": 1000, + "bidPrice": 1664.45, + "askQty": 1000, + "askPrice": 1820.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22150.00", + "oi": 8460, + "oiChg": 670, + "oiPctChg": 8.600770218228497, + "totTradedVol": 41606, + "iv": 46.42, + "ltp": 0.1, + "change": -0.6, + "pChange": -85.71428571428572, + "totBuyQty": 262200, + "totSellQty": 224225, + "bidQty": 60975, + "bidPrice": 0.1, + "askQty": 21025, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22200, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22200.00", + "oi": 14, + "oiChg": -25, + "oiPctChg": -64.1025641025641, + "totTradedVol": 34, + "iv": 81.43, + "ltp": 1760.65, + "change": -398.25, + "pChange": -18.446894251702258, + "totBuyQty": 8125, + "totSellQty": 8375, + "bidQty": 300, + "bidPrice": 1710.95, + "askQty": 300, + "askPrice": 1732.9 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22200.00", + "oi": 19942, + "oiChg": -12891, + "oiPctChg": -39.262327536320164, + "totTradedVol": 111328, + "iv": 45.17, + "ltp": 0.05, + "change": -0.7, + "pChange": -93.33333333333333, + "totBuyQty": 303350, + "totSellQty": 211350, + "bidQty": 303350, + "bidPrice": 0.05, + "askQty": 18875, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22250, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22250.00", + "oi": 9, + "oiChg": -1, + "oiPctChg": -10, + "totTradedVol": 5, + "iv": 126.85, + "ltp": 1799.55, + "change": 509.20000000000005, + "pChange": 39.46216142906964, + "totBuyQty": 5600, + "totSellQty": 6150, + "bidQty": 125, + "bidPrice": 1610.55, + "askQty": 525, + "askPrice": 1723.65 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22250.00", + "oi": 8457, + "oiChg": -2859, + "oiPctChg": -25.265111346765643, + "totTradedVol": 30539, + "iv": 43.93, + "ltp": 0.1, + "change": -0.6, + "pChange": -85.71428571428572, + "totBuyQty": 178850, + "totSellQty": 244200, + "bidQty": 39825, + "bidPrice": 0.1, + "askQty": 13425, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22300, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22300.00", + "oi": 95, + "oiChg": -41, + "oiPctChg": -30.147058823529413, + "totTradedVol": 61, + "iv": 102.33, + "ltp": 1698.65, + "change": -293.54999999999995, + "pChange": -14.734966368838467, + "totBuyQty": 7925, + "totSellQty": 8350, + "bidQty": 75, + "bidPrice": 1613.55, + "askQty": 500, + "askPrice": 1620.35 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22300.00", + "oi": 26884, + "oiChg": -6403, + "oiPctChg": -19.235737675368764, + "totTradedVol": 151771, + "iv": 42.69, + "ltp": 0.05, + "change": -0.7, + "pChange": -93.33333333333333, + "totBuyQty": 499000, + "totSellQty": 478550, + "bidQty": 499000, + "bidPrice": 0.05, + "askQty": 166600, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22350, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22350.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 1471.35, + "askQty": 1000, + "askPrice": 1766.65 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22350.00", + "oi": 7029, + "oiChg": -767, + "oiPctChg": -9.838378655720883, + "totTradedVol": 34598, + "iv": 41.45, + "ltp": 0.1, + "change": -0.65, + "pChange": -86.66666666666667, + "totBuyQty": 348775, + "totSellQty": 205200, + "bidQty": 63450, + "bidPrice": 0.1, + "askQty": 28800, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22400, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22400.00", + "oi": 145, + "oiChg": -39, + "oiPctChg": -21.195652173913043, + "totTradedVol": 55, + "iv": 47.29, + "ltp": 1546.45, + "change": -358.64999999999986, + "pChange": -18.82578342344233, + "totBuyQty": 8650, + "totSellQty": 8375, + "bidQty": 75, + "bidPrice": 1514.25, + "askQty": 225, + "askPrice": 1531.25 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22400.00", + "oi": 26097, + "oiChg": -11908, + "oiPctChg": -31.332719379029076, + "totTradedVol": 109697, + "iv": 40.2, + "ltp": 0.1, + "change": -0.65, + "pChange": -86.66666666666667, + "totBuyQty": 662300, + "totSellQty": 576050, + "bidQty": 176400, + "bidPrice": 0.1, + "askQty": 82325, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22450, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22450.00", + "oi": 276, + "oiChg": -173, + "oiPctChg": -38.530066815144764, + "totTradedVol": 360, + "iv": 95.67, + "ltp": 1550, + "change": -312.9000000000001, + "pChange": -16.79639272102636, + "totBuyQty": 12200, + "totSellQty": 11625, + "bidQty": 75, + "bidPrice": 1461.05, + "askQty": 100, + "askPrice": 1472.2 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22450.00", + "oi": 11945, + "oiChg": -5046, + "oiPctChg": -29.69807545170973, + "totTradedVol": 62408, + "iv": 40.27, + "ltp": 0.1, + "change": -0.65, + "pChange": -86.66666666666667, + "totBuyQty": 116175, + "totSellQty": 263800, + "bidQty": 116175, + "bidPrice": 0.05, + "askQty": 8600, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22500, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22500.00", + "oi": 12023, + "oiChg": -417, + "oiPctChg": -3.352090032154341, + "totTradedVol": 4002, + "iv": 0, + "ltp": 1422.05, + "change": -384.35000000000014, + "pChange": -21.27712577502215, + "totBuyQty": 17200, + "totSellQty": 15725, + "bidQty": 125, + "bidPrice": 1416.75, + "askQty": 75, + "askPrice": 1419.65 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22500.00", + "oi": 177814, + "oiChg": -71813, + "oiPctChg": -28.768122038080815, + "totTradedVol": 732563, + "iv": 37.72, + "ltp": 0.1, + "change": -0.65, + "pChange": -86.66666666666667, + "totBuyQty": 1732075, + "totSellQty": 962350, + "bidQty": 1732075, + "bidPrice": 0.05, + "askQty": 47500, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22550, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22550.00", + "oi": 2968, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4700, + "totSellQty": 8275, + "bidQty": 1000, + "bidPrice": 1337.2, + "askQty": 1000, + "askPrice": 1384.45 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22550.00", + "oi": 9961, + "oiChg": -2449, + "oiPctChg": -19.734085414987913, + "totTradedVol": 67309, + "iv": 34.6, + "ltp": 0.05, + "change": -0.7, + "pChange": -93.33333333333333, + "totBuyQty": 111425, + "totSellQty": 179525, + "bidQty": 111425, + "bidPrice": 0.05, + "askQty": 37075, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22600, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22600.00", + "oi": 290, + "oiChg": -186, + "oiPctChg": -39.075630252100844, + "totTradedVol": 237, + "iv": 0, + "ltp": 1249.65, + "change": -475.64999999999986, + "pChange": -27.569118414188832, + "totBuyQty": 11525, + "totSellQty": 12775, + "bidQty": 50, + "bidPrice": 1313.7, + "askQty": 75, + "askPrice": 1320.85 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22600.00", + "oi": 25922, + "oiChg": -9552, + "oiPctChg": -26.926763263235046, + "totTradedVol": 128210, + "iv": 33.41, + "ltp": 0.05, + "change": -0.75, + "pChange": -93.75, + "totBuyQty": 1072000, + "totSellQty": 620950, + "bidQty": 1072000, + "bidPrice": 0.05, + "askQty": 163625, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22650, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22650.00", + "oi": 468, + "oiChg": 1, + "oiPctChg": 0.21413276231263384, + "totTradedVol": 2, + "iv": 74.44, + "ltp": 1327.15, + "change": -223.44999999999982, + "pChange": -14.410550754546616, + "totBuyQty": 13775, + "totSellQty": 12575, + "bidQty": 75, + "bidPrice": 1263.7, + "askQty": 75, + "askPrice": 1280.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22650.00", + "oi": 9973, + "oiChg": -3900, + "oiPctChg": -28.112160311396238, + "totTradedVol": 90818, + "iv": 32.22, + "ltp": 0.05, + "change": -0.75, + "pChange": -93.75, + "totBuyQty": 271900, + "totSellQty": 257500, + "bidQty": 271900, + "bidPrice": 0.05, + "askQty": 82050, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22700, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22700.00", + "oi": 208, + "oiChg": -24, + "oiPctChg": -10.344827586206897, + "totTradedVol": 103, + "iv": 0, + "ltp": 1215.3, + "change": -415.04999999999995, + "pChange": -25.457723801637684, + "totBuyQty": 11750, + "totSellQty": 12125, + "bidQty": 100, + "bidPrice": 1218.15, + "askQty": 75, + "askPrice": 1222.5 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22700.00", + "oi": 29321, + "oiChg": -9578, + "oiPctChg": -24.622740944497288, + "totTradedVol": 210805, + "iv": 32.75, + "ltp": 0.1, + "change": -0.7000000000000001, + "pChange": -87.5, + "totBuyQty": 450475, + "totSellQty": 331875, + "bidQty": 450475, + "bidPrice": 0.05, + "askQty": 47100, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22750, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22750.00", + "oi": 621, + "oiChg": -26, + "oiPctChg": -4.01854714064915, + "totTradedVol": 343, + "iv": 59.31, + "ltp": 1173.7, + "change": -377.54999999999995, + "pChange": -24.338436744560834, + "totBuyQty": 14550, + "totSellQty": 15200, + "bidQty": 175, + "bidPrice": 1168.55, + "askQty": 125, + "askPrice": 1172.25 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22750.00", + "oi": 13135, + "oiChg": -2846, + "oiPctChg": -17.808647769225956, + "totTradedVol": 102157, + "iv": 31.51, + "ltp": 0.1, + "change": -0.7000000000000001, + "pChange": -87.5, + "totBuyQty": 195725, + "totSellQty": 244350, + "bidQty": 10425, + "bidPrice": 0.1, + "askQty": 55900, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22800, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22800.00", + "oi": 765, + "oiChg": -74, + "oiPctChg": -8.820023837902264, + "totTradedVol": 245, + "iv": 57.79, + "ltp": 1161.55, + "change": -340.70000000000005, + "pChange": -22.679314361790652, + "totBuyQty": 12950, + "totSellQty": 11375, + "bidQty": 200, + "bidPrice": 1117.5, + "askQty": 200, + "askPrice": 1122.4 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22800.00", + "oi": 45852, + "oiChg": -13831, + "oiPctChg": -23.17410317845953, + "totTradedVol": 428685, + "iv": 28.66, + "ltp": 0.05, + "change": -0.7999999999999999, + "pChange": -94.11764705882352, + "totBuyQty": 1363175, + "totSellQty": 893250, + "bidQty": 1363175, + "bidPrice": 0.05, + "askQty": 242200, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22850, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22850.00", + "oi": 998, + "oiChg": -3, + "oiPctChg": -0.2997002997002997, + "totTradedVol": 8, + "iv": 90.32, + "ltp": 1189.6, + "change": -271.3000000000002, + "pChange": -18.570744061879672, + "totBuyQty": 13725, + "totSellQty": 12825, + "bidQty": 25, + "bidPrice": 1061.95, + "askQty": 125, + "askPrice": 1070.6 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22850.00", + "oi": 8495, + "oiChg": -4171, + "oiPctChg": -32.930680562134846, + "totTradedVol": 104564, + "iv": 29.02, + "ltp": 0.05, + "change": -0.7999999999999999, + "pChange": -94.11764705882352, + "totBuyQty": 385525, + "totSellQty": 251200, + "bidQty": 385525, + "bidPrice": 0.05, + "askQty": 8300, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22900, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22900.00", + "oi": 486, + "oiChg": -126, + "oiPctChg": -20.58823529411765, + "totTradedVol": 212, + "iv": 37.96, + "ltp": 1030.1, + "change": -379.25, + "pChange": -26.90956824067833, + "totBuyQty": 12425, + "totSellQty": 10925, + "bidQty": 25, + "bidPrice": 1014.85, + "askQty": 75, + "askPrice": 1018.65 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22900.00", + "oi": 35359, + "oiChg": -26232, + "oiPctChg": -42.59063824260038, + "totTradedVol": 387479, + "iv": 27.77, + "ltp": 0.1, + "change": -0.8, + "pChange": -88.8888888888889, + "totBuyQty": 1129550, + "totSellQty": 546100, + "bidQty": 1129550, + "bidPrice": 0.05, + "askQty": 119550, + "askPrice": 0.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22950, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE22950.00", + "oi": 625, + "oiChg": 7, + "oiPctChg": 1.132686084142395, + "totTradedVol": 105, + "iv": 92.32, + "ltp": 1114.05, + "change": -160.95000000000005, + "pChange": -12.623529411764709, + "totBuyQty": 9675, + "totSellQty": 10950, + "bidQty": 100, + "bidPrice": 963.45, + "askQty": 100, + "askPrice": 967.7 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE22950.00", + "oi": 15512, + "oiChg": -125, + "oiPctChg": -0.7993860714970903, + "totTradedVol": 184008, + "iv": 26.52, + "ltp": 0.1, + "change": -0.8, + "pChange": -88.8888888888889, + "totBuyQty": 368700, + "totSellQty": 309750, + "bidQty": 61825, + "bidPrice": 0.1, + "askQty": 32500, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23000.00", + "oi": 13433, + "oiChg": -3563, + "oiPctChg": -20.963756177924218, + "totTradedVol": 16708, + "iv": 0, + "ltp": 922.1, + "change": -382.4999999999999, + "pChange": -29.319331595891455, + "totBuyQty": 33475, + "totSellQty": 23525, + "bidQty": 175, + "bidPrice": 920.8, + "askQty": 200, + "askPrice": 922.25 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23000.00", + "oi": 260399, + "oiChg": -94728, + "oiPctChg": -26.674400988941983, + "totTradedVol": 1981869, + "iv": 25.27, + "ltp": 0.1, + "change": -0.85, + "pChange": -89.47368421052632, + "totBuyQty": 2460350, + "totSellQty": 1128175, + "bidQty": 91850, + "bidPrice": 0.1, + "askQty": 146600, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23050, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23050.00", + "oi": 1288, + "oiChg": -22, + "oiPctChg": -1.6793893129770991, + "totTradedVol": 84, + "iv": 67, + "ltp": 901.95, + "change": -355.70000000000005, + "pChange": -28.282908599371847, + "totBuyQty": 11000, + "totSellQty": 11600, + "bidQty": 25, + "bidPrice": 868.4, + "askQty": 25, + "askPrice": 872.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23050.00", + "oi": 17739, + "oiChg": -238, + "oiPctChg": -1.3239138899705178, + "totTradedVol": 342535, + "iv": 24.02, + "ltp": 0.15, + "change": -0.85, + "pChange": -85, + "totBuyQty": 851350, + "totSellQty": 272375, + "bidQty": 203325, + "bidPrice": 0.1, + "askQty": 49100, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23100, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23100.00", + "oi": 3691, + "oiChg": -587, + "oiPctChg": -13.721365123889669, + "totTradedVol": 2311, + "iv": 44.82, + "ltp": 812.8, + "change": -384.20000000000005, + "pChange": -32.096908939014206, + "totBuyQty": 13475, + "totSellQty": 12150, + "bidQty": 175, + "bidPrice": 819.5, + "askQty": 175, + "askPrice": 822 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23100.00", + "oi": 62413, + "oiChg": -22839, + "oiPctChg": -26.789987331675505, + "totTradedVol": 930407, + "iv": 22.77, + "ltp": 0.15, + "change": -0.7999999999999999, + "pChange": -84.21052631578947, + "totBuyQty": 2131775, + "totSellQty": 633675, + "bidQty": 937600, + "bidPrice": 0.1, + "askQty": 358225, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23150, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23150.00", + "oi": 2818, + "oiChg": -127, + "oiPctChg": -4.312393887945671, + "totTradedVol": 372, + "iv": 47.42, + "ltp": 819.3, + "change": -326.4000000000001, + "pChange": -28.489133280963607, + "totBuyQty": 11325, + "totSellQty": 11925, + "bidQty": 125, + "bidPrice": 763.8, + "askQty": 150, + "askPrice": 767.7 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23150.00", + "oi": 22620, + "oiChg": -3368, + "oiPctChg": -12.959827612744343, + "totTradedVol": 472472, + "iv": 21.51, + "ltp": 0.15, + "change": -0.9, + "pChange": -85.71428571428571, + "totBuyQty": 1262675, + "totSellQty": 420525, + "bidQty": 240200, + "bidPrice": 0.1, + "askQty": 175425, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23200, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23200.00", + "oi": 10670, + "oiChg": -735, + "oiPctChg": -6.444541867601929, + "totTradedVol": 3506, + "iv": 42.41, + "ltp": 721.75, + "change": -381.95000000000005, + "pChange": -34.606324182295914, + "totBuyQty": 18450, + "totSellQty": 17825, + "bidQty": 50, + "bidPrice": 714.95, + "askQty": 50, + "askPrice": 716.95 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23200.00", + "oi": 88936, + "oiChg": -50167, + "oiPctChg": -36.064642746741626, + "totTradedVol": 1257937, + "iv": 20.25, + "ltp": 0.15, + "change": -0.9500000000000001, + "pChange": -86.36363636363636, + "totBuyQty": 2008925, + "totSellQty": 1149300, + "bidQty": 360825, + "bidPrice": 0.1, + "askQty": 552325, + "askPrice": 0.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23250, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23250.00", + "oi": 5615, + "oiChg": -173, + "oiPctChg": -2.988942639944713, + "totTradedVol": 1277, + "iv": 29.52, + "ltp": 662.15, + "change": -385.55000000000007, + "pChange": -36.799656390188034, + "totBuyQty": 15575, + "totSellQty": 13150, + "bidQty": 75, + "bidPrice": 667.35, + "askQty": 50, + "askPrice": 669.7 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23250.00", + "oi": 35131, + "oiChg": -1908, + "oiPctChg": -5.151326979670078, + "totTradedVol": 984362, + "iv": 19.7, + "ltp": 0.2, + "change": -1, + "pChange": -83.33333333333334, + "totBuyQty": 2167625, + "totSellQty": 483400, + "bidQty": 64475, + "bidPrice": 0.2, + "askQty": 356975, + "askPrice": 0.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23300, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23300.00", + "oi": 31114, + "oiChg": -3036, + "oiPctChg": -8.890190336749633, + "totTradedVol": 10938, + "iv": 0, + "ltp": 613, + "change": -386.9, + "pChange": -38.693869386938694, + "totBuyQty": 24200, + "totSellQty": 29250, + "bidQty": 200, + "bidPrice": 615.4, + "askQty": 175, + "askPrice": 617.45 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23300.00", + "oi": 146336, + "oiChg": 2130, + "oiPctChg": 1.477053659348432, + "totTradedVol": 2155087, + "iv": 18.91, + "ltp": 0.2, + "change": -1.05, + "pChange": -84.00000000000001, + "totBuyQty": 3793975, + "totSellQty": 665100, + "bidQty": 347075, + "bidPrice": 0.15, + "askQty": 220450, + "askPrice": 0.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23350, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23350.00", + "oi": 22880, + "oiChg": -3314, + "oiPctChg": -12.651752309689241, + "totTradedVol": 6754, + "iv": 41.1, + "ltp": 568.05, + "change": -385.75, + "pChange": -40.44348920109038, + "totBuyQty": 17475, + "totSellQty": 16600, + "bidQty": 50, + "bidPrice": 569, + "askQty": 75, + "askPrice": 569.75 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23350.00", + "oi": 63523, + "oiChg": -1558, + "oiPctChg": -2.3939398595596257, + "totTradedVol": 1646530, + "iv": 17.08, + "ltp": 0.15, + "change": -1.2000000000000002, + "pChange": -88.8888888888889, + "totBuyQty": 3229500, + "totSellQty": 447600, + "bidQty": 478475, + "bidPrice": 0.15, + "askQty": 56500, + "askPrice": 0.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23400, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23400.00", + "oi": 52576, + "oiChg": -1813, + "oiPctChg": -3.333394620235709, + "totTradedVol": 21787, + "iv": 19.23, + "ltp": 521.35, + "change": -383.6, + "pChange": -42.38908226973866, + "totBuyQty": 33975, + "totSellQty": 23500, + "bidQty": 25, + "bidPrice": 517.75, + "askQty": 175, + "askPrice": 519.4 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23400.00", + "oi": 264746, + "oiChg": 19541, + "oiPctChg": 7.969250219204339, + "totTradedVol": 3650882, + "iv": 15.76, + "ltp": 0.2, + "change": -1.25, + "pChange": -86.20689655172414, + "totBuyQty": 5041225, + "totSellQty": 1639675, + "bidQty": 907375, + "bidPrice": 0.15, + "askQty": 543225, + "askPrice": 0.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23450, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23450.00", + "oi": 25850, + "oiChg": -541, + "oiPctChg": -2.0499412678564664, + "totTradedVol": 3317, + "iv": 21.46, + "ltp": 460.7, + "change": -393.7, + "pChange": -46.07911985018727, + "totBuyQty": 114250, + "totSellQty": 19650, + "bidQty": 75, + "bidPrice": 464.95, + "askQty": 50, + "askPrice": 466.6 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23450.00", + "oi": 167328, + "oiChg": 94441, + "oiPctChg": 129.5718029278198, + "totTradedVol": 3630028, + "iv": 14.86, + "ltp": 0.2, + "change": -1.35, + "pChange": -87.09677419354838, + "totBuyQty": 4389300, + "totSellQty": 1696775, + "bidQty": 1139900, + "bidPrice": 0.15, + "askQty": 807850, + "askPrice": 0.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23500, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23500.00", + "oi": 70779, + "oiChg": -2371, + "oiPctChg": -3.241285030758715, + "totTradedVol": 74791, + "iv": 0, + "ltp": 414.9, + "change": -386.95000000000005, + "pChange": -48.257155328303305, + "totBuyQty": 459600, + "totSellQty": 30600, + "bidQty": 200, + "bidPrice": 417.35, + "askQty": 175, + "askPrice": 418.9 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23500.00", + "oi": 430722, + "oiChg": 50326, + "oiPctChg": 13.229897264955467, + "totTradedVol": 8899835, + "iv": 13.49, + "ltp": 0.25, + "change": -1.45, + "pChange": -85.29411764705883, + "totBuyQty": 9105950, + "totSellQty": 2629650, + "bidQty": 880600, + "bidPrice": 0.2, + "askQty": 818275, + "askPrice": 0.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23550, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23550.00", + "oi": 21103, + "oiChg": -1616, + "oiPctChg": -7.112989128042607, + "totTradedVol": 12133, + "iv": 0, + "ltp": 360.4, + "change": -392.25, + "pChange": -52.11585730419186, + "totBuyQty": 147700, + "totSellQty": 20125, + "bidQty": 400, + "bidPrice": 365.2, + "askQty": 50, + "askPrice": 366.55 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23550.00", + "oi": 157746, + "oiChg": 72536, + "oiPctChg": 85.12615890153738, + "totTradedVol": 5023909, + "iv": 12.41, + "ltp": 0.25, + "change": -1.6, + "pChange": -86.48648648648648, + "totBuyQty": 6849050, + "totSellQty": 1474600, + "bidQty": 799275, + "bidPrice": 0.25, + "askQty": 424100, + "askPrice": 0.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23600, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23600.00", + "oi": 38481, + "oiChg": -9016, + "oiPctChg": -18.982251510621722, + "totTradedVol": 51435, + "iv": 0, + "ltp": 319.15, + "change": -384.20000000000005, + "pChange": -54.62429800241701, + "totBuyQty": 283775, + "totSellQty": 40175, + "bidQty": 25, + "bidPrice": 316.6, + "askQty": 75, + "askPrice": 317.9 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23600.00", + "oi": 279982, + "oiChg": 54283, + "oiPctChg": 24.051059154005998, + "totTradedVol": 9597777, + "iv": 11.95, + "ltp": 0.5, + "change": -1.45, + "pChange": -74.35897435897436, + "totBuyQty": 11555825, + "totSellQty": 1326225, + "bidQty": 195325, + "bidPrice": 0.45, + "askQty": 163900, + "askPrice": 0.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23650, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23650.00", + "oi": 7810, + "oiChg": -641, + "oiPctChg": -7.5849011951248375, + "totTradedVol": 22296, + "iv": 0, + "ltp": 272.25, + "change": -383.45000000000005, + "pChange": -58.479487570535305, + "totBuyQty": 552675, + "totSellQty": 30275, + "bidQty": 175, + "bidPrice": 270.05, + "askQty": 175, + "askPrice": 270.85 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23650.00", + "oi": 177381, + "oiChg": 108093, + "oiPctChg": 156.00536889504676, + "totTradedVol": 8944825, + "iv": 11.01, + "ltp": 0.85, + "change": -1.35, + "pChange": -61.36363636363637, + "totBuyQty": 7847075, + "totSellQty": 1044125, + "bidQty": 193500, + "bidPrice": 0.8, + "askQty": 92875, + "askPrice": 0.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23700, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23700.00", + "oi": 31668, + "oiChg": -14171, + "oiPctChg": -30.914723270577454, + "totTradedVol": 162231, + "iv": 0, + "ltp": 223.95, + "change": -382.15000000000003, + "pChange": -63.050651707639005, + "totBuyQty": 2570175, + "totSellQty": 57875, + "bidQty": 200, + "bidPrice": 222.15, + "askQty": 25, + "askPrice": 223.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23700.00", + "oi": 332641, + "oiChg": 129384, + "oiPctChg": 63.6553722627019, + "totTradedVol": 14997091, + "iv": 10.29, + "ltp": 1.6, + "change": -0.9499999999999997, + "pChange": -37.2549019607843, + "totBuyQty": 14486275, + "totSellQty": 1402100, + "bidQty": 41575, + "bidPrice": 1.6, + "askQty": 55525, + "askPrice": 1.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23750, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23750.00", + "oi": 22151, + "oiChg": -925, + "oiPctChg": -4.008493673080257, + "totTradedVol": 163772, + "iv": 0, + "ltp": 171.5, + "change": -385, + "pChange": -69.18238993710692, + "totBuyQty": 4307200, + "totSellQty": 45675, + "bidQty": 50, + "bidPrice": 170.75, + "askQty": 675, + "askPrice": 171.4 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23750.00", + "oi": 209475, + "oiChg": 121875, + "oiPctChg": 139.12671232876713, + "totTradedVol": 14174092, + "iv": 9.41, + "ltp": 3, + "change": 0.04999999999999982, + "pChange": 1.6949152542372818, + "totBuyQty": 9233875, + "totSellQty": 685250, + "bidQty": 18925, + "bidPrice": 3, + "askQty": 14050, + "askPrice": 3.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23800, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23800.00", + "oi": 61346, + "oiChg": 1605, + "oiPctChg": 2.6865971443397334, + "totTradedVol": 933995, + "iv": 8.33, + "ltp": 126.1, + "change": -378.95000000000005, + "pChange": -75.03217503217505, + "totBuyQty": 8812475, + "totSellQty": 269300, + "bidQty": 625, + "bidPrice": 125.55, + "askQty": 150, + "askPrice": 126.05 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23800.00", + "oi": 433104, + "oiChg": 228246, + "oiPctChg": 111.41668863310196, + "totTradedVol": 22530061, + "iv": 8.55, + "ltp": 6.5, + "change": 3.1, + "pChange": 91.1764705882353, + "totBuyQty": 22563500, + "totSellQty": 1307350, + "bidQty": 6050, + "bidPrice": 6.5, + "askQty": 6450, + "askPrice": 6.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23850, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23850.00", + "oi": 46448, + "oiChg": 21738, + "oiPctChg": 87.97248077701336, + "totTradedVol": 913217, + "iv": 7.25, + "ltp": 80.9, + "change": -378.85, + "pChange": -82.40348015225666, + "totBuyQty": 10389775, + "totSellQty": 158450, + "bidQty": 325, + "bidPrice": 80.6, + "askQty": 100, + "askPrice": 80.9 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23850.00", + "oi": 265717, + "oiChg": 193636, + "oiPctChg": 268.6366726321777, + "totTradedVol": 17035264, + "iv": 7.9, + "ltp": 14.75, + "change": 10.75, + "pChange": 268.75, + "totBuyQty": 16928800, + "totSellQty": 584575, + "bidQty": 2300, + "bidPrice": 14.7, + "askQty": 4725, + "askPrice": 14.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23900, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23900.00", + "oi": 262426, + "oiChg": 163770, + "oiPctChg": 166.00105416801816, + "totTradedVol": 4160383, + "iv": 7.17, + "ltp": 47.7, + "change": -356.90000000000003, + "pChange": -88.21057834898666, + "totBuyQty": 19205525, + "totSellQty": 950225, + "bidQty": 375, + "bidPrice": 47.65, + "askQty": 450, + "askPrice": 47.85 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23900.00", + "oi": 432617, + "oiChg": 247225, + "oiPctChg": 133.35257184776043, + "totTradedVol": 23200548, + "iv": 7.26, + "ltp": 30.4, + "change": 25.349999999999998, + "pChange": 501.980198019802, + "totBuyQty": 20194850, + "totSellQty": 919875, + "bidQty": 450, + "bidPrice": 30.3, + "askQty": 350, + "askPrice": 30.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23950, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE23950.00", + "oi": 220307, + "oiChg": 202913, + "oiPctChg": 1166.5689318155685, + "totTradedVol": 5651769, + "iv": 6.45, + "ltp": 23.8, + "change": -335.8, + "pChange": -93.38153503893214, + "totBuyQty": 22511425, + "totSellQty": 1115225, + "bidQty": 3825, + "bidPrice": 23.8, + "askQty": 5125, + "askPrice": 23.95 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE23950.00", + "oi": 230839, + "oiChg": 150478, + "oiPctChg": 187.25252299000758, + "totTradedVol": 17180265, + "iv": 6.85, + "ltp": 56, + "change": 49.45, + "pChange": 754.9618320610688, + "totBuyQty": 16586975, + "totSellQty": 361950, + "bidQty": 575, + "bidPrice": 56.1, + "askQty": 500, + "askPrice": 56.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24000.00", + "oi": 560326, + "oiChg": 458061, + "oiPctChg": 447.91570918691633, + "totTradedVol": 16243538, + "iv": 6.39, + "ltp": 10.85, + "change": -298.2, + "pChange": -96.48924122310305, + "totBuyQty": 29284875, + "totSellQty": 2274200, + "bidQty": 2575, + "bidPrice": 10.85, + "askQty": 8725, + "askPrice": 10.95 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24000.00", + "oi": 401113, + "oiChg": 19274, + "oiPctChg": 5.047677162364242, + "totTradedVol": 27340941, + "iv": 6.79, + "ltp": 91.85, + "change": 82.85, + "pChange": 920.5555555555555, + "totBuyQty": 29835925, + "totSellQty": 487800, + "bidQty": 125, + "bidPrice": 91.6, + "askQty": 25, + "askPrice": 91.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24050, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24050.00", + "oi": 276883, + "oiChg": 266433, + "oiPctChg": 2549.598086124402, + "totTradedVol": 12909659, + "iv": 6.96, + "ltp": 5.05, + "change": -257.2, + "pChange": -98.0743565300286, + "totBuyQty": 24768100, + "totSellQty": 951800, + "bidQty": 11450, + "bidPrice": 5.05, + "askQty": 6525, + "askPrice": 5.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24050.00", + "oi": 135157, + "oiChg": 70405, + "oiPctChg": 108.7302322708179, + "totTradedVol": 13239100, + "iv": 7.84, + "ltp": 134.25, + "change": 121.5, + "pChange": 952.9411764705882, + "totBuyQty": 17714175, + "totSellQty": 118775, + "bidQty": 400, + "bidPrice": 133.75, + "askQty": 25, + "askPrice": 134.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24100, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24100.00", + "oi": 447043, + "oiChg": 402868, + "oiPctChg": 911.9818902093945, + "totTradedVol": 20101088, + "iv": 7.96, + "ltp": 2.8, + "change": -214.54999999999998, + "pChange": -98.71175523349436, + "totBuyQty": 29665050, + "totSellQty": 1935050, + "bidQty": 23575, + "bidPrice": 2.8, + "askQty": 43525, + "askPrice": 2.85 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24100.00", + "oi": 157120, + "oiChg": -24500, + "oiPctChg": -13.489703777117057, + "totTradedVol": 14866838, + "iv": 8.36, + "ltp": 182, + "change": 163.8, + "pChange": 900.0000000000002, + "totBuyQty": 23356725, + "totSellQty": 152475, + "bidQty": 75, + "bidPrice": 181.55, + "askQty": 75, + "askPrice": 182 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24150, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24150.00", + "oi": 234345, + "oiChg": 209192, + "oiPctChg": 831.6781298453465, + "totTradedVol": 13612392, + "iv": 8.82, + "ltp": 1.5, + "change": -174.15, + "pChange": -99.1460290350128, + "totBuyQty": 28710575, + "totSellQty": 1311000, + "bidQty": 90700, + "bidPrice": 1.5, + "askQty": 80975, + "askPrice": 1.55 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24150.00", + "oi": 60469, + "oiChg": -50631, + "oiPctChg": -45.57245724572457, + "totTradedVol": 6779132, + "iv": 10.3, + "ltp": 229.1, + "change": 203.1, + "pChange": 781.1538461538462, + "totBuyQty": 19665050, + "totSellQty": 49950, + "bidQty": 150, + "bidPrice": 229.2, + "askQty": 175, + "askPrice": 229.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24200, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24200.00", + "oi": 374133, + "oiChg": 226230, + "oiPctChg": 152.9583578426401, + "totTradedVol": 20019604, + "iv": 9.79, + "ltp": 1, + "change": -135.7, + "pChange": -99.26847110460864, + "totBuyQty": 36600850, + "totSellQty": 2561450, + "bidQty": 259325, + "bidPrice": 0.95, + "askQty": 209725, + "askPrice": 1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24200.00", + "oi": 108829, + "oiChg": -174124, + "oiPctChg": -61.53813530869084, + "totTradedVol": 9550386, + "iv": 12.32, + "ltp": 284.7, + "change": 247.64999999999998, + "pChange": 668.421052631579, + "totBuyQty": 32205325, + "totSellQty": 80225, + "bidQty": 175, + "bidPrice": 283.9, + "askQty": 200, + "askPrice": 284.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24250, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24250.00", + "oi": 254846, + "oiChg": 171316, + "oiPctChg": 205.09517538608884, + "totTradedVol": 15568527, + "iv": 10.89, + "ltp": 0.85, + "change": -101.55000000000001, + "pChange": -99.16992187500001, + "totBuyQty": 34229375, + "totSellQty": 1730875, + "bidQty": 212425, + "bidPrice": 0.8, + "askQty": 218875, + "askPrice": 0.85 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24250.00", + "oi": 95335, + "oiChg": -22569, + "oiPctChg": -19.141844212240468, + "totTradedVol": 6001407, + "iv": 13.97, + "ltp": 331.5, + "change": 278.5, + "pChange": 525.4716981132075, + "totBuyQty": 22903075, + "totSellQty": 32450, + "bidQty": 50, + "bidPrice": 331, + "askQty": 175, + "askPrice": 331.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24300, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24300.00", + "oi": 603515, + "oiChg": 303834, + "oiPctChg": 101.38580690801219, + "totTradedVol": 25387916, + "iv": 12.14, + "ltp": 0.7, + "change": -73.05, + "pChange": -99.05084745762711, + "totBuyQty": 47453625, + "totSellQty": 3415075, + "bidQty": 340075, + "bidPrice": 0.65, + "askQty": 311150, + "askPrice": 0.7 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24300.00", + "oi": 205393, + "oiChg": -55565, + "oiPctChg": -21.292698441894863, + "totTradedVol": 8947431, + "iv": 14.98, + "ltp": 380.45, + "change": 306.5, + "pChange": 414.46923597025017, + "totBuyQty": 25336750, + "totSellQty": 59075, + "bidQty": 50, + "bidPrice": 378.9, + "askQty": 175, + "askPrice": 380 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24350, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24350.00", + "oi": 281427, + "oiChg": 153283, + "oiPctChg": 119.61777375452616, + "totTradedVol": 16978710, + "iv": 13.28, + "ltp": 0.55, + "change": -49.800000000000004, + "pChange": -98.90764647467726, + "totBuyQty": 28683350, + "totSellQty": 2188200, + "bidQty": 303850, + "bidPrice": 0.55, + "askQty": 349425, + "askPrice": 0.6 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24350.00", + "oi": 68251, + "oiChg": 10972, + "oiPctChg": 19.155362349203024, + "totTradedVol": 2831506, + "iv": 19.02, + "ltp": 427.75, + "change": 326.9, + "pChange": 324.1447694595935, + "totBuyQty": 16984200, + "totSellQty": 35400, + "bidQty": 175, + "bidPrice": 427.95, + "askQty": 175, + "askPrice": 429.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24400, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24400.00", + "oi": 348862, + "oiChg": 138019, + "oiPctChg": 65.46055595869913, + "totTradedVol": 18074664, + "iv": 14.5, + "ltp": 0.45, + "change": -32.199999999999996, + "pChange": -98.62174578866768, + "totBuyQty": 36355950, + "totSellQty": 2353025, + "bidQty": 339350, + "bidPrice": 0.45, + "askQty": 336025, + "askPrice": 0.5 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24400.00", + "oi": 57569, + "oiChg": -22568, + "oiPctChg": -28.161772963799493, + "totTradedVol": 1836740, + "iv": 18.16, + "ltp": 480.45, + "change": 347.75, + "pChange": 262.0572720422005, + "totBuyQty": 17372775, + "totSellQty": 34975, + "bidQty": 150, + "bidPrice": 481.75, + "askQty": 200, + "askPrice": 482.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24450, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24450.00", + "oi": 152636, + "oiChg": 59201, + "oiPctChg": 63.360625033445714, + "totTradedVol": 10606923, + "iv": 15.89, + "ltp": 0.4, + "change": -19.8, + "pChange": -98.01980198019803, + "totBuyQty": 18405550, + "totSellQty": 1455625, + "bidQty": 388825, + "bidPrice": 0.4, + "askQty": 255550, + "askPrice": 0.45 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24450.00", + "oi": 9895, + "oiChg": 1759, + "oiPctChg": 21.619960668633237, + "totTradedVol": 354696, + "iv": 24.18, + "ltp": 527.6, + "change": 356.65000000000003, + "pChange": 208.6282538754022, + "totBuyQty": 14287925, + "totSellQty": 21600, + "bidQty": 75, + "bidPrice": 527.95, + "askQty": 175, + "askPrice": 529.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24500, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24500.00", + "oi": 464306, + "oiChg": 70437, + "oiPctChg": 17.883357156821177, + "totTradedVol": 15330627, + "iv": 16.73, + "ltp": 0.35, + "change": -11.85, + "pChange": -97.1311475409836, + "totBuyQty": 26628500, + "totSellQty": 2845100, + "bidQty": 565325, + "bidPrice": 0.35, + "askQty": 407050, + "askPrice": 0.4 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24500.00", + "oi": 73728, + "oiChg": -8851, + "oiPctChg": -10.71822133956575, + "totTradedVol": 634578, + "iv": 23.04, + "ltp": 589.45, + "change": 376.65000000000003, + "pChange": 176.99718045112783, + "totBuyQty": 14840600, + "totSellQty": 41125, + "bidQty": 150, + "bidPrice": 581.75, + "askQty": 225, + "askPrice": 583.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24550, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24550.00", + "oi": 178492, + "oiChg": 56339, + "oiPctChg": 46.12166708963349, + "totTradedVol": 8629534, + "iv": 17.72, + "ltp": 0.4, + "change": -7.1, + "pChange": -94.66666666666667, + "totBuyQty": 12053125, + "totSellQty": 1308225, + "bidQty": 196975, + "bidPrice": 0.35, + "askQty": 309425, + "askPrice": 0.4 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24550.00", + "oi": 4087, + "oiChg": -855, + "oiPctChg": -17.300687980574665, + "totTradedVol": 52859, + "iv": 26.71, + "ltp": 630.9, + "change": 373.84999999999997, + "pChange": 145.43863061661153, + "totBuyQty": 7385050, + "totSellQty": 19325, + "bidQty": 175, + "bidPrice": 630.2, + "askQty": 175, + "askPrice": 631.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24600, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24600.00", + "oi": 290275, + "oiChg": 58675, + "oiPctChg": 25.3346286701209, + "totTradedVol": 9474012, + "iv": 19.37, + "ltp": 0.3, + "change": -4.55, + "pChange": -93.81443298969072, + "totBuyQty": 14018375, + "totSellQty": 1567175, + "bidQty": 390100, + "bidPrice": 0.3, + "askQty": 286125, + "askPrice": 0.35 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24600.00", + "oi": 10082, + "oiChg": -3083, + "oiPctChg": -23.418154196733763, + "totTradedVol": 68732, + "iv": 27.53, + "ltp": 689.5, + "change": 385.4, + "pChange": 126.73462676751066, + "totBuyQty": 5821650, + "totSellQty": 24825, + "bidQty": 400, + "bidPrice": 682.75, + "askQty": 400, + "askPrice": 684.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24650, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24650.00", + "oi": 140571, + "oiChg": 50741, + "oiPctChg": 56.48558388066348, + "totTradedVol": 5707393, + "iv": 20.67, + "ltp": 0.35, + "change": -2.85, + "pChange": -89.0625, + "totBuyQty": 10147650, + "totSellQty": 919950, + "bidQty": 176225, + "bidPrice": 0.3, + "askQty": 247500, + "askPrice": 0.35 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24650.00", + "oi": 665, + "oiChg": -763, + "oiPctChg": -53.431372549019606, + "totTradedVol": 9972, + "iv": 26.84, + "ltp": 728.4, + "change": 376.65, + "pChange": 107.07889125799572, + "totBuyQty": 3253550, + "totSellQty": 19975, + "bidQty": 175, + "bidPrice": 729.55, + "askQty": 200, + "askPrice": 731.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24700, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24700.00", + "oi": 298470, + "oiChg": 74599, + "oiPctChg": 33.3223150832399, + "totTradedVol": 6846611, + "iv": 21.56, + "ltp": 0.3, + "change": -1.7, + "pChange": -85, + "totBuyQty": 12811875, + "totSellQty": 1260800, + "bidQty": 312725, + "bidPrice": 0.25, + "askQty": 249250, + "askPrice": 0.3 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24700.00", + "oi": 9247, + "oiChg": -762, + "oiPctChg": -7.613148166650015, + "totTradedVol": 17203, + "iv": 0, + "ltp": 778, + "change": 375.3, + "pChange": 93.19592748944623, + "totBuyQty": 2293775, + "totSellQty": 16650, + "bidQty": 175, + "bidPrice": 780.15, + "askQty": 175, + "askPrice": 781.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24750, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24750.00", + "oi": 172597, + "oiChg": 75789, + "oiPctChg": 78.28795140897446, + "totTradedVol": 4116650, + "iv": 22.82, + "ltp": 0.25, + "change": -1.2, + "pChange": -82.75862068965517, + "totBuyQty": 9840500, + "totSellQty": 1286150, + "bidQty": 162625, + "bidPrice": 0.25, + "askQty": 306800, + "askPrice": 0.3 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24750.00", + "oi": 387, + "oiChg": -13, + "oiPctChg": -3.25, + "totTradedVol": 2702, + "iv": 0, + "ltp": 799.4, + "change": 347.95, + "pChange": 77.07387307564514, + "totBuyQty": 607700, + "totSellQty": 11975, + "bidQty": 50, + "bidPrice": 829.35, + "askQty": 50, + "askPrice": 832.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24800, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24800.00", + "oi": 384261, + "oiChg": 156730, + "oiPctChg": 68.88292144806641, + "totTradedVol": 5541678, + "iv": 24.08, + "ltp": 0.2, + "change": -0.9000000000000001, + "pChange": -81.81818181818183, + "totBuyQty": 11163700, + "totSellQty": 1710200, + "bidQty": 496200, + "bidPrice": 0.2, + "askQty": 436925, + "askPrice": 0.25 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24800.00", + "oi": 14411, + "oiChg": -1829, + "oiPctChg": -11.26231527093596, + "totTradedVol": 8949, + "iv": 29.46, + "ltp": 879.85, + "change": 381.5, + "pChange": 76.55262365807162, + "totBuyQty": 544650, + "totSellQty": 22275, + "bidQty": 25, + "bidPrice": 882.1, + "askQty": 25, + "askPrice": 884.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24850, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24850.00", + "oi": 134020, + "oiChg": 44036, + "oiPctChg": 48.93758890469417, + "totTradedVol": 1861714, + "iv": 25.32, + "ltp": 0.25, + "change": -0.65, + "pChange": -72.22222222222221, + "totBuyQty": 6746975, + "totSellQty": 948600, + "bidQty": 214600, + "bidPrice": 0.2, + "askQty": 260150, + "askPrice": 0.25 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24850.00", + "oi": 249, + "oiChg": -45, + "oiPctChg": -15.306122448979592, + "totTradedVol": 822, + "iv": 0, + "ltp": 847.25, + "change": 298.25, + "pChange": 54.32604735883424, + "totBuyQty": 424900, + "totSellQty": 11650, + "bidQty": 50, + "bidPrice": 931.9, + "askQty": 50, + "askPrice": 935.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24900, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24900.00", + "oi": 209493, + "oiChg": 90660, + "oiPctChg": 76.29193910782358, + "totTradedVol": 2791844, + "iv": 26.01, + "ltp": 0.15, + "change": -0.65, + "pChange": -81.25, + "totBuyQty": 7774025, + "totSellQty": 1431900, + "bidQty": 1191650, + "bidPrice": 0.15, + "askQty": 556500, + "askPrice": 0.2 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24900.00", + "oi": 5519, + "oiChg": -2620, + "oiPctChg": -32.190686816562234, + "totTradedVol": 4442, + "iv": 37.34, + "ltp": 978.05, + "change": 377.29999999999995, + "pChange": 62.80482729920931, + "totBuyQty": 306700, + "totSellQty": 12850, + "bidQty": 75, + "bidPrice": 982.25, + "askQty": 200, + "askPrice": 985 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24950, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE24950.00", + "oi": 116766, + "oiChg": 83747, + "oiPctChg": 253.63275689754383, + "totTradedVol": 1550957, + "iv": 27.21, + "ltp": 0.2, + "change": -0.55, + "pChange": -73.33333333333334, + "totBuyQty": 4163700, + "totSellQty": 1054800, + "bidQty": 450925, + "bidPrice": 0.15, + "askQty": 251450, + "askPrice": 0.2 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE24950.00", + "oi": 219, + "oiChg": -276, + "oiPctChg": -55.75757575757576, + "totTradedVol": 930, + "iv": 0, + "ltp": 941.1, + "change": 287.15, + "pChange": 43.91008486887376, + "totBuyQty": 12475, + "totSellQty": 10525, + "bidQty": 200, + "bidPrice": 1028.6, + "askQty": 150, + "askPrice": 1031.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25000.00", + "oi": 533036, + "oiChg": 48379, + "oiPctChg": 9.982111059986753, + "totTradedVol": 4770476, + "iv": 27.69, + "ltp": 0.15, + "change": -0.6, + "pChange": -80, + "totBuyQty": 8297550, + "totSellQty": 2072050, + "bidQty": 238300, + "bidPrice": 0.15, + "askQty": 733050, + "askPrice": 0.2 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25000.00", + "oi": 89720, + "oiChg": 18625, + "oiPctChg": 26.1973415852029, + "totTradedVol": 64802, + "iv": 39.1, + "ltp": 1077.35, + "change": 374.64999999999986, + "pChange": 53.31578198377683, + "totBuyQty": 45950, + "totSellQty": 32700, + "bidQty": 150, + "bidPrice": 1075.7, + "askQty": 125, + "askPrice": 1077 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25050, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25050.00", + "oi": 93102, + "oiChg": 64518, + "oiPctChg": 225.7136859781696, + "totTradedVol": 951750, + "iv": 29.61, + "ltp": 0.15, + "change": -0.5499999999999999, + "pChange": -78.57142857142857, + "totBuyQty": 4175450, + "totSellQty": 1306200, + "bidQty": 1289525, + "bidPrice": 0.1, + "askQty": 271100, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25050.00", + "oi": 378, + "oiChg": 11, + "oiPctChg": 2.997275204359673, + "totTradedVol": 134, + "iv": 41.45, + "ltp": 1130.85, + "change": 372.64999999999986, + "pChange": 49.14930097599576, + "totBuyQty": 13150, + "totSellQty": 14300, + "bidQty": 150, + "bidPrice": 1130, + "askQty": 100, + "askPrice": 1133.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25100, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25100.00", + "oi": 153511, + "oiChg": -11465, + "oiPctChg": -6.949495684220735, + "totTradedVol": 2089962, + "iv": 30.02, + "ltp": 0.15, + "change": -0.5499999999999999, + "pChange": -78.57142857142857, + "totBuyQty": 4162675, + "totSellQty": 1343325, + "bidQty": 1306175, + "bidPrice": 0.1, + "askQty": 364300, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25100.00", + "oi": 1809, + "oiChg": -709, + "oiPctChg": -28.157267672756156, + "totTradedVol": 1029, + "iv": 0, + "ltp": 1180.65, + "change": 377.35000000000014, + "pChange": 46.974978214863704, + "totBuyQty": 16000, + "totSellQty": 15600, + "bidQty": 100, + "bidPrice": 1179.9, + "askQty": 25, + "askPrice": 1184.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25150, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25150.00", + "oi": 45716, + "oiChg": 17645, + "oiPctChg": 62.858466032560294, + "totTradedVol": 476486, + "iv": 31.97, + "ltp": 0.15, + "change": -0.44999999999999996, + "pChange": -75, + "totBuyQty": 2742975, + "totSellQty": 403800, + "bidQty": 88375, + "bidPrice": 0.15, + "askQty": 158825, + "askPrice": 0.2 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25150.00", + "oi": 179, + "oiChg": -22, + "oiPctChg": -10.945273631840797, + "totTradedVol": 75, + "iv": 0, + "ltp": 1141.3, + "change": 293.3499999999999, + "pChange": 34.595200188690356, + "totBuyQty": 13250, + "totSellQty": 13000, + "bidQty": 50, + "bidPrice": 1229.3, + "askQty": 75, + "askPrice": 1238.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25200, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25200.00", + "oi": 182738, + "oiChg": 47110, + "oiPctChg": 34.73471554546259, + "totTradedVol": 1098437, + "iv": 32.33, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 4076700, + "totSellQty": 1047025, + "bidQty": 4076700, + "bidPrice": 0.05, + "askQty": 335925, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25200.00", + "oi": 7592, + "oiChg": -1523, + "oiPctChg": -16.708721886999452, + "totTradedVol": 2208, + "iv": 0, + "ltp": 1282, + "change": 380.35, + "pChange": 42.183774191759554, + "totBuyQty": 17650, + "totSellQty": 16225, + "bidQty": 25, + "bidPrice": 1276.35, + "askQty": 25, + "askPrice": 1280.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25250, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25250.00", + "oi": 39998, + "oiChg": 16805, + "oiPctChg": 72.4572069158798, + "totTradedVol": 342569, + "iv": 33.47, + "ltp": 0.15, + "change": -0.35, + "pChange": -70, + "totBuyQty": 1484100, + "totSellQty": 440950, + "bidQty": 549100, + "bidPrice": 0.1, + "askQty": 132650, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25250.00", + "oi": 287, + "oiChg": -14, + "oiPctChg": -4.651162790697675, + "totTradedVol": 131, + "iv": 0, + "ltp": 1249.05, + "change": 293.25, + "pChange": 30.68110483364721, + "totBuyQty": 13000, + "totSellQty": 13575, + "bidQty": 100, + "bidPrice": 1320.7, + "askQty": 500, + "askPrice": 1335.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25300, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25300.00", + "oi": 66066, + "oiChg": 7529, + "oiPctChg": 12.861950561183525, + "totTradedVol": 573880, + "iv": 34.61, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 2215400, + "totSellQty": 700125, + "bidQty": 493950, + "bidPrice": 0.1, + "askQty": 391175, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25300.00", + "oi": 2651, + "oiChg": -35, + "oiPctChg": -1.3030528667163068, + "totTradedVol": 699, + "iv": 0, + "ltp": 1375, + "change": 374.29999999999995, + "pChange": 37.403817327870485, + "totBuyQty": 13900, + "totSellQty": 16650, + "bidQty": 100, + "bidPrice": 1376.6, + "askQty": 125, + "askPrice": 1381.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25350, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25350.00", + "oi": 21672, + "oiChg": 8181, + "oiPctChg": 60.64042695130087, + "totTradedVol": 200311, + "iv": 36.64, + "ltp": 0.1, + "change": -0.45000000000000007, + "pChange": -81.81818181818183, + "totBuyQty": 1519300, + "totSellQty": 314225, + "bidQty": 465300, + "bidPrice": 0.1, + "askQty": 34875, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25350.00", + "oi": 200, + "oiChg": -13, + "oiPctChg": -6.103286384976526, + "totTradedVol": 43, + "iv": 70.21, + "ltp": 1427, + "change": 373.0999999999999, + "pChange": 35.40184078185785, + "totBuyQty": 12850, + "totSellQty": 11425, + "bidQty": 125, + "bidPrice": 1425.1, + "askQty": 75, + "askPrice": 1434.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25400, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25400.00", + "oi": 54187, + "oiChg": 21959, + "oiPctChg": 68.13640312771503, + "totTradedVol": 578803, + "iv": 35.67, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 1218000, + "totSellQty": 842600, + "bidQty": 1218000, + "bidPrice": 0.05, + "askQty": 145975, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25400.00", + "oi": 1312, + "oiChg": -607, + "oiPctChg": -31.63105784262637, + "totTradedVol": 816, + "iv": 0, + "ltp": 1436.85, + "change": 331.89999999999986, + "pChange": 30.037558260554764, + "totBuyQty": 11750, + "totSellQty": 12150, + "bidQty": 125, + "bidPrice": 1476.8, + "askQty": 175, + "askPrice": 1479.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25450, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25450.00", + "oi": 15699, + "oiChg": 8525, + "oiPctChg": 118.83189294675216, + "totTradedVol": 107285, + "iv": 37.99, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 925700, + "totSellQty": 332475, + "bidQty": 291450, + "bidPrice": 0.1, + "askQty": 29625, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25450.00", + "oi": 166, + "oiChg": -29, + "oiPctChg": -14.871794871794872, + "totTradedVol": 86, + "iv": 0, + "ltp": 1536.65, + "change": 396.25, + "pChange": 34.74658014731673, + "totBuyQty": 10550, + "totSellQty": 7425, + "bidQty": 500, + "bidPrice": 1524.8, + "askQty": 100, + "askPrice": 1535.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25500, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25500.00", + "oi": 182535, + "oiChg": -27958, + "oiPctChg": -13.28215190053826, + "totTradedVol": 1276374, + "iv": 39.11, + "ltp": 0.15, + "change": -0.35, + "pChange": -70, + "totBuyQty": 5705975, + "totSellQty": 1246375, + "bidQty": 1423375, + "bidPrice": 0.1, + "askQty": 496650, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25500.00", + "oi": 14733, + "oiChg": -905, + "oiPctChg": -5.787185062028392, + "totTradedVol": 7375, + "iv": 60.95, + "ltp": 1576.4, + "change": 374.5, + "pChange": 31.15899825276645, + "totBuyQty": 33475, + "totSellQty": 10475, + "bidQty": 50, + "bidPrice": 1578.25, + "askQty": 25, + "askPrice": 1582.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25550, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25550.00", + "oi": 12373, + "oiChg": 3660, + "oiPctChg": 42.006197635716745, + "totTradedVol": 211262, + "iv": 40.22, + "ltp": 0.15, + "change": -0.35, + "pChange": -70, + "totBuyQty": 887225, + "totSellQty": 195525, + "bidQty": 327500, + "bidPrice": 0.1, + "askQty": 13425, + "askPrice": 0.2 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25550.00", + "oi": 318, + "oiChg": -12, + "oiPctChg": -3.6363636363636362, + "totTradedVol": 140, + "iv": 44.82, + "ltp": 1628.6, + "change": 374.29999999999995, + "pChange": 29.84134577054931, + "totBuyQty": 7550, + "totSellQty": 8300, + "bidQty": 75, + "bidPrice": 1628.4, + "askQty": 25, + "askPrice": 1628.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25600, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25600.00", + "oi": 34828, + "oiChg": 524, + "oiPctChg": 1.5275186567164178, + "totTradedVol": 471835, + "iv": 40.01, + "ltp": 0.15, + "change": -0.30000000000000004, + "pChange": -66.66666666666667, + "totBuyQty": 2138875, + "totSellQty": 356150, + "bidQty": 1139925, + "bidPrice": 0.1, + "askQty": 94825, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25600.00", + "oi": 631, + "oiChg": -488, + "oiPctChg": -43.61036639857015, + "totTradedVol": 704, + "iv": 0, + "ltp": 1650.25, + "change": 351.5, + "pChange": 27.06448508180943, + "totBuyQty": 11300, + "totSellQty": 10100, + "bidQty": 75, + "bidPrice": 1676.4, + "askQty": 50, + "askPrice": 1683.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25650, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25650.00", + "oi": 9198, + "oiChg": 2143, + "oiPctChg": 30.3756201275691, + "totTradedVol": 79386, + "iv": 42.44, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 452575, + "totSellQty": 238300, + "bidQty": 63450, + "bidPrice": 0.1, + "askQty": 25500, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25650.00", + "oi": 281, + "oiChg": -2, + "oiPctChg": -0.7067137809187279, + "totTradedVol": 9, + "iv": 0, + "ltp": 1646.8, + "change": 263.64999999999986, + "pChange": 19.061562375736532, + "totBuyQty": 7625, + "totSellQty": 8450, + "bidQty": 150, + "bidPrice": 1723.55, + "askQty": 1000, + "askPrice": 1757 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25700, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25700.00", + "oi": 13531, + "oiChg": -1958, + "oiPctChg": -12.641229259474466, + "totTradedVol": 110220, + "iv": 42.15, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 433350, + "totSellQty": 276500, + "bidQty": 63225, + "bidPrice": 0.1, + "askQty": 78225, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25700.00", + "oi": 1169, + "oiChg": -695, + "oiPctChg": -37.28540772532189, + "totTradedVol": 803, + "iv": 0, + "ltp": 1731.65, + "change": 328.0500000000002, + "pChange": 23.3720433171844, + "totBuyQty": 9575, + "totSellQty": 5325, + "bidQty": 125, + "bidPrice": 1775.6, + "askQty": 75, + "askPrice": 1785 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25750, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25750.00", + "oi": 9497, + "oiChg": 4111, + "oiPctChg": 76.32751578165615, + "totTradedVol": 39371, + "iv": 43.22, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 515875, + "totSellQty": 268475, + "bidQty": 64375, + "bidPrice": 0.1, + "askQty": 1800, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25750.00", + "oi": 100, + "oiChg": -3, + "oiPctChg": -2.912621359223301, + "totTradedVol": 14, + "iv": 0, + "ltp": 1715.35, + "change": 315.3499999999999, + "pChange": 22.52499999999999, + "totBuyQty": 4725, + "totSellQty": 5800, + "bidQty": 125, + "bidPrice": 1826.85, + "askQty": 125, + "askPrice": 1845.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25800, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25800.00", + "oi": 26408, + "oiChg": -6560, + "oiPctChg": -19.89808298956564, + "totTradedVol": 220061, + "iv": 45.72, + "ltp": 0.1, + "change": -0.30000000000000004, + "pChange": -75.00000000000001, + "totBuyQty": 1271125, + "totSellQty": 238175, + "bidQty": 370575, + "bidPrice": 0.1, + "askQty": 27000, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25800.00", + "oi": 2271, + "oiChg": -1706, + "oiPctChg": -42.89665577068142, + "totTradedVol": 2355, + "iv": 58.14, + "ltp": 1881.75, + "change": 384.45000000000005, + "pChange": 25.6762171909437, + "totBuyQty": 11725, + "totSellQty": 10500, + "bidQty": 100, + "bidPrice": 1876.6, + "askQty": 175, + "askPrice": 1880.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25850, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25850.00", + "oi": 5811, + "oiChg": 3056, + "oiPctChg": 110.92558983666062, + "totTradedVol": 55209, + "iv": 46.81, + "ltp": 0.15, + "change": -0.30000000000000004, + "pChange": -66.66666666666667, + "totBuyQty": 381775, + "totSellQty": 243025, + "bidQty": 76875, + "bidPrice": 0.1, + "askQty": 29350, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25850.00", + "oi": 42, + "oiChg": -6, + "oiPctChg": -12.5, + "totTradedVol": 11, + "iv": 0, + "ltp": 1821.25, + "change": 281.0999999999999, + "pChange": 18.251469012758488, + "totBuyQty": 6400, + "totSellQty": 7475, + "bidQty": 125, + "bidPrice": 1925.35, + "askQty": 125, + "askPrice": 1948.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25900, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25900.00", + "oi": 10865, + "oiChg": 2925, + "oiPctChg": 36.83879093198993, + "totTradedVol": 72564, + "iv": 47.89, + "ltp": 0.15, + "change": -0.35, + "pChange": -70, + "totBuyQty": 647450, + "totSellQty": 334150, + "bidQty": 199125, + "bidPrice": 0.1, + "askQty": 57475, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25900.00", + "oi": 531, + "oiChg": -305, + "oiPctChg": -36.483253588516746, + "totTradedVol": 435, + "iv": 0, + "ltp": 1985, + "change": 391.45000000000005, + "pChange": 24.56465125035299, + "totBuyQty": 10125, + "totSellQty": 7875, + "bidQty": 175, + "bidPrice": 1982.2, + "askQty": 75, + "askPrice": 1988.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25950, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE25950.00", + "oi": 3885, + "oiChg": 696, + "oiPctChg": 21.82502351834431, + "totTradedVol": 46764, + "iv": 47.44, + "ltp": 0.2, + "change": -0.2, + "pChange": -50, + "totBuyQty": 204350, + "totSellQty": 201150, + "bidQty": 41700, + "bidPrice": 0.1, + "askQty": 30950, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE25950.00", + "oi": 27, + "oiChg": -19, + "oiPctChg": -41.30434782608695, + "totTradedVol": 24, + "iv": 97.79, + "ltp": 2035, + "change": 279.04999999999995, + "pChange": 15.891682564993307, + "totBuyQty": 5175, + "totSellQty": 5375, + "bidQty": 125, + "bidPrice": 2022.95, + "askQty": 125, + "askPrice": 2040.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26000.00", + "oi": 188383, + "oiChg": -58483, + "oiPctChg": -23.69018009770483, + "totTradedVol": 817870, + "iv": 50.04, + "ltp": 0.15, + "change": -0.35, + "pChange": -70, + "totBuyQty": 4004900, + "totSellQty": 1178375, + "bidQty": 1160375, + "bidPrice": 0.1, + "askQty": 638825, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26000.00", + "oi": 21375, + "oiChg": -3348, + "oiPctChg": -13.542045868219876, + "totTradedVol": 12718, + "iv": 73.12, + "ltp": 2084, + "change": 383.5, + "pChange": 22.552190532196413, + "totBuyQty": 17800, + "totSellQty": 16150, + "bidQty": 225, + "bidPrice": 2079.05, + "askQty": 125, + "askPrice": 2085.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26050, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26050.00", + "oi": 4168, + "oiChg": 26, + "oiPctChg": 0.6277160791887977, + "totTradedVol": 76236, + "iv": 49.52, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 629200, + "totSellQty": 227400, + "bidQty": 130075, + "bidPrice": 0.1, + "askQty": 3225, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26050.00", + "oi": 43, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4975, + "totSellQty": 5925, + "bidQty": 625, + "bidPrice": 2076.25, + "askQty": 1000, + "askPrice": 2394.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26100, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26100.00", + "oi": 14473, + "oiChg": -17978, + "oiPctChg": -55.40044990909371, + "totTradedVol": 327188, + "iv": 50.56, + "ltp": 0.15, + "change": -0.4, + "pChange": -72.72727272727273, + "totBuyQty": 1167050, + "totSellQty": 391100, + "bidQty": 212900, + "bidPrice": 0.1, + "askQty": 147825, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26100.00", + "oi": 642, + "oiChg": -384, + "oiPctChg": -37.42690058479532, + "totTradedVol": 450, + "iv": 106.52, + "ltp": 2187.35, + "change": 386, + "pChange": 21.428373164571017, + "totBuyQty": 9275, + "totSellQty": 8150, + "bidQty": 50, + "bidPrice": 2177.05, + "askQty": 50, + "askPrice": 2185.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26150, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26150.00", + "oi": 1983, + "oiChg": 983, + "oiPctChg": 98.3, + "totTradedVol": 17434, + "iv": 51.6, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 222200, + "totSellQty": 149100, + "bidQty": 61675, + "bidPrice": 0.1, + "askQty": 2725, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26150.00", + "oi": 30, + "oiChg": -2, + "oiPctChg": -6.25, + "totTradedVol": 5, + "iv": 0, + "ltp": 1945, + "change": 104.84999999999991, + "pChange": 5.697905062087324, + "totBuyQty": 6125, + "totSellQty": 6425, + "bidQty": 200, + "bidPrice": 2198.9, + "askQty": 200, + "askPrice": 2262.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26200, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26200.00", + "oi": 12525, + "oiChg": -15075, + "oiPctChg": -54.619565217391305, + "totTradedVol": 158925, + "iv": 54.3, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 825950, + "totSellQty": 286000, + "bidQty": 58150, + "bidPrice": 0.1, + "askQty": 20525, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26200.00", + "oi": 641, + "oiChg": -1045, + "oiPctChg": -61.98102016607355, + "totTradedVol": 1163, + "iv": 0, + "ltp": 2200, + "change": 299.4000000000001, + "pChange": 15.752920130485116, + "totBuyQty": 8450, + "totSellQty": 7200, + "bidQty": 100, + "bidPrice": 2281.85, + "askQty": 75, + "askPrice": 2289.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26250, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26250.00", + "oi": 3699, + "oiChg": -445, + "oiPctChg": -10.738416988416988, + "totTradedVol": 37360, + "iv": 55.35, + "ltp": 0.15, + "change": -0.4, + "pChange": -72.72727272727273, + "totBuyQty": 247125, + "totSellQty": 169850, + "bidQty": 65425, + "bidPrice": 0.1, + "askQty": 5775, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26250.00", + "oi": 57, + "oiChg": -6, + "oiPctChg": -9.523809523809524, + "totTradedVol": 7, + "iv": 0, + "ltp": 2225, + "change": 241.29999999999995, + "pChange": 12.164137722437866, + "totBuyQty": 5000, + "totSellQty": 6000, + "bidQty": 50, + "bidPrice": 2321.95, + "askQty": 1000, + "askPrice": 2367.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26300, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26300.00", + "oi": 9756, + "oiChg": -1324, + "oiPctChg": -11.949458483754512, + "totTradedVol": 55230, + "iv": 56.4, + "ltp": 0.1, + "change": -0.5, + "pChange": -83.33333333333334, + "totBuyQty": 356525, + "totSellQty": 233250, + "bidQty": 101200, + "bidPrice": 0.1, + "askQty": 29525, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26300.00", + "oi": 276, + "oiChg": -296, + "oiPctChg": -51.74825174825175, + "totTradedVol": 376, + "iv": 73.9, + "ltp": 2355.55, + "change": 359.9000000000001, + "pChange": 18.034224438152986, + "totBuyQty": 7575, + "totSellQty": 7450, + "bidQty": 75, + "bidPrice": 2377.35, + "askQty": 75, + "askPrice": 2387.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26350, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26350.00", + "oi": 2511, + "oiChg": 1697, + "oiPctChg": 208.47665847665849, + "totTradedVol": 15054, + "iv": 55.7, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 236850, + "totSellQty": 162025, + "bidQty": 45725, + "bidPrice": 0.1, + "askQty": 11500, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26350.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 0, + "ltp": 2270, + "change": 120, + "pChange": 5.5813953488372094, + "totBuyQty": 5000, + "totSellQty": 3675, + "bidQty": 1000, + "bidPrice": 2348.5, + "askQty": 575, + "askPrice": 2605.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26400, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26400.00", + "oi": 4324, + "oiChg": -3638, + "oiPctChg": -45.6920371765888, + "totTradedVol": 74691, + "iv": 56.72, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 692750, + "totSellQty": 227300, + "bidQty": 103875, + "bidPrice": 0.1, + "askQty": 30200, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26400.00", + "oi": 304, + "oiChg": -118, + "oiPctChg": -27.96208530805687, + "totTradedVol": 276, + "iv": 93.57, + "ltp": 2463.75, + "change": 363.75, + "pChange": 17.32142857142857, + "totBuyQty": 7200, + "totSellQty": 7175, + "bidQty": 425, + "bidPrice": 2476.95, + "askQty": 125, + "askPrice": 2487.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26450, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26450.00", + "oi": 3680, + "oiChg": 3061, + "oiPctChg": 494.50726978998387, + "totTradedVol": 12389, + "iv": 59.54, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 227675, + "totSellQty": 191750, + "bidQty": 26150, + "bidPrice": 0.1, + "askQty": 12850, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26450.00", + "oi": 19, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5050, + "totSellQty": 5925, + "bidQty": 1000, + "bidPrice": 2304.1, + "askQty": 1000, + "askPrice": 2591.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26500, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26500.00", + "oi": 33393, + "oiChg": -15490, + "oiPctChg": -31.687907861628787, + "totTradedVol": 225444, + "iv": 60.57, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 1588100, + "totSellQty": 567525, + "bidQty": 506225, + "bidPrice": 0.1, + "askQty": 248875, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26500.00", + "oi": 7439, + "oiChg": -179, + "oiPctChg": -2.3496980834864796, + "totTradedVol": 1706, + "iv": 95.39, + "ltp": 2584.5, + "change": 381.1999999999998, + "pChange": 17.301320746153486, + "totBuyQty": 12500, + "totSellQty": 12175, + "bidQty": 275, + "bidPrice": 2583.2, + "askQty": 75, + "askPrice": 2589.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26550, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26550.00", + "oi": 2700, + "oiChg": 1803, + "oiPctChg": 201.00334448160535, + "totTradedVol": 40418, + "iv": 59.75, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 457250, + "totSellQty": 184550, + "bidQty": 250225, + "bidPrice": 0.1, + "askQty": 41850, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26550.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5925, + "totSellQty": 5925, + "bidQty": 1000, + "bidPrice": 2397.1, + "askQty": 1000, + "askPrice": 2690.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26600, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26600.00", + "oi": 17673, + "oiChg": 10269, + "oiPctChg": 138.69529983792543, + "totTradedVol": 320037, + "iv": 60.75, + "ltp": 0.15, + "change": -0.25, + "pChange": -62.5, + "totBuyQty": 1697050, + "totSellQty": 561325, + "bidQty": 21525, + "bidPrice": 0.1, + "askQty": 353150, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26600.00", + "oi": 60, + "oiChg": -106, + "oiPctChg": -63.855421686746986, + "totTradedVol": 151, + "iv": 0, + "ltp": 2613.7, + "change": 328.6999999999998, + "pChange": 14.385120350109402, + "totBuyQty": 7000, + "totSellQty": 7500, + "bidQty": 100, + "bidPrice": 2671.65, + "askQty": 375, + "askPrice": 2689.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26650, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26650.00", + "oi": 3536, + "oiChg": 2506, + "oiPctChg": 243.3009708737864, + "totTradedVol": 60632, + "iv": 61.75, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 216825, + "totSellQty": 230925, + "bidQty": 59125, + "bidPrice": 0.1, + "askQty": 99025, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26650.00", + "oi": 20, + "oiChg": -5, + "oiPctChg": -20, + "totTradedVol": 17, + "iv": 0, + "ltp": 2690, + "change": 417.5, + "pChange": 18.371837183718373, + "totBuyQty": 5250, + "totSellQty": 6750, + "bidQty": 125, + "bidPrice": 2713.25, + "askQty": 1000, + "askPrice": 2818.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26700, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26700.00", + "oi": 7444, + "oiChg": -2461, + "oiPctChg": -24.846037354871278, + "totTradedVol": 67519, + "iv": 62.75, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 186050, + "totSellQty": 143950, + "bidQty": 38325, + "bidPrice": 0.1, + "askQty": 7175, + "askPrice": 0.2 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26700.00", + "oi": 748, + "oiChg": -11, + "oiPctChg": -1.4492753623188406, + "totTradedVol": 16, + "iv": 159.04, + "ltp": 2847.2, + "change": 360.0499999999997, + "pChange": 14.47640874092836, + "totBuyQty": 6675, + "totSellQty": 7450, + "bidQty": 100, + "bidPrice": 2778.75, + "askQty": 150, + "askPrice": 2788.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26750, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26750.00", + "oi": 8740, + "oiChg": 8023, + "oiPctChg": 1118.9679218967922, + "totTradedVol": 147274, + "iv": 63.74, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 1059225, + "totSellQty": 343100, + "bidQty": 415175, + "bidPrice": 0.1, + "askQty": 207475, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26750.00", + "oi": 18, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 17, + "iv": 0, + "ltp": 2727.5, + "change": 288.4499999999998, + "pChange": 11.826325823578845, + "totBuyQty": 3850, + "totSellQty": 4475, + "bidQty": 75, + "bidPrice": 2827.65, + "askQty": 375, + "askPrice": 2983.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26800, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26800.00", + "oi": 3123, + "oiChg": -1449, + "oiPctChg": -31.69291338582677, + "totTradedVol": 39149, + "iv": 64.73, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 194875, + "totSellQty": 150325, + "bidQty": 6375, + "bidPrice": 0.1, + "askQty": 25300, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26800.00", + "oi": 82, + "oiChg": -62, + "oiPctChg": -43.05555555555556, + "totTradedVol": 141, + "iv": 0, + "ltp": 2823.95, + "change": 345.9499999999998, + "pChange": 13.96085552865213, + "totBuyQty": 4125, + "totSellQty": 3975, + "bidQty": 25, + "bidPrice": 2874.85, + "askQty": 50, + "askPrice": 2885.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26850, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26850.00", + "oi": 1734, + "oiChg": 931, + "oiPctChg": 115.94022415940225, + "totTradedVol": 7356, + "iv": 65.72, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 252825, + "totSellQty": 172125, + "bidQty": 120000, + "bidPrice": 0.1, + "askQty": 26025, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26850.00", + "oi": 33, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 33, + "iv": 0, + "ltp": 2880.1, + "change": 341.2999999999997, + "pChange": 13.443359067275868, + "totBuyQty": 5125, + "totSellQty": 5450, + "bidQty": 1000, + "bidPrice": 2893.55, + "askQty": 1000, + "askPrice": 3039.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26900, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26900.00", + "oi": 3206, + "oiChg": -1374, + "oiPctChg": -30, + "totTradedVol": 20122, + "iv": 66.71, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 359575, + "totSellQty": 185150, + "bidQty": 117050, + "bidPrice": 0.1, + "askQty": 46450, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26900.00", + "oi": 168, + "oiChg": -3, + "oiPctChg": -1.7543859649122806, + "totTradedVol": 12, + "iv": 0, + "ltp": 2850, + "change": 225, + "pChange": 8.571428571428571, + "totBuyQty": 3875, + "totSellQty": 4400, + "bidQty": 100, + "bidPrice": 2977.75, + "askQty": 175, + "askPrice": 3110.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26950, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE26950.00", + "oi": 4282, + "oiChg": 3755, + "oiPctChg": 712.5237191650854, + "totTradedVol": 16056, + "iv": 67.69, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 136975, + "totSellQty": 152725, + "bidQty": 9700, + "bidPrice": 0.1, + "askQty": 1350, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE26950.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3675, + "totSellQty": 4675, + "bidQty": 1775, + "bidPrice": 2800.05, + "askQty": 1000, + "askPrice": 3078.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27000, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27000.00", + "oi": 95183, + "oiChg": -8917, + "oiPctChg": -8.565802113352545, + "totTradedVol": 156004, + "iv": 70.77, + "ltp": 0.15, + "change": -0.30000000000000004, + "pChange": -66.66666666666667, + "totBuyQty": 1677675, + "totSellQty": 580250, + "bidQty": 336300, + "bidPrice": 0.1, + "askQty": 19975, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27000.00", + "oi": 16133, + "oiChg": -733, + "oiPctChg": -4.346021581880707, + "totTradedVol": 3549, + "iv": 0, + "ltp": 3080, + "change": 378.9499999999998, + "pChange": 14.029729179393192, + "totBuyQty": 12925, + "totSellQty": 12125, + "bidQty": 50, + "bidPrice": 3078.15, + "askQty": 125, + "askPrice": 3086.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27050, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27050.00", + "oi": 2945, + "oiChg": 607, + "oiPctChg": 25.96236099230111, + "totTradedVol": 20025, + "iv": 69.65, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 97600, + "totSellQty": 140075, + "bidQty": 9375, + "bidPrice": 0.1, + "askQty": 16750, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27050.00", + "oi": 302, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5300, + "totSellQty": 3800, + "bidQty": 1000, + "bidPrice": 3063.9, + "askQty": 1000, + "askPrice": 3192.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27100, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27100.00", + "oi": 4951, + "oiChg": 1862, + "oiPctChg": 60.278407251537715, + "totTradedVol": 20320, + "iv": 70.62, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 240550, + "totSellQty": 180250, + "bidQty": 240550, + "bidPrice": 0.05, + "askQty": 43850, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27100.00", + "oi": 77, + "oiChg": -1, + "oiPctChg": -1.2820512820512822, + "totTradedVol": 11, + "iv": 0, + "ltp": 3110, + "change": 320, + "pChange": 11.469534050179211, + "totBuyQty": 3825, + "totSellQty": 4300, + "bidQty": 50, + "bidPrice": 3177.05, + "askQty": 225, + "askPrice": 3196.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27150, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27150.00", + "oi": 1721, + "oiChg": -715, + "oiPctChg": -29.351395730706077, + "totTradedVol": 35358, + "iv": 73.77, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 52925, + "totSellQty": 130800, + "bidQty": 4475, + "bidPrice": 0.1, + "askQty": 4625, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27150.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 2948, + "askQty": 1000, + "askPrice": 3448.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27200, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27200.00", + "oi": 3443, + "oiChg": -147, + "oiPctChg": -4.094707520891365, + "totTradedVol": 11449, + "iv": 74.76, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 293150, + "totSellQty": 157275, + "bidQty": 13700, + "bidPrice": 0.1, + "askQty": 20900, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27200.00", + "oi": 62, + "oiChg": -4, + "oiPctChg": -6.0606060606060606, + "totTradedVol": 24, + "iv": 0, + "ltp": 3280, + "change": 382.6999999999998, + "pChange": 13.208849618610424, + "totBuyQty": 5400, + "totSellQty": 5625, + "bidQty": 100, + "bidPrice": 3280.1, + "askQty": 150, + "askPrice": 3297.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27250, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27250.00", + "oi": 5431, + "oiChg": 3715, + "oiPctChg": 216.49184149184148, + "totTradedVol": 10980, + "iv": 77.44, + "ltp": 0.15, + "change": -0.35, + "pChange": -70, + "totBuyQty": 230400, + "totSellQty": 127200, + "bidQty": 55425, + "bidPrice": 0.1, + "askQty": 5450, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5300, + "totSellQty": 3775, + "bidQty": 1000, + "bidPrice": 3061.7, + "askQty": 1000, + "askPrice": 3393.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27300, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27300.00", + "oi": 3554, + "oiChg": -139, + "oiPctChg": -3.7638776062821555, + "totTradedVol": 13928, + "iv": 74.49, + "ltp": 0.1, + "change": -0.30000000000000004, + "pChange": -75.00000000000001, + "totBuyQty": 217600, + "totSellQty": 146325, + "bidQty": 9350, + "bidPrice": 0.1, + "askQty": 2825, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27300.00", + "oi": 9, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 4, + "iv": 0, + "ltp": 3310, + "change": 300.9000000000001, + "pChange": 9.999667674720019, + "totBuyQty": 5350, + "totSellQty": 6175, + "bidQty": 75, + "bidPrice": 3373.05, + "askQty": 1000, + "askPrice": 3398.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27350, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27350.00", + "oi": 4594, + "oiChg": 2640, + "oiPctChg": 135.10747185261002, + "totTradedVol": 15221, + "iv": 75.45, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 94575, + "totSellQty": 120925, + "bidQty": 5400, + "bidPrice": 0.1, + "askQty": 1325, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5925, + "totSellQty": 4150, + "bidQty": 1000, + "bidPrice": 3100.85, + "askQty": 1000, + "askPrice": 3704.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27400, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27400.00", + "oi": 4263, + "oiChg": -3332, + "oiPctChg": -43.87096774193548, + "totTradedVol": 32360, + "iv": 76.41, + "ltp": 0.1, + "change": -0.45000000000000007, + "pChange": -81.81818181818183, + "totBuyQty": 325450, + "totSellQty": 159850, + "bidQty": 325450, + "bidPrice": 0.05, + "askQty": 5775, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27400.00", + "oi": 8, + "oiChg": -17, + "oiPctChg": -68, + "totTradedVol": 20, + "iv": 0, + "ltp": 3420, + "change": 340, + "pChange": 11.03896103896104, + "totBuyQty": 4800, + "totSellQty": 5450, + "bidQty": 50, + "bidPrice": 3467, + "askQty": 75, + "askPrice": 3492.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27450, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27450.00", + "oi": 6584, + "oiChg": -2505, + "oiPctChg": -27.56078776543074, + "totTradedVol": 53926, + "iv": 77.36, + "ltp": 0.1, + "change": -0.45000000000000007, + "pChange": -81.81818181818183, + "totBuyQty": 28150, + "totSellQty": 123800, + "bidQty": 28150, + "bidPrice": 0.05, + "askQty": 16200, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27450.00", + "oi": 12, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5925, + "totSellQty": 5925, + "bidQty": 1000, + "bidPrice": 3186.4, + "askQty": 1000, + "askPrice": 3820.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27500, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27500.00", + "oi": 56724, + "oiChg": -19178, + "oiPctChg": -25.26679138889621, + "totTradedVol": 231995, + "iv": 78.31, + "ltp": 0.1, + "change": -0.45000000000000007, + "pChange": -81.81818181818183, + "totBuyQty": 1094450, + "totSellQty": 329475, + "bidQty": 1094450, + "bidPrice": 0.05, + "askQty": 27800, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27500.00", + "oi": 1005, + "oiChg": -676, + "oiPctChg": -40.214158239143366, + "totTradedVol": 1433, + "iv": 0, + "ltp": 3581.35, + "change": 379.6999999999998, + "pChange": 11.859509940187085, + "totBuyQty": 10000, + "totSellQty": 8350, + "bidQty": 50, + "bidPrice": 3581.55, + "askQty": 125, + "askPrice": 3586.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27550, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27550.00", + "oi": 13462, + "oiChg": -1128, + "oiPctChg": -7.731322823851953, + "totTradedVol": 67172, + "iv": 79.26, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 74500, + "totSellQty": 126300, + "bidQty": 74500, + "bidPrice": 0.05, + "askQty": 775, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27550.00", + "oi": 13, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 3261.6, + "askQty": 1000, + "askPrice": 3936.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27600, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27600.00", + "oi": 11692, + "oiChg": 741, + "oiPctChg": 6.7665053419779015, + "totTradedVol": 68122, + "iv": 76.51, + "ltp": 0.05, + "change": -0.5, + "pChange": -90.9090909090909, + "totBuyQty": 0, + "totSellQty": 243800, + "bidQty": 0, + "bidPrice": 0, + "askQty": 78400, + "askPrice": 0.05 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27600.00", + "oi": 10, + "oiChg": -3, + "oiPctChg": -23.076923076923077, + "totTradedVol": 13, + "iv": 0, + "ltp": 3605, + "change": 255, + "pChange": 7.611940298507462, + "totBuyQty": 5225, + "totSellQty": 5200, + "bidQty": 1075, + "bidPrice": 3613, + "askQty": 1000, + "askPrice": 3703.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27650, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27650.00", + "oi": 33531, + "oiChg": 2295, + "oiPctChg": 7.347291586630811, + "totTradedVol": 82577, + "iv": 81.15, + "ltp": 0.05, + "change": -0.5, + "pChange": -90.9090909090909, + "totBuyQty": 0, + "totSellQty": 172550, + "bidQty": 0, + "bidPrice": 0, + "askQty": 21900, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27650.00", + "oi": 8, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 3365.55, + "askQty": 1000, + "askPrice": 3800.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27700, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27700.00", + "oi": 16279, + "oiChg": -5554, + "oiPctChg": -25.438556313836852, + "totTradedVol": 79245, + "iv": 78.32, + "ltp": 0.1, + "change": -0.35, + "pChange": -77.77777777777777, + "totBuyQty": 352025, + "totSellQty": 171625, + "bidQty": 352025, + "bidPrice": 0.05, + "askQty": 16250, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27700.00", + "oi": 26, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 6, + "iv": 0, + "ltp": 3677.35, + "change": -478.2999999999997, + "pChange": -11.509631465595028, + "totBuyQty": 6775, + "totSellQty": 5300, + "bidQty": 1000, + "bidPrice": 3753.05, + "askQty": 275, + "askPrice": 3790.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27750, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27750.00", + "oi": 63572, + "oiChg": -74493, + "oiPctChg": -53.95502118567342, + "totTradedVol": 419790, + "iv": 79.22, + "ltp": 0.05, + "change": -0.5, + "pChange": -90.9090909090909, + "totBuyQty": 0, + "totSellQty": 514725, + "bidQty": 0, + "bidPrice": 0, + "askQty": 140075, + "askPrice": 0.05 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27750.00", + "oi": 7, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4700, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 3643.8, + "askQty": 1000, + "askPrice": 4152.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27800, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27800.00", + "oi": 33147, + "oiChg": -32959, + "oiPctChg": -49.857804132756485, + "totTradedVol": 211107, + "iv": 83.97, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 90400, + "totSellQty": 200875, + "bidQty": 90400, + "bidPrice": 0.05, + "askQty": 19300, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27800.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 0, + "ltp": 3740, + "change": -500.64999999999964, + "pChange": -11.805973140909995, + "totBuyQty": 5800, + "totSellQty": 4800, + "bidQty": 1000, + "bidPrice": 3828, + "askQty": 900, + "askPrice": 4084.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27850, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27850.00", + "oi": 43557, + "oiChg": -27416, + "oiPctChg": -38.62877432262973, + "totTradedVol": 154645, + "iv": 84.91, + "ltp": 0.1, + "change": -0.45000000000000007, + "pChange": -81.81818181818183, + "totBuyQty": 430975, + "totSellQty": 261200, + "bidQty": 430975, + "bidPrice": 0.05, + "askQty": 60850, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4675, + "totSellQty": 4675, + "bidQty": 1000, + "bidPrice": 3616.95, + "askQty": 1000, + "askPrice": 4070.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27900, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27900.00", + "oi": 59361, + "oiChg": -47950, + "oiPctChg": -44.68321048168408, + "totTradedVol": 268743, + "iv": 85.84, + "ltp": 0.15, + "change": -0.35, + "pChange": -70, + "totBuyQty": 478550, + "totSellQty": 230100, + "bidQty": 102900, + "bidPrice": 0.1, + "askQty": 22850, + "askPrice": 0.15 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27900.00", + "oi": 46, + "oiChg": -32, + "oiPctChg": -41.02564102564103, + "totTradedVol": 40, + "iv": 0, + "ltp": 3980, + "change": 400.0500000000002, + "pChange": 11.174737077333488, + "totBuyQty": 4650, + "totSellQty": 4650, + "bidQty": 175, + "bidPrice": 3969.1, + "askQty": 100, + "askPrice": 3995.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27950, + "expiry": "28-Nov-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY28-11-2024CE27950.00", + "oi": 129710, + "oiChg": -61277, + "oiPctChg": -32.08438270667637, + "totTradedVol": 1568717, + "iv": 86.77, + "ltp": 0.1, + "change": -0.4, + "pChange": -80, + "totBuyQty": 1318975, + "totSellQty": 348900, + "bidQty": 1318975, + "bidPrice": 0.05, + "askQty": 81300, + "askPrice": 0.1 + }, + "pe": { + "id": "OPTIDXNIFTY28-11-2024PE27950.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4725, + "totSellQty": 4725, + "bidQty": 1050, + "bidPrice": 3919.7, + "askQty": 1000, + "askPrice": 4084.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21600, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE21600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3825, + "totSellQty": 2825, + "bidQty": 1000, + "bidPrice": 2384.65, + "askQty": 25, + "askPrice": 2420.45 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE21600.00", + "oi": 111870, + "oiChg": 43893, + "oiPctChg": 64.5703693896465, + "totTradedVol": 178028, + "iv": 29.87, + "ltp": 1.8, + "change": -0.30000000000000004, + "pChange": -14.285714285714288, + "totBuyQty": 2571925, + "totSellQty": 590500, + "bidQty": 3075, + "bidPrice": 1.75, + "askQty": 10000, + "askPrice": 1.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21650, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE21650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2825, + "totSellQty": 3825, + "bidQty": 25, + "bidPrice": 2335.6, + "askQty": 1000, + "askPrice": 2386.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE21650.00", + "oi": 13923, + "oiChg": 11396, + "oiPctChg": 450.9695290858726, + "totTradedVol": 29755, + "iv": 29.18, + "ltp": 1.7, + "change": -0.5000000000000002, + "pChange": -22.727272727272734, + "totBuyQty": 626300, + "totSellQty": 101900, + "bidQty": 1975, + "bidPrice": 1.7, + "askQty": 1875, + "askPrice": 1.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21700, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE21700.00", + "oi": 36, + "oiChg": 12, + "oiPctChg": 50, + "totTradedVol": 24, + "iv": 66.26, + "ltp": 2427, + "change": -173, + "pChange": -6.653846153846153, + "totBuyQty": 3775, + "totSellQty": 4925, + "bidQty": 75, + "bidPrice": 2288, + "askQty": 1000, + "askPrice": 2343.95 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE21700.00", + "oi": 23998, + "oiChg": 19875, + "oiPctChg": 482.051903953432, + "totTradedVol": 46518, + "iv": 28.78, + "ltp": 1.8, + "change": -0.4999999999999998, + "pChange": -21.7391304347826, + "totBuyQty": 789300, + "totSellQty": 116000, + "bidQty": 5600, + "bidPrice": 1.8, + "askQty": 5725, + "askPrice": 1.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21750, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE21750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3825, + "totSellQty": 2825, + "bidQty": 1000, + "bidPrice": 2237.35, + "askQty": 25, + "askPrice": 2272.9 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE21750.00", + "oi": 1805, + "oiChg": 1000, + "oiPctChg": 124.22360248447205, + "totTradedVol": 4221, + "iv": 28, + "ltp": 1.7, + "change": -0.7, + "pChange": -29.166666666666668, + "totBuyQty": 231475, + "totSellQty": 51825, + "bidQty": 4600, + "bidPrice": 1.7, + "askQty": 2225, + "askPrice": 1.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21800, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE21800.00", + "oi": 9, + "oiChg": 9, + "oiPctChg": 0, + "totTradedVol": 13, + "iv": 51.6, + "ltp": 2250, + "change": -537.5500000000002, + "pChange": -19.28395903212499, + "totBuyQty": 4725, + "totSellQty": 4775, + "bidQty": 1000, + "bidPrice": 2179.4, + "askQty": 1000, + "askPrice": 2226.7 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE21800.00", + "oi": 7195, + "oiChg": 3205, + "oiPctChg": 80.32581453634086, + "totTradedVol": 27991, + "iv": 27.69, + "ltp": 1.85, + "change": -0.3999999999999999, + "pChange": -17.77777777777777, + "totBuyQty": 456475, + "totSellQty": 85925, + "bidQty": 1575, + "bidPrice": 1.85, + "askQty": 3625, + "askPrice": 1.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21850, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE21850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3825, + "totSellQty": 2825, + "bidQty": 1000, + "bidPrice": 2125.8, + "askQty": 25, + "askPrice": 2174.75 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE21850.00", + "oi": 558, + "oiChg": 261, + "oiPctChg": 87.87878787878788, + "totTradedVol": 2416, + "iv": 27.27, + "ltp": 1.85, + "change": -0.5, + "pChange": -21.27659574468085, + "totBuyQty": 167575, + "totSellQty": 16175, + "bidQty": 1225, + "bidPrice": 1.8, + "askQty": 275, + "askPrice": 1.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21900, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE21900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3450, + "totSellQty": 4450, + "bidQty": 25, + "bidPrice": 2082.75, + "askQty": 1000, + "askPrice": 2131.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE21900.00", + "oi": 4671, + "oiChg": 3699, + "oiPctChg": 380.55555555555554, + "totTradedVol": 8774, + "iv": 26.84, + "ltp": 2.05, + "change": -0.3500000000000001, + "pChange": -14.583333333333337, + "totBuyQty": 590125, + "totSellQty": 32825, + "bidQty": 550, + "bidPrice": 2.05, + "askQty": 4000, + "askPrice": 2.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21950, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE21950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3825, + "totSellQty": 3825, + "bidQty": 1000, + "bidPrice": 2014.05, + "askQty": 1000, + "askPrice": 2076.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE21950.00", + "oi": 482, + "oiChg": 161, + "oiPctChg": 50.15576323987539, + "totTradedVol": 2227, + "iv": 26.24, + "ltp": 2, + "change": -0.4500000000000002, + "pChange": -18.367346938775515, + "totBuyQty": 150950, + "totSellQty": 16950, + "bidQty": 2225, + "bidPrice": 1.95, + "askQty": 1475, + "askPrice": 2.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22000.00", + "oi": 226, + "oiChg": 110, + "oiPctChg": 94.82758620689656, + "totTradedVol": 186, + "iv": 27.12, + "ltp": 1985, + "change": -360.25, + "pChange": -15.360835731798318, + "totBuyQty": 10150, + "totSellQty": 7600, + "bidQty": 50, + "bidPrice": 1998.45, + "askQty": 25, + "askPrice": 2013.9 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22000.00", + "oi": 82923, + "oiChg": 53560, + "oiPctChg": 182.40642986070907, + "totTradedVol": 193210, + "iv": 25.94, + "ltp": 2.2, + "change": -0.34999999999999964, + "pChange": -13.725490196078418, + "totBuyQty": 1507350, + "totSellQty": 145050, + "bidQty": 4275, + "bidPrice": 2.15, + "askQty": 7125, + "askPrice": 2.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22050, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3825, + "totSellQty": 3825, + "bidQty": 1000, + "bidPrice": 1917.35, + "askQty": 1000, + "askPrice": 1977.9 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22050.00", + "oi": 712, + "oiChg": 150, + "oiPctChg": 26.690391459074732, + "totTradedVol": 3568, + "iv": 25.33, + "ltp": 2.2, + "change": -0.2999999999999998, + "pChange": -11.999999999999993, + "totBuyQty": 127450, + "totSellQty": 14025, + "bidQty": 850, + "bidPrice": 2.15, + "askQty": 650, + "askPrice": 2.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22100, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22100.00", + "oi": 24, + "oiChg": 24, + "oiPctChg": 0, + "totTradedVol": 30, + "iv": 43.99, + "ltp": 1940, + "change": -556.3000000000002, + "pChange": -22.284981773024082, + "totBuyQty": 5150, + "totSellQty": 4125, + "bidQty": 1000, + "bidPrice": 1884.1, + "askQty": 650, + "askPrice": 1918.25 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22100.00", + "oi": 6807, + "oiChg": 4543, + "oiPctChg": 200.6625441696113, + "totTradedVol": 23060, + "iv": 24.73, + "ltp": 2.25, + "change": -0.3999999999999999, + "pChange": -15.094339622641506, + "totBuyQty": 309050, + "totSellQty": 39550, + "bidQty": 4925, + "bidPrice": 2.2, + "askQty": 1125, + "askPrice": 2.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22150, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4450, + "totSellQty": 4450, + "bidQty": 1000, + "bidPrice": 1834.8, + "askQty": 1000, + "askPrice": 1880.05 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22150.00", + "oi": 883, + "oiChg": 547, + "oiPctChg": 162.79761904761904, + "totTradedVol": 5148, + "iv": 24.32, + "ltp": 2.4, + "change": -0.10000000000000009, + "pChange": -4.0000000000000036, + "totBuyQty": 140000, + "totSellQty": 14625, + "bidQty": 400, + "bidPrice": 2.35, + "askQty": 875, + "askPrice": 2.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22200, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22200.00", + "oi": 21, + "oiChg": 21, + "oiPctChg": 0, + "totTradedVol": 26, + "iv": 43.22, + "ltp": 1846, + "change": -554.0999999999999, + "pChange": -23.086538060914126, + "totBuyQty": 4650, + "totSellQty": 4650, + "bidQty": 1000, + "bidPrice": 1775.45, + "askQty": 1000, + "askPrice": 1828.7 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22200.00", + "oi": 8910, + "oiChg": 4831, + "oiPctChg": 118.43589114979162, + "totTradedVol": 44464, + "iv": 23.96, + "ltp": 2.5, + "change": -0.04999999999999982, + "pChange": -1.9607843137254832, + "totBuyQty": 393650, + "totSellQty": 40025, + "bidQty": 32750, + "bidPrice": 2.5, + "askQty": 6225, + "askPrice": 2.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22250, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3450, + "totSellQty": 3450, + "bidQty": 25, + "bidPrice": 1738.8, + "askQty": 25, + "askPrice": 1770.55 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22250.00", + "oi": 10450, + "oiChg": 848, + "oiPctChg": 8.831493438866902, + "totTradedVol": 8433, + "iv": 23.35, + "ltp": 2.55, + "change": 0, + "pChange": 0, + "totBuyQty": 134375, + "totSellQty": 19275, + "bidQty": 1100, + "bidPrice": 2.55, + "askQty": 1800, + "askPrice": 2.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22300, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22300.00", + "oi": 21, + "oiChg": 16, + "oiPctChg": 320, + "totTradedVol": 20, + "iv": 41.14, + "ltp": 1745, + "change": -305, + "pChange": -14.878048780487804, + "totBuyQty": 4100, + "totSellQty": 4100, + "bidQty": 1000, + "bidPrice": 1683.95, + "askQty": 1000, + "askPrice": 1726.55 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22300.00", + "oi": 7322, + "oiChg": 884, + "oiPctChg": 13.730972351662007, + "totTradedVol": 37120, + "iv": 22.85, + "ltp": 2.65, + "change": 0, + "pChange": 0, + "totBuyQty": 526500, + "totSellQty": 21375, + "bidQty": 2750, + "bidPrice": 2.65, + "askQty": 4850, + "askPrice": 2.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22350, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3300, + "totSellQty": 3450, + "bidQty": 1000, + "bidPrice": 1637.35, + "askQty": 25, + "askPrice": 1671.3 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22350.00", + "oi": 3956, + "oiChg": 849, + "oiPctChg": 27.325394271000967, + "totTradedVol": 13641, + "iv": 22.18, + "ltp": 2.7, + "change": 0, + "pChange": 0, + "totBuyQty": 111725, + "totSellQty": 13300, + "bidQty": 1125, + "bidPrice": 2.65, + "askQty": 600, + "askPrice": 2.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22400, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22400.00", + "oi": 27, + "oiChg": 20, + "oiPctChg": 285.7142857142857, + "totTradedVol": 27, + "iv": 40.08, + "ltp": 1650, + "change": -310, + "pChange": -15.816326530612246, + "totBuyQty": 5250, + "totSellQty": 5250, + "bidQty": 1525, + "bidPrice": 1582.7, + "askQty": 1000, + "askPrice": 1630.9 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22400.00", + "oi": 8954, + "oiChg": 2703, + "oiPctChg": 43.24108142697168, + "totTradedVol": 36814, + "iv": 21.77, + "ltp": 2.9, + "change": 0.1499999999999999, + "pChange": 5.4545454545454515, + "totBuyQty": 439750, + "totSellQty": 17525, + "bidQty": 5125, + "bidPrice": 2.85, + "askQty": 700, + "askPrice": 2.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22450, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22450.00", + "oi": 7, + "oiChg": 4, + "oiPctChg": 133.33333333333334, + "totTradedVol": 8, + "iv": 49.71, + "ltp": 1675.6, + "change": 554.8999999999999, + "pChange": 49.51369679664494, + "totBuyQty": 4575, + "totSellQty": 3575, + "bidQty": 1000, + "bidPrice": 1531.45, + "askQty": 50, + "askPrice": 1576.75 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22450.00", + "oi": 1503, + "oiChg": 170, + "oiPctChg": 12.753188297074269, + "totTradedVol": 7115, + "iv": 21.2, + "ltp": 3, + "change": 0.20000000000000018, + "pChange": 7.1428571428571495, + "totBuyQty": 103075, + "totSellQty": 17775, + "bidQty": 1275, + "bidPrice": 3, + "askQty": 2600, + "askPrice": 3.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22500, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22500.00", + "oi": 425, + "oiChg": 73, + "oiPctChg": 20.738636363636363, + "totTradedVol": 216, + "iv": 38.94, + "ltp": 1505.5, + "change": -340.6500000000001, + "pChange": -18.45191344148634, + "totBuyQty": 5300, + "totSellQty": 4025, + "bidQty": 25, + "bidPrice": 1503.7, + "askQty": 100, + "askPrice": 1515.6 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22500.00", + "oi": 71041, + "oiChg": 30370, + "oiPctChg": 74.67237097686312, + "totTradedVol": 179456, + "iv": 20.99, + "ltp": 3.35, + "change": 0.3500000000000001, + "pChange": 11.66666666666667, + "totBuyQty": 904500, + "totSellQty": 43025, + "bidQty": 1950, + "bidPrice": 3.3, + "askQty": 3175, + "askPrice": 3.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22550, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22550.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6250, + "totSellQty": 5250, + "bidQty": 1000, + "bidPrice": 1436.8, + "askQty": 25, + "askPrice": 1475.85 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22550.00", + "oi": 1242, + "oiChg": 124, + "oiPctChg": 11.091234347048301, + "totTradedVol": 4826, + "iv": 20.36, + "ltp": 3.55, + "change": 0.2999999999999998, + "pChange": 9.230769230769226, + "totBuyQty": 116700, + "totSellQty": 8600, + "bidQty": 850, + "bidPrice": 3.5, + "askQty": 175, + "askPrice": 3.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22600, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22600.00", + "oi": 28, + "oiChg": 17, + "oiPctChg": 154.54545454545453, + "totTradedVol": 20, + "iv": 34.32, + "ltp": 1438.65, + "change": -219.75, + "pChange": -13.250723589001446, + "totBuyQty": 6525, + "totSellQty": 7700, + "bidQty": 300, + "bidPrice": 1390.15, + "askQty": 1000, + "askPrice": 1427.65 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22600.00", + "oi": 17234, + "oiChg": 6817, + "oiPctChg": 65.44110588461169, + "totTradedVol": 91485, + "iv": 19.97, + "ltp": 3.8, + "change": 0.5999999999999996, + "pChange": 18.74999999999999, + "totBuyQty": 288650, + "totSellQty": 17675, + "bidQty": 1925, + "bidPrice": 3.75, + "askQty": 3300, + "askPrice": 3.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22650, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22650.00", + "oi": 42, + "oiChg": 41, + "oiPctChg": 4100, + "totTradedVol": 129, + "iv": 35.51, + "ltp": 1402, + "change": 463.4, + "pChange": 49.371404219049644, + "totBuyQty": 6900, + "totSellQty": 7550, + "bidQty": 1100, + "bidPrice": 1341, + "askQty": 100, + "askPrice": 1371.35 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22650.00", + "oi": 2811, + "oiChg": 856, + "oiPctChg": 43.785166240409204, + "totTradedVol": 18286, + "iv": 19.59, + "ltp": 4.2, + "change": 0.9000000000000004, + "pChange": 27.272727272727288, + "totBuyQty": 100575, + "totSellQty": 14400, + "bidQty": 3750, + "bidPrice": 4.1, + "askQty": 1475, + "askPrice": 4.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22700, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22700.00", + "oi": 34, + "oiChg": 16, + "oiPctChg": 88.88888888888889, + "totTradedVol": 40, + "iv": 0, + "ltp": 1270, + "change": -390.70000000000005, + "pChange": -23.526223881495756, + "totBuyQty": 6450, + "totSellQty": 6700, + "bidQty": 75, + "bidPrice": 1292.65, + "askQty": 75, + "askPrice": 1313.25 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22700.00", + "oi": 36975, + "oiChg": 13729, + "oiPctChg": 59.05962316097393, + "totTradedVol": 127040, + "iv": 19.08, + "ltp": 4.5, + "change": 1.0499999999999998, + "pChange": 30.43478260869564, + "totBuyQty": 140525, + "totSellQty": 28450, + "bidQty": 3625, + "bidPrice": 4.45, + "askQty": 2375, + "askPrice": 4.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22750, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22750.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 41.16, + "ltp": 1360, + "change": 507.35, + "pChange": 59.50272679293966, + "totBuyQty": 5825, + "totSellQty": 6825, + "bidQty": 225, + "bidPrice": 1250.25, + "askQty": 1000, + "askPrice": 1281.05 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22750.00", + "oi": 3450, + "oiChg": 688, + "oiPctChg": 24.90948587979725, + "totTradedVol": 23020, + "iv": 18.78, + "ltp": 5.1, + "change": 1.6999999999999997, + "pChange": 49.99999999999999, + "totBuyQty": 92300, + "totSellQty": 13950, + "bidQty": 575, + "bidPrice": 5, + "askQty": 150, + "askPrice": 5.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22800, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22800.00", + "oi": 199, + "oiChg": 62, + "oiPctChg": 45.25547445255474, + "totTradedVol": 85, + "iv": 26.14, + "ltp": 1214.35, + "change": -335.6500000000001, + "pChange": -21.654838709677428, + "totBuyQty": 9400, + "totSellQty": 7625, + "bidQty": 50, + "bidPrice": 1203.8, + "askQty": 50, + "askPrice": 1217.55 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22800.00", + "oi": 36185, + "oiChg": 21718, + "oiPctChg": 150.12096495472454, + "totTradedVol": 161262, + "iv": 18.49, + "ltp": 5.75, + "change": 1.75, + "pChange": 43.75, + "totBuyQty": 159625, + "totSellQty": 56150, + "bidQty": 6950, + "bidPrice": 5.7, + "askQty": 1475, + "askPrice": 5.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22850, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22850.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 41.2, + "ltp": 1280, + "change": -140, + "pChange": -9.859154929577464, + "totBuyQty": 6725, + "totSellQty": 6725, + "bidQty": 75, + "bidPrice": 1152.35, + "askQty": 75, + "askPrice": 1173.2 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22850.00", + "oi": 4099, + "oiChg": 1522, + "oiPctChg": 59.06092355452076, + "totTradedVol": 25355, + "iv": 18.15, + "ltp": 6.5, + "change": 2.25, + "pChange": 52.94117647058824, + "totBuyQty": 107950, + "totSellQty": 9975, + "bidQty": 150, + "bidPrice": 6.5, + "askQty": 1600, + "askPrice": 6.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22900, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22900.00", + "oi": 124, + "oiChg": 3, + "oiPctChg": 2.479338842975207, + "totTradedVol": 23, + "iv": 41.59, + "ltp": 1244.3, + "change": -155.70000000000005, + "pChange": -11.121428571428575, + "totBuyQty": 8425, + "totSellQty": 7125, + "bidQty": 150, + "bidPrice": 1104.9, + "askQty": 75, + "askPrice": 1120 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22900.00", + "oi": 25295, + "oiChg": 14936, + "oiPctChg": 144.18380152524375, + "totTradedVol": 117553, + "iv": 17.76, + "ltp": 7.35, + "change": 2.6999999999999993, + "pChange": 58.06451612903224, + "totBuyQty": 142875, + "totSellQty": 30950, + "bidQty": 3400, + "bidPrice": 7.3, + "askQty": 3300, + "askPrice": 7.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22950, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE22950.00", + "oi": 11, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6525, + "totSellQty": 4475, + "bidQty": 1000, + "bidPrice": 1040.9, + "askQty": 25, + "askPrice": 1080.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE22950.00", + "oi": 3811, + "oiChg": 1899, + "oiPctChg": 99.32008368200837, + "totTradedVol": 28763, + "iv": 17.53, + "ltp": 8.55, + "change": 3.750000000000001, + "pChange": 78.12500000000003, + "totBuyQty": 107850, + "totSellQty": 11200, + "bidQty": 625, + "bidPrice": 8.5, + "askQty": 350, + "askPrice": 8.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23000.00", + "oi": 3269, + "oiChg": 1343, + "oiPctChg": 69.73001038421599, + "totTradedVol": 3601, + "iv": 25.57, + "ltp": 1010.3, + "change": -341.4000000000001, + "pChange": -25.257083672412524, + "totBuyQty": 13625, + "totSellQty": 20825, + "bidQty": 250, + "bidPrice": 1010.3, + "askQty": 250, + "askPrice": 1015.65 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23000.00", + "oi": 147631, + "oiChg": 68057, + "oiPctChg": 85.52667956870334, + "totTradedVol": 555784, + "iv": 17.25, + "ltp": 9.9, + "change": 4.3500000000000005, + "pChange": 78.37837837837839, + "totBuyQty": 973125, + "totSellQty": 203175, + "bidQty": 2625, + "bidPrice": 9.8, + "askQty": 3475, + "askPrice": 9.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23050, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23050.00", + "oi": 259, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 33, + "iv": 16.61, + "ltp": 943.05, + "change": -369.79999999999995, + "pChange": -28.16772670145104, + "totBuyQty": 7600, + "totSellQty": 8875, + "bidQty": 75, + "bidPrice": 963.15, + "askQty": 225, + "askPrice": 976.6 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23050.00", + "oi": 7925, + "oiChg": 6276, + "oiPctChg": 380.5942995755003, + "totTradedVol": 53873, + "iv": 16.85, + "ltp": 10.9, + "change": 5.1000000000000005, + "pChange": 87.93103448275863, + "totBuyQty": 135750, + "totSellQty": 31400, + "bidQty": 625, + "bidPrice": 10.85, + "askQty": 950, + "askPrice": 10.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23100, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23100.00", + "oi": 381, + "oiChg": 34, + "oiPctChg": 9.798270893371757, + "totTradedVol": 177, + "iv": 26.46, + "ltp": 952.1, + "change": -298.80000000000007, + "pChange": -23.886801502917905, + "totBuyQty": 9775, + "totSellQty": 9025, + "bidQty": 75, + "bidPrice": 916.15, + "askQty": 100, + "askPrice": 922.9 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23100.00", + "oi": 26840, + "oiChg": 13209, + "oiPctChg": 96.90411561881007, + "totTradedVol": 183664, + "iv": 16.55, + "ltp": 12.45, + "change": 6.1, + "pChange": 96.06299212598425, + "totBuyQty": 168275, + "totSellQty": 33150, + "bidQty": 575, + "bidPrice": 12.45, + "askQty": 1100, + "askPrice": 12.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23150, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23150.00", + "oi": 379, + "oiChg": -16, + "oiPctChg": -4.050632911392405, + "totTradedVol": 70, + "iv": 24.92, + "ltp": 898.2, + "change": -227.75, + "pChange": -20.22736355966073, + "totBuyQty": 10300, + "totSellQty": 9100, + "bidQty": 50, + "bidPrice": 862, + "askQty": 75, + "askPrice": 875.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23150.00", + "oi": 11244, + "oiChg": 3183, + "oiPctChg": 39.48641607740975, + "totTradedVol": 66380, + "iv": 16.31, + "ltp": 14.6, + "change": 7.6499999999999995, + "pChange": 110.07194244604315, + "totBuyQty": 146300, + "totSellQty": 29575, + "bidQty": 125, + "bidPrice": 14.5, + "askQty": 750, + "askPrice": 14.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23200, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23200.00", + "oi": 751, + "oiChg": -255, + "oiPctChg": -25.347912524850894, + "totTradedVol": 473, + "iv": 24.83, + "ltp": 823.15, + "change": -344.19999999999993, + "pChange": -29.485587013320764, + "totBuyQty": 12850, + "totSellQty": 12325, + "bidQty": 50, + "bidPrice": 822.05, + "askQty": 100, + "askPrice": 827.85 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23200.00", + "oi": 47769, + "oiChg": 17887, + "oiPctChg": 59.85877785958102, + "totTradedVol": 251000, + "iv": 15.96, + "ltp": 16.45, + "change": 9.049999999999999, + "pChange": 122.29729729729728, + "totBuyQty": 177000, + "totSellQty": 62975, + "bidQty": 1000, + "bidPrice": 16.35, + "askQty": 1300, + "askPrice": 16.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23250, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23250.00", + "oi": 289, + "oiChg": 3, + "oiPctChg": 1.048951048951049, + "totTradedVol": 8, + "iv": 16.37, + "ltp": 755, + "change": -351.8499999999999, + "pChange": -31.788408546776886, + "totBuyQty": 11550, + "totSellQty": 9450, + "bidQty": 50, + "bidPrice": 762.35, + "askQty": 50, + "askPrice": 783.55 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23250.00", + "oi": 11956, + "oiChg": 4462, + "oiPctChg": 59.540966106218306, + "totTradedVol": 120497, + "iv": 15.72, + "ltp": 19.6, + "change": 11.250000000000002, + "pChange": 134.73053892215572, + "totBuyQty": 146500, + "totSellQty": 48175, + "bidQty": 1025, + "bidPrice": 19.3, + "askQty": 1375, + "askPrice": 19.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23300, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23300.00", + "oi": 2318, + "oiChg": 9, + "oiPctChg": 0.389779125162408, + "totTradedVol": 651, + "iv": 23.19, + "ltp": 734.4, + "change": -322.85, + "pChange": -30.536769921967373, + "totBuyQty": 13700, + "totSellQty": 12425, + "bidQty": 50, + "bidPrice": 724.9, + "askQty": 75, + "askPrice": 728.45 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23300.00", + "oi": 75549, + "oiChg": 40854, + "oiPctChg": 117.75183744055339, + "totTradedVol": 358281, + "iv": 15.4, + "ltp": 22.5, + "change": 13.5, + "pChange": 150, + "totBuyQty": 193300, + "totSellQty": 50200, + "bidQty": 1400, + "bidPrice": 22.35, + "askQty": 1025, + "askPrice": 22.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23350, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23350.00", + "oi": 440, + "oiChg": -19, + "oiPctChg": -4.139433551198257, + "totTradedVol": 135, + "iv": 26.45, + "ltp": 685.25, + "change": -326.75, + "pChange": -32.287549407114625, + "totBuyQty": 12150, + "totSellQty": 9325, + "bidQty": 100, + "bidPrice": 678.95, + "askQty": 25, + "askPrice": 683.1 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23350.00", + "oi": 9444, + "oiChg": 3779, + "oiPctChg": 66.70785525154457, + "totTradedVol": 93726, + "iv": 15.21, + "ltp": 26.9, + "change": 16.7, + "pChange": 163.72549019607843, + "totBuyQty": 105700, + "totSellQty": 33675, + "bidQty": 525, + "bidPrice": 26.35, + "askQty": 475, + "askPrice": 26.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23400, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23400.00", + "oi": 5088, + "oiChg": 836, + "oiPctChg": 19.661335841956728, + "totTradedVol": 2802, + "iv": 20.23, + "ltp": 643.85, + "change": -312.65, + "pChange": -32.68687924725562, + "totBuyQty": 14750, + "totSellQty": 12575, + "bidQty": 250, + "bidPrice": 637.65, + "askQty": 250, + "askPrice": 639.8 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23400.00", + "oi": 45911, + "oiChg": 11520, + "oiPctChg": 33.497135878572884, + "totTradedVol": 264456, + "iv": 15, + "ltp": 30.45, + "change": 18.95, + "pChange": 164.7826086956522, + "totBuyQty": 105275, + "totSellQty": 45325, + "bidQty": 350, + "bidPrice": 30.25, + "askQty": 275, + "askPrice": 30.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23450, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23450.00", + "oi": 521, + "oiChg": 140, + "oiPctChg": 36.74540682414698, + "totTradedVol": 279, + "iv": 19.36, + "ltp": 594.5, + "change": -315.1, + "pChange": -34.64160070360599, + "totBuyQty": 18375, + "totSellQty": 11950, + "bidQty": 100, + "bidPrice": 590.65, + "askQty": 100, + "askPrice": 597.1 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23450.00", + "oi": 9838, + "oiChg": 3125, + "oiPctChg": 46.551467302249364, + "totTradedVol": 107269, + "iv": 14.78, + "ltp": 35.9, + "change": 22.95, + "pChange": 177.22007722007723, + "totBuyQty": 108250, + "totSellQty": 30400, + "bidQty": 625, + "bidPrice": 35.9, + "askQty": 75, + "askPrice": 36.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23500, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23500.00", + "oi": 16340, + "oiChg": 2250, + "oiPctChg": 15.968772178850248, + "totTradedVol": 17140, + "iv": 19.01, + "ltp": 548.2, + "change": -316.19999999999993, + "pChange": -36.58028690421101, + "totBuyQty": 27825, + "totSellQty": 22950, + "bidQty": 50, + "bidPrice": 550.25, + "askQty": 225, + "askPrice": 552.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23500.00", + "oi": 198515, + "oiChg": 39477, + "oiPctChg": 24.8223694965983, + "totTradedVol": 852686, + "iv": 14.54, + "ltp": 41.85, + "change": 27.55, + "pChange": 192.65734265734264, + "totBuyQty": 260575, + "totSellQty": 184975, + "bidQty": 1025, + "bidPrice": 41.95, + "askQty": 850, + "askPrice": 42.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23550, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23550.00", + "oi": 593, + "oiChg": 142, + "oiPctChg": 31.485587583148558, + "totTradedVol": 457, + "iv": 19.44, + "ltp": 507.55, + "change": -310.90000000000003, + "pChange": -37.98643777872809, + "totBuyQty": 21700, + "totSellQty": 13625, + "bidQty": 25, + "bidPrice": 502.7, + "askQty": 75, + "askPrice": 505.4 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23550.00", + "oi": 10465, + "oiChg": 4296, + "oiPctChg": 69.6385151564273, + "totTradedVol": 94257, + "iv": 14.33, + "ltp": 49.9, + "change": 33.099999999999994, + "pChange": 197.0238095238095, + "totBuyQty": 132050, + "totSellQty": 35550, + "bidQty": 150, + "bidPrice": 49.9, + "askQty": 200, + "askPrice": 50.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23600, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23600.00", + "oi": 10200, + "oiChg": 794, + "oiPctChg": 8.44142036997661, + "totTradedVol": 8754, + "iv": 18.14, + "ltp": 467, + "change": -298.35, + "pChange": -38.98216502253871, + "totBuyQty": 129350, + "totSellQty": 24800, + "bidQty": 400, + "bidPrice": 466.05, + "askQty": 100, + "askPrice": 468 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23600.00", + "oi": 56965, + "oiChg": 18382, + "oiPctChg": 47.64274421377291, + "totTradedVol": 401737, + "iv": 14.12, + "ltp": 57.55, + "change": 38.15, + "pChange": 196.6494845360825, + "totBuyQty": 95200, + "totSellQty": 74400, + "bidQty": 550, + "bidPrice": 57.55, + "askQty": 50, + "askPrice": 57.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23650, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23650.00", + "oi": 705, + "oiChg": 147, + "oiPctChg": 26.344086021505376, + "totTradedVol": 702, + "iv": 18.43, + "ltp": 425.15, + "change": -297.85, + "pChange": -41.19640387275243, + "totBuyQty": 119150, + "totSellQty": 14975, + "bidQty": 50, + "bidPrice": 422.5, + "askQty": 25, + "askPrice": 424 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23650.00", + "oi": 10403, + "oiChg": 4307, + "oiPctChg": 70.6528871391076, + "totTradedVol": 123009, + "iv": 13.97, + "ltp": 68.5, + "change": 46.25, + "pChange": 207.86516853932585, + "totBuyQty": 65000, + "totSellQty": 33975, + "bidQty": 50, + "bidPrice": 68.35, + "askQty": 175, + "askPrice": 68.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23700, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23700.00", + "oi": 9451, + "oiChg": 996, + "oiPctChg": 11.780011827321111, + "totTradedVol": 10887, + "iv": 17.31, + "ltp": 382.95, + "change": -295.25000000000006, + "pChange": -43.53435564730169, + "totBuyQty": 124425, + "totSellQty": 19975, + "bidQty": 50, + "bidPrice": 386.9, + "askQty": 100, + "askPrice": 388.4 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23700.00", + "oi": 76342, + "oiChg": 37577, + "oiPctChg": 96.93537985296014, + "totTradedVol": 459837, + "iv": 13.83, + "ltp": 79.1, + "change": 52.89999999999999, + "pChange": 201.90839694656484, + "totBuyQty": 80950, + "totSellQty": 87800, + "bidQty": 975, + "bidPrice": 79, + "askQty": 325, + "askPrice": 79.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23750, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23750.00", + "oi": 1731, + "oiChg": 1126, + "oiPctChg": 186.11570247933884, + "totTradedVol": 5574, + "iv": 17.03, + "ltp": 349.05, + "change": -278.65000000000003, + "pChange": -44.39222558547077, + "totBuyQty": 126300, + "totSellQty": 16450, + "bidQty": 50, + "bidPrice": 348.6, + "askQty": 175, + "askPrice": 349.95 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23750.00", + "oi": 16780, + "oiChg": 4477, + "oiPctChg": 36.38949849630171, + "totTradedVol": 169284, + "iv": 13.58, + "ltp": 91.95, + "change": 61.550000000000004, + "pChange": 202.46710526315792, + "totBuyQty": 67200, + "totSellQty": 125750, + "bidQty": 150, + "bidPrice": 92, + "askQty": 925, + "askPrice": 92.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23800, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23800.00", + "oi": 22579, + "oiChg": 7382, + "oiPctChg": 48.57537671908929, + "totTradedVol": 52558, + "iv": 16.74, + "ltp": 314.65, + "change": -271.55000000000007, + "pChange": -46.32378027976801, + "totBuyQty": 234725, + "totSellQty": 57400, + "bidQty": 400, + "bidPrice": 314.55, + "askQty": 225, + "askPrice": 315.75 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23800.00", + "oi": 96678, + "oiChg": 37179, + "oiPctChg": 62.486764483436694, + "totTradedVol": 736867, + "iv": 13.4, + "ltp": 106.65, + "change": 71.35000000000001, + "pChange": 202.1246458923513, + "totBuyQty": 136000, + "totSellQty": 129750, + "bidQty": 225, + "bidPrice": 106.8, + "askQty": 300, + "askPrice": 107.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23850, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23850.00", + "oi": 4221, + "oiChg": 3106, + "oiPctChg": 278.56502242152465, + "totTradedVol": 18750, + "iv": 16.32, + "ltp": 281.1, + "change": -262.69999999999993, + "pChange": -48.30820154468554, + "totBuyQty": 128950, + "totSellQty": 23650, + "bidQty": 100, + "bidPrice": 280.85, + "askQty": 200, + "askPrice": 281.8 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23850.00", + "oi": 16877, + "oiChg": 4396, + "oiPctChg": 35.22153673583848, + "totTradedVol": 209247, + "iv": 13.32, + "ltp": 123.65, + "change": 82.35000000000001, + "pChange": 199.3946731234867, + "totBuyQty": 73800, + "totSellQty": 52600, + "bidQty": 875, + "bidPrice": 123.75, + "askQty": 725, + "askPrice": 124.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23900, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23900.00", + "oi": 24695, + "oiChg": 18714, + "oiPctChg": 312.89082093295434, + "totTradedVol": 140125, + "iv": 16.13, + "ltp": 251, + "change": -248.14999999999998, + "pChange": -49.71451467494741, + "totBuyQty": 276175, + "totSellQty": 79300, + "bidQty": 175, + "bidPrice": 249.85, + "askQty": 600, + "askPrice": 250.85 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23900.00", + "oi": 62818, + "oiChg": 30723, + "oiPctChg": 95.72519083969466, + "totTradedVol": 663941, + "iv": 13.07, + "ltp": 142.35, + "change": 94.85, + "pChange": 199.68421052631578, + "totBuyQty": 106700, + "totSellQty": 119375, + "bidQty": 175, + "bidPrice": 142.05, + "askQty": 500, + "askPrice": 142.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23950, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE23950.00", + "oi": 10211, + "oiChg": 8703, + "oiPctChg": 577.1220159151194, + "totTradedVol": 88362, + "iv": 15.99, + "ltp": 220.55, + "change": -235.55, + "pChange": -51.64437623328217, + "totBuyQty": 254925, + "totSellQty": 61625, + "bidQty": 50, + "bidPrice": 219.55, + "askQty": 475, + "askPrice": 220.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE23950.00", + "oi": 17671, + "oiChg": 11310, + "oiPctChg": 177.80223235340355, + "totTradedVol": 260884, + "iv": 12.92, + "ltp": 164.45, + "change": 109.24999999999999, + "pChange": 197.91666666666663, + "totBuyQty": 75175, + "totSellQty": 49625, + "bidQty": 100, + "bidPrice": 164.8, + "askQty": 100, + "askPrice": 165.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24000.00", + "oi": 117474, + "oiChg": 94256, + "oiPctChg": 405.9608924110604, + "totTradedVol": 756193, + "iv": 15.78, + "ltp": 192.4, + "change": -222.35, + "pChange": -53.61060880048222, + "totBuyQty": 678800, + "totSellQty": 366700, + "bidQty": 50, + "bidPrice": 192.15, + "askQty": 275, + "askPrice": 192.75 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24000.00", + "oi": 116915, + "oiChg": 48206, + "oiPctChg": 70.15965885109665, + "totTradedVol": 1417272, + "iv": 12.68, + "ltp": 188, + "change": 123.65, + "pChange": 192.15229215229218, + "totBuyQty": 233625, + "totSellQty": 153825, + "bidQty": 25, + "bidPrice": 187.9, + "askQty": 25, + "askPrice": 188.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24050, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24050.00", + "oi": 26399, + "oiChg": 25258, + "oiPctChg": 2213.672217353199, + "totTradedVol": 204240, + "iv": 15.62, + "ltp": 169.9, + "change": -206.99999999999997, + "pChange": -54.921729901830716, + "totBuyQty": 72575, + "totSellQty": 118625, + "bidQty": 300, + "bidPrice": 169.35, + "askQty": 275, + "askPrice": 169.8 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24050.00", + "oi": 17823, + "oiChg": 11765, + "oiPctChg": 194.206008583691, + "totTradedVol": 292708, + "iv": 12.53, + "ltp": 213.45, + "change": 138.85, + "pChange": 186.12600536193028, + "totBuyQty": 49925, + "totSellQty": 38000, + "bidQty": 50, + "bidPrice": 212.7, + "askQty": 250, + "askPrice": 213.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24100, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24100.00", + "oi": 94608, + "oiChg": 87764, + "oiPctChg": 1282.3495032144945, + "totTradedVol": 690806, + "iv": 15.47, + "ltp": 147.35, + "change": -188.75000000000003, + "pChange": -56.15888128533175, + "totBuyQty": 144075, + "totSellQty": 349675, + "bidQty": 100, + "bidPrice": 146.95, + "askQty": 650, + "askPrice": 147.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24100.00", + "oi": 77906, + "oiChg": 47979, + "oiPctChg": 160.3201122731981, + "totTradedVol": 797266, + "iv": 12.31, + "ltp": 238.2, + "change": 151.04999999999998, + "pChange": 173.32185886402752, + "totBuyQty": 66375, + "totSellQty": 80725, + "bidQty": 50, + "bidPrice": 238, + "askQty": 100, + "askPrice": 238.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24150, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24150.00", + "oi": 25908, + "oiChg": 23305, + "oiPctChg": 895.3131002689205, + "totTradedVol": 239829, + "iv": 15.29, + "ltp": 126.1, + "change": -174.54999999999998, + "pChange": -58.057541992349904, + "totBuyQty": 69525, + "totSellQty": 125750, + "bidQty": 150, + "bidPrice": 125.9, + "askQty": 500, + "askPrice": 126.3 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24150.00", + "oi": 14553, + "oiChg": 1628, + "oiPctChg": 12.595744680851064, + "totTradedVol": 227531, + "iv": 12.17, + "ltp": 270.35, + "change": 169.55, + "pChange": 168.2043650793651, + "totBuyQty": 35275, + "totSellQty": 25125, + "bidQty": 125, + "bidPrice": 270.8, + "askQty": 300, + "askPrice": 271.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24200, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24200.00", + "oi": 160790, + "oiChg": 103260, + "oiPctChg": 179.4889622805493, + "totTradedVol": 903614, + "iv": 15.26, + "ltp": 108.15, + "change": -156.54999999999998, + "pChange": -59.14242538723082, + "totBuyQty": 181575, + "totSellQty": 545275, + "bidQty": 150, + "bidPrice": 108.15, + "askQty": 925, + "askPrice": 108.5 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24200.00", + "oi": 97561, + "oiChg": 18388, + "oiPctChg": 23.22508936127215, + "totTradedVol": 733669, + "iv": 11.78, + "ltp": 303.25, + "change": 187.35, + "pChange": 161.64797238999137, + "totBuyQty": 56750, + "totSellQty": 55475, + "bidQty": 400, + "bidPrice": 302, + "askQty": 200, + "askPrice": 303.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24250, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24250.00", + "oi": 31252, + "oiChg": 18803, + "oiPctChg": 151.040244196321, + "totTradedVol": 329804, + "iv": 15.17, + "ltp": 91.6, + "change": -142.4, + "pChange": -60.85470085470086, + "totBuyQty": 77350, + "totSellQty": 157225, + "bidQty": 275, + "bidPrice": 91.55, + "askQty": 975, + "askPrice": 92.1 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24250.00", + "oi": 19363, + "oiChg": 3520, + "oiPctChg": 22.218014264975068, + "totTradedVol": 208838, + "iv": 11.58, + "ltp": 336.55, + "change": 202.4, + "pChange": 150.87588520313082, + "totBuyQty": 28575, + "totSellQty": 32475, + "bidQty": 400, + "bidPrice": 336.1, + "askQty": 75, + "askPrice": 337.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24300, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24300.00", + "oi": 209007, + "oiChg": 134660, + "oiPctChg": 181.1236499118996, + "totTradedVol": 1149714, + "iv": 15.06, + "ltp": 77.9, + "change": -125.15, + "pChange": -61.63506525486333, + "totBuyQty": 204575, + "totSellQty": 647475, + "bidQty": 775, + "bidPrice": 77.75, + "askQty": 500, + "askPrice": 78.05 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24300.00", + "oi": 103297, + "oiChg": 32986, + "oiPctChg": 46.91442306324757, + "totTradedVol": 665594, + "iv": 11.22, + "ltp": 372.1, + "change": 219.3, + "pChange": 143.52094240837695, + "totBuyQty": 52325, + "totSellQty": 40075, + "bidQty": 400, + "bidPrice": 371.5, + "askQty": 50, + "askPrice": 372.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24350, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24350.00", + "oi": 38980, + "oiChg": 27505, + "oiPctChg": 239.6949891067538, + "totTradedVol": 353979, + "iv": 15.06, + "ltp": 65.95, + "change": -109.2, + "pChange": -62.34656009135027, + "totBuyQty": 82350, + "totSellQty": 203775, + "bidQty": 100, + "bidPrice": 65.9, + "askQty": 225, + "askPrice": 66 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24350.00", + "oi": 6939, + "oiChg": -1592, + "oiPctChg": -18.661352713632635, + "totTradedVol": 120193, + "iv": 10.77, + "ltp": 406.75, + "change": 231.2, + "pChange": 131.7003702648818, + "totBuyQty": 32250, + "totSellQty": 12225, + "bidQty": 25, + "bidPrice": 406.7, + "askQty": 25, + "askPrice": 407.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24400, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24400.00", + "oi": 121535, + "oiChg": 79314, + "oiPctChg": 187.85438525852064, + "totTradedVol": 863801, + "iv": 15.01, + "ltp": 55, + "change": -94.35, + "pChange": -63.17375292936056, + "totBuyQty": 130900, + "totSellQty": 338375, + "bidQty": 800, + "bidPrice": 54.8, + "askQty": 950, + "askPrice": 55 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24400.00", + "oi": 21059, + "oiChg": 748, + "oiPctChg": 3.682733494165723, + "totTradedVol": 188193, + "iv": 10.07, + "ltp": 444.65, + "change": 245.99999999999997, + "pChange": 123.83589227284166, + "totBuyQty": 96600, + "totSellQty": 23225, + "bidQty": 25, + "bidPrice": 444.65, + "askQty": 450, + "askPrice": 445.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24450, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24450.00", + "oi": 20586, + "oiChg": 13096, + "oiPctChg": 174.8464619492657, + "totTradedVol": 188164, + "iv": 15, + "ltp": 45.9, + "change": -81.55000000000001, + "pChange": -63.985876814437034, + "totBuyQty": 71275, + "totSellQty": 116250, + "bidQty": 525, + "bidPrice": 45.65, + "askQty": 1375, + "askPrice": 45.85 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24450.00", + "oi": 1869, + "oiChg": -513, + "oiPctChg": -21.536523929471034, + "totTradedVol": 19650, + "iv": 6.46, + "ltp": 491, + "change": 266.4, + "pChange": 118.61086375779162, + "totBuyQty": 9900, + "totSellQty": 15825, + "bidQty": 250, + "bidPrice": 488.85, + "askQty": 250, + "askPrice": 490.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24500, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24500.00", + "oi": 227672, + "oiChg": 126717, + "oiPctChg": 125.51830023277698, + "totTradedVol": 1398294, + "iv": 15.01, + "ltp": 38, + "change": -67.55, + "pChange": -63.998105163429656, + "totBuyQty": 266425, + "totSellQty": 1077325, + "bidQty": 800, + "bidPrice": 37.9, + "askQty": 175, + "askPrice": 38.05 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24500.00", + "oi": 29702, + "oiChg": 5995, + "oiPctChg": 25.287889652845152, + "totTradedVol": 125135, + "iv": 6.88, + "ltp": 526.8, + "change": 268.24999999999994, + "pChange": 103.75169212918196, + "totBuyQty": 20300, + "totSellQty": 64700, + "bidQty": 25, + "bidPrice": 526, + "askQty": 150, + "askPrice": 527.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24550, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24550.00", + "oi": 21956, + "oiChg": 12397, + "oiPctChg": 129.68929804372843, + "totTradedVol": 214666, + "iv": 15.01, + "ltp": 31.3, + "change": -56.10000000000001, + "pChange": -64.18764302059498, + "totBuyQty": 85750, + "totSellQty": 103375, + "bidQty": 700, + "bidPrice": 31.15, + "askQty": 2325, + "askPrice": 31.35 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24550.00", + "oi": 928, + "oiChg": -263, + "oiPctChg": -22.08228379513014, + "totTradedVol": 4227, + "iv": 0, + "ltp": 577.65, + "change": 292.65, + "pChange": 102.68421052631578, + "totBuyQty": 10450, + "totSellQty": 11250, + "bidQty": 250, + "bidPrice": 570.05, + "askQty": 475, + "askPrice": 572.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24600, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24600.00", + "oi": 82041, + "oiChg": 38653, + "oiPctChg": 89.08684428874344, + "totTradedVol": 680037, + "iv": 14.97, + "ltp": 25.75, + "change": -45.2, + "pChange": -63.70683579985905, + "totBuyQty": 127525, + "totSellQty": 217275, + "bidQty": 775, + "bidPrice": 25.75, + "askQty": 475, + "askPrice": 25.9 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24600.00", + "oi": 3490, + "oiChg": 123, + "oiPctChg": 3.653103653103653, + "totTradedVol": 17043, + "iv": 0, + "ltp": 616.5, + "change": 296.6, + "pChange": 92.71647389809317, + "totBuyQty": 13250, + "totSellQty": 14900, + "bidQty": 175, + "bidPrice": 616.3, + "askQty": 275, + "askPrice": 618.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24650, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24650.00", + "oi": 24601, + "oiChg": 15010, + "oiPctChg": 156.5008862475237, + "totTradedVol": 218438, + "iv": 15.01, + "ltp": 21.15, + "change": -36.25, + "pChange": -63.153310104529616, + "totBuyQty": 95975, + "totSellQty": 104650, + "bidQty": 475, + "bidPrice": 21.1, + "askQty": 1725, + "askPrice": 21.25 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24650.00", + "oi": 587, + "oiChg": 16, + "oiPctChg": 2.8021015761821366, + "totTradedVol": 1735, + "iv": 0, + "ltp": 661.6, + "change": 307.3, + "pChange": 86.73440587073102, + "totBuyQty": 13925, + "totSellQty": 12975, + "bidQty": 250, + "bidPrice": 663, + "askQty": 75, + "askPrice": 667.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24700, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24700.00", + "oi": 75308, + "oiChg": 37776, + "oiPctChg": 100.65011190450815, + "totTradedVol": 594882, + "iv": 15.07, + "ltp": 17.25, + "change": -28.549999999999997, + "pChange": -62.33624454148471, + "totBuyQty": 225175, + "totSellQty": 169200, + "bidQty": 1475, + "bidPrice": 17.1, + "askQty": 1400, + "askPrice": 17.25 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24700.00", + "oi": 1277, + "oiChg": 59, + "oiPctChg": 4.844006568144499, + "totTradedVol": 3885, + "iv": 0, + "ltp": 712.2, + "change": 318.30000000000007, + "pChange": 80.80731150038083, + "totBuyQty": 19500, + "totSellQty": 14950, + "bidQty": 100, + "bidPrice": 709.3, + "askQty": 275, + "askPrice": 711.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24750, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24750.00", + "oi": 20480, + "oiChg": 11559, + "oiPctChg": 129.57067593319135, + "totTradedVol": 178761, + "iv": 15.11, + "ltp": 14.25, + "change": -21.950000000000003, + "pChange": -60.6353591160221, + "totBuyQty": 107700, + "totSellQty": 84050, + "bidQty": 750, + "bidPrice": 14.2, + "askQty": 825, + "askPrice": 14.3 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24750.00", + "oi": 428, + "oiChg": 155, + "oiPctChg": 56.776556776556774, + "totTradedVol": 716, + "iv": 0, + "ltp": 745.8, + "change": 310.09999999999997, + "pChange": 71.17282533853569, + "totBuyQty": 10925, + "totSellQty": 8000, + "bidQty": 125, + "bidPrice": 752.3, + "askQty": 200, + "askPrice": 757.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24800, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24800.00", + "oi": 184185, + "oiChg": 49591, + "oiPctChg": 36.844881644055455, + "totTradedVol": 715987, + "iv": 15.17, + "ltp": 11.6, + "change": -15.950000000000001, + "pChange": -57.89473684210527, + "totBuyQty": 385050, + "totSellQty": 340700, + "bidQty": 3225, + "bidPrice": 11.55, + "askQty": 1225, + "askPrice": 11.65 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24800.00", + "oi": 2541, + "oiChg": 387, + "oiPctChg": 17.96657381615599, + "totTradedVol": 4231, + "iv": 0, + "ltp": 800, + "change": 326.45, + "pChange": 68.93675430260797, + "totBuyQty": 20250, + "totSellQty": 14550, + "bidQty": 100, + "bidPrice": 798.5, + "askQty": 75, + "askPrice": 803.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24850, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24850.00", + "oi": 17913, + "oiChg": 7925, + "oiPctChg": 79.34521425710852, + "totTradedVol": 151634, + "iv": 15.26, + "ltp": 9.85, + "change": -12.200000000000001, + "pChange": -55.32879818594104, + "totBuyQty": 132375, + "totSellQty": 89850, + "bidQty": 1575, + "bidPrice": 9.7, + "askQty": 625, + "askPrice": 9.8 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24850.00", + "oi": 135, + "oiChg": 26, + "oiPctChg": 23.853211009174313, + "totTradedVol": 171, + "iv": 0, + "ltp": 800.85, + "change": 280.95000000000005, + "pChange": 54.0392383150606, + "totBuyQty": 8675, + "totSellQty": 8275, + "bidQty": 25, + "bidPrice": 849.25, + "askQty": 100, + "askPrice": 856 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24900, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24900.00", + "oi": 57326, + "oiChg": 28807, + "oiPctChg": 101.00985308040254, + "totTradedVol": 360612, + "iv": 15.43, + "ltp": 8.05, + "change": -9, + "pChange": -52.785923753665685, + "totBuyQty": 277775, + "totSellQty": 162150, + "bidQty": 7025, + "bidPrice": 8, + "askQty": 475, + "askPrice": 8.05 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24900.00", + "oi": 527, + "oiChg": -92, + "oiPctChg": -14.862681744749596, + "totTradedVol": 598, + "iv": 0, + "ltp": 897.4, + "change": 334.1, + "pChange": 59.3112018462631, + "totBuyQty": 10500, + "totSellQty": 10575, + "bidQty": 75, + "bidPrice": 894.35, + "askQty": 100, + "askPrice": 901.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24950, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE24950.00", + "oi": 27246, + "oiChg": 16917, + "oiPctChg": 163.78158582631426, + "totTradedVol": 162416, + "iv": 15.59, + "ltp": 6.9, + "change": -7.049999999999999, + "pChange": -50.53763440860215, + "totBuyQty": 184225, + "totSellQty": 53425, + "bidQty": 1525, + "bidPrice": 6.9, + "askQty": 775, + "askPrice": 6.95 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE24950.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 0, + "ltp": 600, + "change": -784, + "pChange": -56.64739884393064, + "totBuyQty": 7925, + "totSellQty": 7000, + "bidQty": 225, + "bidPrice": 929.15, + "askQty": 450, + "askPrice": 955.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25000.00", + "oi": 184929, + "oiChg": 83334, + "oiPctChg": 82.02569024066145, + "totTradedVol": 843593, + "iv": 15.75, + "ltp": 5.75, + "change": -5.25, + "pChange": -47.72727272727273, + "totBuyQty": 655900, + "totSellQty": 537850, + "bidQty": 9075, + "bidPrice": 5.7, + "askQty": 60150, + "askPrice": 5.8 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25000.00", + "oi": 6624, + "oiChg": 1149, + "oiPctChg": 20.986301369863014, + "totTradedVol": 8158, + "iv": 0, + "ltp": 995, + "change": 340.25, + "pChange": 51.9663993890798, + "totBuyQty": 30275, + "totSellQty": 19200, + "bidQty": 100, + "bidPrice": 995.05, + "askQty": 75, + "askPrice": 998.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25050, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25050.00", + "oi": 18423, + "oiChg": 8174, + "oiPctChg": 79.75412235340033, + "totTradedVol": 106721, + "iv": 15.86, + "ltp": 4.9, + "change": -3.5, + "pChange": -41.666666666666664, + "totBuyQty": 198725, + "totSellQty": 50075, + "bidQty": 3550, + "bidPrice": 4.8, + "askQty": 2725, + "askPrice": 4.9 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25050.00", + "oi": 43, + "oiChg": 3, + "oiPctChg": 7.5, + "totTradedVol": 4, + "iv": 0, + "ltp": 885, + "change": 182, + "pChange": 25.889046941678522, + "totBuyQty": 6925, + "totSellQty": 5850, + "bidQty": 25, + "bidPrice": 1033.45, + "askQty": 75, + "askPrice": 1048.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25100, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25100.00", + "oi": 70835, + "oiChg": 37620, + "oiPctChg": 113.26208038536805, + "totTradedVol": 299731, + "iv": 16.1, + "ltp": 4.25, + "change": -2.55, + "pChange": -37.5, + "totBuyQty": 397025, + "totSellQty": 148850, + "bidQty": 8700, + "bidPrice": 4.25, + "askQty": 3000, + "askPrice": 4.3 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25100.00", + "oi": 272, + "oiChg": 25, + "oiPctChg": 10.121457489878543, + "totTradedVol": 56, + "iv": 0, + "ltp": 1088.15, + "change": 335.05000000000007, + "pChange": 44.48944363298368, + "totBuyQty": 8125, + "totSellQty": 7250, + "bidQty": 150, + "bidPrice": 1087.7, + "askQty": 150, + "askPrice": 1098.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25150, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25150.00", + "oi": 12445, + "oiChg": 5682, + "oiPctChg": 84.01596924441816, + "totTradedVol": 67547, + "iv": 16.31, + "ltp": 3.7, + "change": -1.8999999999999995, + "pChange": -33.928571428571416, + "totBuyQty": 150725, + "totSellQty": 38050, + "bidQty": 2000, + "bidPrice": 3.7, + "askQty": 3925, + "askPrice": 3.8 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25150.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5475, + "totSellQty": 6250, + "bidQty": 1000, + "bidPrice": 1119.35, + "askQty": 1000, + "askPrice": 1167.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25200, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25200.00", + "oi": 63930, + "oiChg": 31812, + "oiPctChg": 99.04726321688773, + "totTradedVol": 244359, + "iv": 16.57, + "ltp": 3.25, + "change": -1.5499999999999998, + "pChange": -32.291666666666664, + "totBuyQty": 336400, + "totSellQty": 86525, + "bidQty": 1800, + "bidPrice": 3.3, + "askQty": 9125, + "askPrice": 3.35 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25200.00", + "oi": 1075, + "oiChg": 334, + "oiPctChg": 45.07422402159244, + "totTradedVol": 421, + "iv": 0, + "ltp": 1180, + "change": 331.6, + "pChange": 39.08533710513909, + "totBuyQty": 21850, + "totSellQty": 7725, + "bidQty": 50, + "bidPrice": 1182.65, + "askQty": 100, + "askPrice": 1200.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25250, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25250.00", + "oi": 15494, + "oiChg": 7391, + "oiPctChg": 91.21313093915833, + "totTradedVol": 57376, + "iv": 16.82, + "ltp": 2.9, + "change": -1.15, + "pChange": -28.39506172839506, + "totBuyQty": 135875, + "totSellQty": 35250, + "bidQty": 2900, + "bidPrice": 2.85, + "askQty": 3075, + "askPrice": 2.95 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25250.00", + "oi": 29, + "oiChg": 8, + "oiPctChg": 38.095238095238095, + "totTradedVol": 16, + "iv": 0, + "ltp": 1175, + "change": 226.45000000000005, + "pChange": 23.873280269885623, + "totBuyQty": 6400, + "totSellQty": 6000, + "bidQty": 150, + "bidPrice": 1239.3, + "askQty": 50, + "askPrice": 1250.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25300, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25300.00", + "oi": 43160, + "oiChg": 24936, + "oiPctChg": 136.8305531167691, + "totTradedVol": 167917, + "iv": 17.1, + "ltp": 2.65, + "change": -0.7000000000000002, + "pChange": -20.895522388059707, + "totBuyQty": 590875, + "totSellQty": 79475, + "bidQty": 11000, + "bidPrice": 2.6, + "askQty": 2375, + "askPrice": 2.65 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25300.00", + "oi": 646, + "oiChg": 274, + "oiPctChg": 73.65591397849462, + "totTradedVol": 323, + "iv": 0, + "ltp": 1292.8, + "change": 348.79999999999995, + "pChange": 36.94915254237288, + "totBuyQty": 9950, + "totSellQty": 8825, + "bidQty": 125, + "bidPrice": 1283.8, + "askQty": 250, + "askPrice": 1295.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25350, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25350.00", + "oi": 6624, + "oiChg": 2348, + "oiPctChg": 54.911131898971, + "totTradedVol": 31136, + "iv": 17.45, + "ltp": 2.4, + "change": -0.7000000000000002, + "pChange": -22.580645161290327, + "totBuyQty": 134200, + "totSellQty": 26875, + "bidQty": 1100, + "bidPrice": 2.4, + "askQty": 2000, + "askPrice": 2.45 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25350.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6250, + "totSellQty": 6250, + "bidQty": 1000, + "bidPrice": 1316, + "askQty": 1000, + "askPrice": 1367.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25400, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25400.00", + "oi": 29787, + "oiChg": 12775, + "oiPctChg": 75.09405125793558, + "totTradedVol": 94687, + "iv": 17.78, + "ltp": 2.25, + "change": -0.5, + "pChange": -18.181818181818183, + "totBuyQty": 585350, + "totSellQty": 67375, + "bidQty": 13725, + "bidPrice": 2.2, + "askQty": 8500, + "askPrice": 2.25 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25400.00", + "oi": 171, + "oiChg": 80, + "oiPctChg": 87.91208791208791, + "totTradedVol": 101, + "iv": 0, + "ltp": 1402.05, + "change": 357.70000000000005, + "pChange": 34.250969502561404, + "totBuyQty": 7900, + "totSellQty": 7550, + "bidQty": 75, + "bidPrice": 1380.35, + "askQty": 100, + "askPrice": 1401.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25450, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25450.00", + "oi": 3444, + "oiChg": 1326, + "oiPctChg": 62.60623229461756, + "totTradedVol": 14934, + "iv": 18.19, + "ltp": 2.15, + "change": -0.4500000000000002, + "pChange": -17.307692307692314, + "totBuyQty": 163550, + "totSellQty": 18950, + "bidQty": 2175, + "bidPrice": 2.05, + "askQty": 2000, + "askPrice": 2.15 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25450.00", + "oi": 3, + "oiChg": 2, + "oiPctChg": 200, + "totTradedVol": 5, + "iv": 0, + "ltp": 1302.45, + "change": 200.85000000000014, + "pChange": 18.23257080610023, + "totBuyQty": 6950, + "totSellQty": 5950, + "bidQty": 1000, + "bidPrice": 1417.2, + "askQty": 300, + "askPrice": 1457.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25500, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25500.00", + "oi": 121052, + "oiChg": 62164, + "oiPctChg": 105.56310283928813, + "totTradedVol": 379618, + "iv": 18.59, + "ltp": 2.1, + "change": -0.44999999999999973, + "pChange": -17.647058823529402, + "totBuyQty": 1774575, + "totSellQty": 252375, + "bidQty": 16100, + "bidPrice": 2, + "askQty": 4875, + "askPrice": 2.05 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25500.00", + "oi": 1738, + "oiChg": 595, + "oiPctChg": 52.05599300087489, + "totTradedVol": 752, + "iv": 0, + "ltp": 1486, + "change": 341.70000000000005, + "pChange": 29.861050423839906, + "totBuyQty": 10850, + "totSellQty": 8125, + "bidQty": 75, + "bidPrice": 1488.55, + "askQty": 25, + "askPrice": 1496.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25550, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25550.00", + "oi": 4265, + "oiChg": 2849, + "oiPctChg": 201.20056497175142, + "totTradedVol": 14529, + "iv": 18.98, + "ltp": 1.95, + "change": -0.34999999999999987, + "pChange": -15.21739130434782, + "totBuyQty": 157925, + "totSellQty": 81375, + "bidQty": 1725, + "bidPrice": 1.9, + "askQty": 2250, + "askPrice": 1.95 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 0, + "ltp": 1400, + "change": 260.1500000000001, + "pChange": 22.823178488397605, + "totBuyQty": 3850, + "totSellQty": 4850, + "bidQty": 150, + "bidPrice": 1528, + "askQty": 1000, + "askPrice": 1563.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25600, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25600.00", + "oi": 25421, + "oiChg": 19198, + "oiPctChg": 308.5007231238952, + "totTradedVol": 82776, + "iv": 19.22, + "ltp": 1.75, + "change": -0.3999999999999999, + "pChange": -18.604651162790695, + "totBuyQty": 839125, + "totSellQty": 172650, + "bidQty": 23300, + "bidPrice": 1.7, + "askQty": 108000, + "askPrice": 1.75 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25600.00", + "oi": 1213, + "oiChg": 104, + "oiPctChg": 9.377817853922453, + "totTradedVol": 118, + "iv": 0, + "ltp": 1600, + "change": 354, + "pChange": 28.41091492776886, + "totBuyQty": 4650, + "totSellQty": 4250, + "bidQty": 75, + "bidPrice": 1576.9, + "askQty": 100, + "askPrice": 1595.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25650, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25650.00", + "oi": 3371, + "oiChg": 2628, + "oiPctChg": 353.70121130551814, + "totTradedVol": 8722, + "iv": 19.72, + "ltp": 1.75, + "change": -0.2999999999999998, + "pChange": -14.634146341463408, + "totBuyQty": 150650, + "totSellQty": 37825, + "bidQty": 1125, + "bidPrice": 1.7, + "askQty": 2075, + "askPrice": 1.75 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4000, + "totSellQty": 3000, + "bidQty": 1000, + "bidPrice": 1616.6, + "askQty": 25, + "askPrice": 1663.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25700, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25700.00", + "oi": 23440, + "oiChg": 19916, + "oiPctChg": 565.1532349602725, + "totTradedVol": 76702, + "iv": 20.15, + "ltp": 1.65, + "change": -0.30000000000000004, + "pChange": -15.384615384615389, + "totBuyQty": 977850, + "totSellQty": 84675, + "bidQty": 33850, + "bidPrice": 1.6, + "askQty": 19125, + "askPrice": 1.65 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25700.00", + "oi": 907, + "oiChg": 177, + "oiPctChg": 24.246575342465754, + "totTradedVol": 208, + "iv": 0, + "ltp": 1678.95, + "change": 330.45000000000005, + "pChange": 24.505005561735267, + "totBuyQty": 4250, + "totSellQty": 4450, + "bidQty": 200, + "bidPrice": 1683.7, + "askQty": 125, + "askPrice": 1692.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25750, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25750.00", + "oi": 12644, + "oiChg": 4747, + "oiPctChg": 60.11143472204635, + "totTradedVol": 36293, + "iv": 20.57, + "ltp": 1.65, + "change": 0.04999999999999982, + "pChange": 3.124999999999989, + "totBuyQty": 191775, + "totSellQty": 43950, + "bidQty": 8650, + "bidPrice": 1.6, + "askQty": 1175, + "askPrice": 1.65 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 3, + "iv": 0, + "ltp": 1620, + "change": 325.8499999999999, + "pChange": 25.178688714600305, + "totBuyQty": 4625, + "totSellQty": 4600, + "bidQty": 1000, + "bidPrice": 1708.2, + "askQty": 1000, + "askPrice": 1765.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25800, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25800.00", + "oi": 30632, + "oiChg": 22886, + "oiPctChg": 295.4557190808159, + "totTradedVol": 112151, + "iv": 21.06, + "ltp": 1.6, + "change": -0.09999999999999987, + "pChange": -5.882352941176463, + "totBuyQty": 1291750, + "totSellQty": 143650, + "bidQty": 78725, + "bidPrice": 1.55, + "askQty": 37800, + "askPrice": 1.6 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25800.00", + "oi": 521, + "oiChg": 139, + "oiPctChg": 36.38743455497382, + "totTradedVol": 162, + "iv": 0, + "ltp": 1790, + "change": 357.04999999999995, + "pChange": 24.91712899961617, + "totBuyQty": 5475, + "totSellQty": 5100, + "bidQty": 50, + "bidPrice": 1779.9, + "askQty": 100, + "askPrice": 1795.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25850, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25850.00", + "oi": 1578, + "oiChg": 1050, + "oiPctChg": 198.86363636363637, + "totTradedVol": 4800, + "iv": 21.8, + "ltp": 1.7, + "change": 0, + "pChange": 0, + "totBuyQty": 300525, + "totSellQty": 36375, + "bidQty": 1025, + "bidPrice": 1.65, + "askQty": 1050, + "askPrice": 1.75 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4450, + "totSellQty": 4450, + "bidQty": 1000, + "bidPrice": 1808.55, + "askQty": 1000, + "askPrice": 1872.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25900, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25900.00", + "oi": 4276, + "oiChg": 2303, + "oiPctChg": 116.72579827673593, + "totTradedVol": 21748, + "iv": 22.13, + "ltp": 1.65, + "change": 0, + "pChange": 0, + "totBuyQty": 705450, + "totSellQty": 42375, + "bidQty": 4425, + "bidPrice": 1.65, + "askQty": 5825, + "askPrice": 1.7 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25900.00", + "oi": 276, + "oiChg": 92, + "oiPctChg": 50, + "totTradedVol": 108, + "iv": 0, + "ltp": 1848.5, + "change": 196.8499999999999, + "pChange": 11.918384645657367, + "totBuyQty": 4700, + "totSellQty": 3925, + "bidQty": 200, + "bidPrice": 1883.2, + "askQty": 25, + "askPrice": 1898.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25950, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE25950.00", + "oi": 1435, + "oiChg": 444, + "oiPctChg": 44.803229061553985, + "totTradedVol": 2851, + "iv": 22.7, + "ltp": 1.7, + "change": 0.050000000000000044, + "pChange": 3.030303030303033, + "totBuyQty": 211075, + "totSellQty": 44700, + "bidQty": 825, + "bidPrice": 1.6, + "askQty": 1375, + "askPrice": 1.7 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE25950.00", + "oi": 3, + "oiChg": 3, + "oiPctChg": 0, + "totTradedVol": 16, + "iv": 0, + "ltp": 1960, + "change": 502.8499999999999, + "pChange": 34.50914456301684, + "totBuyQty": 4575, + "totSellQty": 4575, + "bidQty": 1000, + "bidPrice": 1906.6, + "askQty": 1000, + "askPrice": 1965.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE26000.00", + "oi": 145384, + "oiChg": 95984, + "oiPctChg": 194.2995951417004, + "totTradedVol": 371464, + "iv": 23.1, + "ltp": 1.65, + "change": 0.04999999999999982, + "pChange": 3.124999999999989, + "totBuyQty": 2684700, + "totSellQty": 355150, + "bidQty": 41100, + "bidPrice": 1.65, + "askQty": 50850, + "askPrice": 1.7 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE26000.00", + "oi": 2619, + "oiChg": 1557, + "oiPctChg": 146.61016949152543, + "totTradedVol": 1735, + "iv": 0, + "ltp": 1991.9, + "change": 354.0500000000002, + "pChange": 21.616753670971104, + "totBuyQty": 8800, + "totSellQty": 5900, + "bidQty": 125, + "bidPrice": 1987, + "askQty": 150, + "askPrice": 1993.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26050, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE26050.00", + "oi": 772, + "oiChg": 490, + "oiPctChg": 173.75886524822695, + "totTradedVol": 2613, + "iv": 23.5, + "ltp": 1.55, + "change": -0.1499999999999999, + "pChange": -8.823529411764701, + "totBuyQty": 232525, + "totSellQty": 43525, + "bidQty": 2375, + "bidPrice": 1.55, + "askQty": 575, + "askPrice": 1.6 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE26050.00", + "oi": 201, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4450, + "totSellQty": 3450, + "bidQty": 1000, + "bidPrice": 2007.25, + "askQty": 25, + "askPrice": 2057.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26100, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE26100.00", + "oi": 3544, + "oiChg": 713, + "oiPctChg": 25.185446838572943, + "totTradedVol": 10488, + "iv": 24.16, + "ltp": 1.6, + "change": 0.10000000000000009, + "pChange": 6.666666666666672, + "totBuyQty": 1373025, + "totSellQty": 48300, + "bidQty": 1850, + "bidPrice": 1.6, + "askQty": 4100, + "askPrice": 1.7 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE26100.00", + "oi": 261, + "oiChg": 174, + "oiPctChg": 200, + "totTradedVol": 191, + "iv": 0, + "ltp": 2105, + "change": 365, + "pChange": 20.977011494252874, + "totBuyQty": 5175, + "totSellQty": 4575, + "bidQty": 550, + "bidPrice": 2073.85, + "askQty": 100, + "askPrice": 2096.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26150, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE26150.00", + "oi": 1121, + "oiChg": 350, + "oiPctChg": 45.39559014267186, + "totTradedVol": 3267, + "iv": 24.55, + "ltp": 1.5, + "change": -0.1499999999999999, + "pChange": -9.090909090909086, + "totBuyQty": 213800, + "totSellQty": 77075, + "bidQty": 1925, + "bidPrice": 1.45, + "askQty": 6375, + "askPrice": 1.5 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE26150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3825, + "totSellQty": 3825, + "bidQty": 1000, + "bidPrice": 2109.45, + "askQty": 1000, + "askPrice": 2161 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26200, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE26200.00", + "oi": 39539, + "oiChg": 29829, + "oiPctChg": 307.1987641606591, + "totTradedVol": 121543, + "iv": 24.94, + "ltp": 1.45, + "change": 0, + "pChange": 0, + "totBuyQty": 1353175, + "totSellQty": 285350, + "bidQty": 11450, + "bidPrice": 1.4, + "askQty": 6375, + "askPrice": 1.45 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE26200.00", + "oi": 74, + "oiChg": 70, + "oiPctChg": 1750, + "totTradedVol": 71, + "iv": 0, + "ltp": 2200, + "change": 248, + "pChange": 12.704918032786885, + "totBuyQty": 5025, + "totSellQty": 4000, + "bidQty": 1000, + "bidPrice": 2173, + "askQty": 100, + "askPrice": 2207.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26250, + "expiry": "05-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY05-12-2024CE26250.00", + "oi": 70154, + "oiChg": 44526, + "oiPctChg": 173.73965974715156, + "totTradedVol": 208112, + "iv": 25.22, + "ltp": 1.4, + "change": 0.04999999999999982, + "pChange": 3.7037037037036904, + "totBuyQty": 3173925, + "totSellQty": 323775, + "bidQty": 44800, + "bidPrice": 1.4, + "askQty": 25475, + "askPrice": 1.45 + }, + "pe": { + "id": "OPTIDXNIFTY05-12-2024PE26250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4450, + "totSellQty": 4450, + "bidQty": 1000, + "bidPrice": 2197.65, + "askQty": 1000, + "askPrice": 2269.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21600, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE21600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2395.75, + "askQty": 25, + "askPrice": 2476 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE21600.00", + "oi": 573, + "oiChg": 1, + "oiPctChg": 0.17482517482517482, + "totTradedVol": 1864, + "iv": 23.26, + "ltp": 3.35, + "change": -1.4999999999999996, + "pChange": -30.92783505154639, + "totBuyQty": 48850, + "totSellQty": 18300, + "bidQty": 100, + "bidPrice": 3.2, + "askQty": 550, + "askPrice": 3.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21650, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE21650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2347.55, + "askQty": 25, + "askPrice": 2426.95 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE21650.00", + "oi": 105, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 54150, + "totSellQty": 3550, + "bidQty": 1800, + "bidPrice": 2.8, + "askQty": 250, + "askPrice": 4.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21700, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE21700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2298.75, + "askQty": 25, + "askPrice": 2377.3 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE21700.00", + "oi": 731, + "oiChg": 129, + "oiPctChg": 21.428571428571427, + "totTradedVol": 280, + "iv": 23.11, + "ltp": 4.3, + "change": -0.04999999999999982, + "pChange": -1.1494252873563178, + "totBuyQty": 42575, + "totSellQty": 7800, + "bidQty": 900, + "bidPrice": 3.4, + "askQty": 25, + "askPrice": 3.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21750, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE21750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2250.55, + "askQty": 25, + "askPrice": 2309.9 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE21750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 22.62, + "ltp": 4.25, + "change": -0.40000000000000036, + "pChange": -8.602150537634417, + "totBuyQty": 30450, + "totSellQty": 3725, + "bidQty": 800, + "bidPrice": 3.1, + "askQty": 600, + "askPrice": 7.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21800, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE21800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2202.65, + "askQty": 25, + "askPrice": 2279.75 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE21800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 53475, + "totSellQty": 2750, + "bidQty": 1800, + "bidPrice": 3.25, + "askQty": 600, + "askPrice": 8.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21850, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE21850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2154.2, + "askQty": 25, + "askPrice": 2230.25 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE21850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 27325, + "totSellQty": 2175, + "bidQty": 1800, + "bidPrice": 2.8, + "askQty": 25, + "askPrice": 5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21900, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE21900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2106, + "askQty": 25, + "askPrice": 2181.05 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE21900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 29000, + "totSellQty": 3175, + "bidQty": 1800, + "bidPrice": 3.2, + "askQty": 25, + "askPrice": 5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21950, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE21950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2057.5, + "askQty": 25, + "askPrice": 2131.5 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE21950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 27400, + "totSellQty": 2175, + "bidQty": 1500, + "bidPrice": 3.3, + "askQty": 25, + "askPrice": 5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 2009.9, + "askQty": 25, + "askPrice": 2083 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22000.00", + "oi": 3441, + "oiChg": 678, + "oiPctChg": 24.5385450597177, + "totTradedVol": 3451, + "iv": 21.04, + "ltp": 5.55, + "change": 0.25, + "pChange": 4.716981132075472, + "totBuyQty": 67150, + "totSellQty": 9925, + "bidQty": 225, + "bidPrice": 5.45, + "askQty": 50, + "askPrice": 5.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22050, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1961.85, + "askQty": 25, + "askPrice": 2034.25 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22050.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 44450, + "totSellQty": 2900, + "bidQty": 800, + "bidPrice": 4.2, + "askQty": 350, + "askPrice": 10.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22100, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1913.1, + "askQty": 25, + "askPrice": 1984.2 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22100.00", + "oi": 128, + "oiChg": 128, + "oiPctChg": 0, + "totTradedVol": 171, + "iv": 20.26, + "ltp": 5.7, + "change": -5.6000000000000005, + "pChange": -49.557522123893804, + "totBuyQty": 28825, + "totSellQty": 4450, + "bidQty": 100, + "bidPrice": 5.25, + "askQty": 100, + "askPrice": 6.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22150, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1865.45, + "askQty": 25, + "askPrice": 1936 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 24700, + "totSellQty": 1050, + "bidQty": 800, + "bidPrice": 4.1, + "askQty": 600, + "askPrice": 11 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22200, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22200.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1817.25, + "askQty": 25, + "askPrice": 1888 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22200.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 26800, + "totSellQty": 2350, + "bidQty": 800, + "bidPrice": 4.2, + "askQty": 100, + "askPrice": 7.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22250, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1769.5, + "askQty": 25, + "askPrice": 1809.1 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 22750, + "totSellQty": 1450, + "bidQty": 800, + "bidPrice": 3.8, + "askQty": 400, + "askPrice": 12.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22300, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22300.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1720.45, + "askQty": 25, + "askPrice": 1759.85 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22300.00", + "oi": 1299, + "oiChg": 405, + "oiPctChg": 45.30201342281879, + "totTradedVol": 1486, + "iv": 18.79, + "ltp": 7.25, + "change": 1.2000000000000002, + "pChange": 19.834710743801658, + "totBuyQty": 53000, + "totSellQty": 10875, + "bidQty": 500, + "bidPrice": 6.95, + "askQty": 125, + "askPrice": 7.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22350, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1672.45, + "askQty": 25, + "askPrice": 1711.25 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22350.00", + "oi": 465, + "oiChg": 339, + "oiPctChg": 269.04761904761904, + "totTradedVol": 572, + "iv": 18.7, + "ltp": 7.55, + "change": 0.8999999999999995, + "pChange": 13.533834586466156, + "totBuyQty": 41100, + "totSellQty": 3850, + "bidQty": 275, + "bidPrice": 6.75, + "askQty": 1000, + "askPrice": 8.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22400, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22400.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1624.75, + "askQty": 25, + "askPrice": 1663.45 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22400.00", + "oi": 532, + "oiChg": 122, + "oiPctChg": 29.75609756097561, + "totTradedVol": 542, + "iv": 18.38, + "ltp": 8.7, + "change": 1.8499999999999996, + "pChange": 27.007299270072988, + "totBuyQty": 44250, + "totSellQty": 4450, + "bidQty": 400, + "bidPrice": 7.9, + "askQty": 625, + "askPrice": 8.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22450, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1578.1, + "askQty": 25, + "askPrice": 1615.5 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 19275, + "totSellQty": 1050, + "bidQty": 800, + "bidPrice": 6.1, + "askQty": 450, + "askPrice": 16.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22500, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22500.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1529.8, + "askQty": 25, + "askPrice": 1567.6 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22500.00", + "oi": 5491, + "oiChg": 2110, + "oiPctChg": 62.40757172434191, + "totTradedVol": 10435, + "iv": 18.13, + "ltp": 11.15, + "change": 2.9000000000000004, + "pChange": 35.151515151515156, + "totBuyQty": 61550, + "totSellQty": 4950, + "bidQty": 1800, + "bidPrice": 11, + "askQty": 875, + "askPrice": 11.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22550, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1482.45, + "askQty": 25, + "askPrice": 1520.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22550.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 19550, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 7.7, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22600, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 38.42, + "ltp": 1630.15, + "change": -160.5999999999999, + "pChange": -8.96830936758341, + "totBuyQty": 1200, + "totSellQty": 1350, + "bidQty": 50, + "bidPrice": 1430, + "askQty": 150, + "askPrice": 1461.8 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22600.00", + "oi": 1058, + "oiChg": 284, + "oiPctChg": 36.69250645994832, + "totTradedVol": 956, + "iv": 17.56, + "ltp": 12.7, + "change": 3.9499999999999993, + "pChange": 45.14285714285713, + "totBuyQty": 37400, + "totSellQty": 3725, + "bidQty": 475, + "bidPrice": 12.15, + "askQty": 325, + "askPrice": 12.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22650, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1386.25, + "askQty": 25, + "askPrice": 1424.4 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22650.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 23575, + "totSellQty": 0, + "bidQty": 1000, + "bidPrice": 8.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22700, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 925, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1338.35, + "askQty": 25, + "askPrice": 1376.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22700.00", + "oi": 933, + "oiChg": -391, + "oiPctChg": -29.531722054380666, + "totTradedVol": 3776, + "iv": 17.07, + "ltp": 14.05, + "change": 4.25, + "pChange": 43.36734693877551, + "totBuyQty": 35575, + "totSellQty": 3475, + "bidQty": 975, + "bidPrice": 14.85, + "askQty": 200, + "askPrice": 15.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22750, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1269.15, + "askQty": 25, + "askPrice": 1329.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 21925, + "totSellQty": 600, + "bidQty": 600, + "bidPrice": 10.5, + "askQty": 600, + "askPrice": 26.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22800, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1222.85, + "askQty": 25, + "askPrice": 1269.9 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22800.00", + "oi": 2592, + "oiChg": 549, + "oiPctChg": 26.87224669603524, + "totTradedVol": 6439, + "iv": 16.72, + "ltp": 18.9, + "change": 7.099999999999998, + "pChange": 60.1694915254237, + "totBuyQty": 43675, + "totSellQty": 4075, + "bidQty": 125, + "bidPrice": 18.6, + "askQty": 950, + "askPrice": 18.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22850, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1025, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1177.25, + "askQty": 25, + "askPrice": 1220.75 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 20275, + "totSellQty": 1200, + "bidQty": 300, + "bidPrice": 18.2, + "askQty": 300, + "askPrice": 25.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22900, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22900.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 31.04, + "ltp": 1300, + "change": -88.65000000000009, + "pChange": -6.383898030461245, + "totBuyQty": 1100, + "totSellQty": 1250, + "bidQty": 50, + "bidPrice": 1131.3, + "askQty": 50, + "askPrice": 1173.1 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22900.00", + "oi": 4038, + "oiChg": 3263, + "oiPctChg": 421.03225806451616, + "totTradedVol": 10606, + "iv": 16.19, + "ltp": 22.8, + "change": 9.200000000000001, + "pChange": 67.64705882352942, + "totBuyQty": 43400, + "totSellQty": 2875, + "bidQty": 25, + "bidPrice": 22.8, + "askQty": 1575, + "askPrice": 23.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22950, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE22950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 44.44, + "ltp": 1462.1, + "change": -13.700000000000045, + "pChange": -0.9283100691150594, + "totBuyQty": 1600, + "totSellQty": 1575, + "bidQty": 150, + "bidPrice": 1096.8, + "askQty": 50, + "askPrice": 1134.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE22950.00", + "oi": 268, + "oiChg": 176, + "oiPctChg": 191.30434782608697, + "totTradedVol": 407, + "iv": 16.37, + "ltp": 25.35, + "change": 12.350000000000001, + "pChange": 95, + "totBuyQty": 28825, + "totSellQty": 3900, + "bidQty": 100, + "bidPrice": 25.85, + "askQty": 525, + "askPrice": 27 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23000.00", + "oi": 578, + "oiChg": 475, + "oiPctChg": 461.1650485436893, + "totTradedVol": 577, + "iv": 19.67, + "ltp": 1085.05, + "change": -334.95000000000005, + "pChange": -23.588028169014088, + "totBuyQty": 3225, + "totSellQty": 3475, + "bidQty": 25, + "bidPrice": 1061.45, + "askQty": 100, + "askPrice": 1067.5 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23000.00", + "oi": 14895, + "oiChg": 5165, + "oiPctChg": 53.08324768756423, + "totTradedVol": 48322, + "iv": 16.14, + "ltp": 30.35, + "change": 14.25, + "pChange": 88.50931677018633, + "totBuyQty": 53475, + "totSellQty": 68425, + "bidQty": 300, + "bidPrice": 30.2, + "askQty": 200, + "askPrice": 30.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23050, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23050.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 17.89, + "ltp": 1024.9, + "change": 324.9000000000001, + "pChange": 46.414285714285725, + "totBuyQty": 1450, + "totSellQty": 1425, + "bidQty": 50, + "bidPrice": 1006.1, + "askQty": 50, + "askPrice": 1043.5 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23050.00", + "oi": 305, + "oiChg": 154, + "oiPctChg": 101.98675496688742, + "totTradedVol": 961, + "iv": 15.74, + "ltp": 29.4, + "change": 12.549999999999997, + "pChange": 74.48071216617208, + "totBuyQty": 39625, + "totSellQty": 6525, + "bidQty": 50, + "bidPrice": 32.35, + "askQty": 275, + "askPrice": 33.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23100, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23100.00", + "oi": 12, + "oiChg": 8, + "oiPctChg": 200, + "totTradedVol": 9, + "iv": 25.42, + "ltp": 1070, + "change": -233.29999999999995, + "pChange": -17.900713573237166, + "totBuyQty": 1625, + "totSellQty": 1750, + "bidQty": 50, + "bidPrice": 958.5, + "askQty": 150, + "askPrice": 983.25 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23100.00", + "oi": 2852, + "oiChg": 1481, + "oiPctChg": 108.02334062727935, + "totTradedVol": 9912, + "iv": 15.66, + "ltp": 37.05, + "change": 18.749999999999996, + "pChange": 102.4590163934426, + "totBuyQty": 46200, + "totSellQty": 6425, + "bidQty": 200, + "bidPrice": 36.65, + "askQty": 250, + "askPrice": 37.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23150, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23150.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 375, + "totSellQty": 1350, + "bidQty": 25, + "bidPrice": 919.95, + "askQty": 25, + "askPrice": 955.95 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23150.00", + "oi": 428, + "oiChg": 297, + "oiPctChg": 226.7175572519084, + "totTradedVol": 485, + "iv": 15.5, + "ltp": 40.95, + "change": 20.950000000000003, + "pChange": 104.75000000000001, + "totBuyQty": 37875, + "totSellQty": 4125, + "bidQty": 25, + "bidPrice": 40.9, + "askQty": 100, + "askPrice": 41.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23200, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23200.00", + "oi": 116, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 4, + "iv": 39.5, + "ltp": 1214, + "change": 0, + "pChange": 0, + "totBuyQty": 1700, + "totSellQty": 1650, + "bidQty": 50, + "bidPrice": 868.25, + "askQty": 275, + "askPrice": 900.1 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23200.00", + "oi": 4719, + "oiChg": 679, + "oiPctChg": 16.806930693069308, + "totTradedVol": 16011, + "iv": 15.52, + "ltp": 46.7, + "change": 24.900000000000002, + "pChange": 114.22018348623854, + "totBuyQty": 49825, + "totSellQty": 15550, + "bidQty": 50, + "bidPrice": 46.4, + "askQty": 575, + "askPrice": 46.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23250, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23250.00", + "oi": 17, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 22.12, + "ltp": 909.5, + "change": -265.5, + "pChange": -22.595744680851062, + "totBuyQty": 1525, + "totSellQty": 1500, + "bidQty": 50, + "bidPrice": 822.9, + "askQty": 125, + "askPrice": 862.2 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23250.00", + "oi": 492, + "oiChg": 212, + "oiPctChg": 75.71428571428571, + "totTradedVol": 927, + "iv": 14.99, + "ltp": 50.95, + "change": 27.250000000000004, + "pChange": 114.97890295358653, + "totBuyQty": 40400, + "totSellQty": 5850, + "bidQty": 50, + "bidPrice": 49.9, + "askQty": 500, + "askPrice": 51.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23300, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23300.00", + "oi": 164, + "oiChg": -3, + "oiPctChg": -1.7964071856287425, + "totTradedVol": 30, + "iv": 22.02, + "ltp": 870.05, + "change": -243.04999999999995, + "pChange": -21.835414607851945, + "totBuyQty": 1650, + "totSellQty": 1925, + "bidQty": 50, + "bidPrice": 785.4, + "askQty": 150, + "askPrice": 806.3 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23300.00", + "oi": 5905, + "oiChg": 1968, + "oiPctChg": 49.98729997459995, + "totTradedVol": 19772, + "iv": 15.15, + "ltp": 58.05, + "change": 31.799999999999997, + "pChange": 121.14285714285712, + "totBuyQty": 48250, + "totSellQty": 21325, + "bidQty": 675, + "bidPrice": 57.7, + "askQty": 1025, + "askPrice": 58.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23350, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23350.00", + "oi": 61, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 5, + "iv": 15.29, + "ltp": 742.5, + "change": -352.5, + "pChange": -32.19178082191781, + "totBuyQty": 3500, + "totSellQty": 1700, + "bidQty": 25, + "bidPrice": 736, + "askQty": 75, + "askPrice": 768.8 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23350.00", + "oi": 604, + "oiChg": 193, + "oiPctChg": 46.95863746958638, + "totTradedVol": 2144, + "iv": 14.83, + "ltp": 63.55, + "change": 34.4, + "pChange": 118.01029159519724, + "totBuyQty": 41475, + "totSellQty": 6800, + "bidQty": 250, + "bidPrice": 63, + "askQty": 50, + "askPrice": 64.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23400, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23400.00", + "oi": 235, + "oiChg": -12, + "oiPctChg": -4.8582995951417, + "totTradedVol": 51, + "iv": 20.6, + "ltp": 774.8, + "change": -128.85000000000002, + "pChange": -14.258839152326678, + "totBuyQty": 3775, + "totSellQty": 1900, + "bidQty": 150, + "bidPrice": 694.3, + "askQty": 25, + "askPrice": 720.15 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23400.00", + "oi": 6197, + "oiChg": 2860, + "oiPctChg": 85.70572370392568, + "totTradedVol": 21224, + "iv": 14.9, + "ltp": 72.85, + "change": 40.599999999999994, + "pChange": 125.89147286821705, + "totBuyQty": 51250, + "totSellQty": 16375, + "bidQty": 1025, + "bidPrice": 72.1, + "askQty": 200, + "askPrice": 72.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23450, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23450.00", + "oi": 86, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 18.69, + "ltp": 709.6, + "change": 49.75, + "pChange": 7.539592331590512, + "totBuyQty": 2375, + "totSellQty": 1550, + "bidQty": 25, + "bidPrice": 653.75, + "askQty": 25, + "askPrice": 680.55 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23450.00", + "oi": 840, + "oiChg": 295, + "oiPctChg": 54.12844036697248, + "totTradedVol": 2170, + "iv": 14.72, + "ltp": 79.75, + "change": 44.35, + "pChange": 125.28248587570623, + "totBuyQty": 42950, + "totSellQty": 13275, + "bidQty": 500, + "bidPrice": 79.55, + "askQty": 500, + "askPrice": 81.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23500, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23500.00", + "oi": 866, + "oiChg": 46, + "oiPctChg": 5.609756097560975, + "totTradedVol": 995, + "iv": 17.49, + "ltp": 626, + "change": -288.65, + "pChange": -31.558519652326023, + "totBuyQty": 7500, + "totSellQty": 5825, + "bidQty": 25, + "bidPrice": 627.6, + "askQty": 350, + "askPrice": 631 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23500.00", + "oi": 17158, + "oiChg": 8531, + "oiPctChg": 98.88721455894286, + "totTradedVol": 58062, + "iv": 14.7, + "ltp": 90.6, + "change": 50.89999999999999, + "pChange": 128.21158690176318, + "totBuyQty": 71350, + "totSellQty": 44475, + "bidQty": 350, + "bidPrice": 90.25, + "askQty": 25, + "askPrice": 90.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23550, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23550.00", + "oi": 221, + "oiChg": 13, + "oiPctChg": 6.25, + "totTradedVol": 42, + "iv": 18.52, + "ltp": 618.1, + "change": -274.94999999999993, + "pChange": -30.78774984603325, + "totBuyQty": 6000, + "totSellQty": 2950, + "bidQty": 150, + "bidPrice": 579.35, + "askQty": 25, + "askPrice": 597.5 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23550.00", + "oi": 652, + "oiChg": 222, + "oiPctChg": 51.627906976744185, + "totTradedVol": 2161, + "iv": 14.55, + "ltp": 101, + "change": 57.45, + "pChange": 131.91733639494836, + "totBuyQty": 28175, + "totSellQty": 18350, + "bidQty": 200, + "bidPrice": 99.7, + "askQty": 500, + "askPrice": 100.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23600, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23600.00", + "oi": 530, + "oiChg": -74, + "oiPctChg": -12.251655629139073, + "totTradedVol": 471, + "iv": 16.93, + "ltp": 550, + "change": -277.9, + "pChange": -33.56685590047107, + "totBuyQty": 5750, + "totSellQty": 2150, + "bidQty": 100, + "bidPrice": 548.85, + "askQty": 250, + "askPrice": 551.55 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23600.00", + "oi": 4591, + "oiChg": 810, + "oiPctChg": 21.422903993652472, + "totTradedVol": 20604, + "iv": 14.32, + "ltp": 114.35, + "change": 65.85, + "pChange": 135.77319587628864, + "totBuyQty": 35450, + "totSellQty": 20575, + "bidQty": 300, + "bidPrice": 111.6, + "askQty": 25, + "askPrice": 112.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23650, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23650.00", + "oi": 44, + "oiChg": 7, + "oiPctChg": 18.91891891891892, + "totTradedVol": 28, + "iv": 15.55, + "ltp": 517.6, + "change": -276.54999999999995, + "pChange": -34.823396083863244, + "totBuyQty": 8150, + "totSellQty": 1525, + "bidQty": 225, + "bidPrice": 503, + "askQty": 50, + "askPrice": 519.9 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23650.00", + "oi": 734, + "oiChg": 144, + "oiPctChg": 24.406779661016948, + "totTradedVol": 2010, + "iv": 14.04, + "ltp": 123, + "change": 69.05, + "pChange": 127.98887859128823, + "totBuyQty": 16350, + "totSellQty": 23300, + "bidQty": 50, + "bidPrice": 122.85, + "askQty": 125, + "askPrice": 124.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23700, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23700.00", + "oi": 539, + "oiChg": 188, + "oiPctChg": 53.56125356125356, + "totTradedVol": 3381, + "iv": 15.67, + "ltp": 474.15, + "change": -265.85, + "pChange": -35.92567567567568, + "totBuyQty": 23425, + "totSellQty": 6875, + "bidQty": 175, + "bidPrice": 472.95, + "askQty": 500, + "askPrice": 475.05 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23700.00", + "oi": 4037, + "oiChg": 1494, + "oiPctChg": 58.7495084545812, + "totTradedVol": 16900, + "iv": 14.06, + "ltp": 137.9, + "change": 78.2, + "pChange": 130.98827470686766, + "totBuyQty": 33050, + "totSellQty": 23550, + "bidQty": 650, + "bidPrice": 137, + "askQty": 125, + "askPrice": 138.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23750, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23750.00", + "oi": 87, + "oiChg": 26, + "oiPctChg": 42.622950819672134, + "totTradedVol": 288, + "iv": 16.45, + "ltp": 440, + "change": -268.6, + "pChange": -37.90572960767712, + "totBuyQty": 17050, + "totSellQty": 3900, + "bidQty": 500, + "bidPrice": 440.1, + "askQty": 500, + "askPrice": 442.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23750.00", + "oi": 952, + "oiChg": 435, + "oiPctChg": 84.13926499032883, + "totTradedVol": 2019, + "iv": 13.55, + "ltp": 149.95, + "change": 83.19999999999999, + "pChange": 124.64419475655428, + "totBuyQty": 13275, + "totSellQty": 14575, + "bidQty": 150, + "bidPrice": 150.1, + "askQty": 100, + "askPrice": 152 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23800, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23800.00", + "oi": 1054, + "oiChg": 281, + "oiPctChg": 36.35187580853816, + "totTradedVol": 3496, + "iv": 15.41, + "ltp": 405.65, + "change": -243.55000000000007, + "pChange": -37.515403573629094, + "totBuyQty": 34575, + "totSellQty": 11400, + "bidQty": 500, + "bidPrice": 403.35, + "askQty": 25, + "askPrice": 406.95 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23800.00", + "oi": 6328, + "oiChg": 2732, + "oiPctChg": 75.97330367074527, + "totTradedVol": 29964, + "iv": 13.78, + "ltp": 168.6, + "change": 94.14999999999999, + "pChange": 126.46071188717258, + "totBuyQty": 28300, + "totSellQty": 23500, + "bidQty": 350, + "bidPrice": 167, + "askQty": 325, + "askPrice": 167.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23850, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23850.00", + "oi": 216, + "oiChg": 110, + "oiPctChg": 103.77358490566037, + "totTradedVol": 413, + "iv": 15.25, + "ltp": 375.1, + "change": -225.94999999999993, + "pChange": -37.59254637717327, + "totBuyQty": 24200, + "totSellQty": 5200, + "bidQty": 325, + "bidPrice": 372.85, + "askQty": 100, + "askPrice": 378.2 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23850.00", + "oi": 904, + "oiChg": 499, + "oiPctChg": 123.20987654320987, + "totTradedVol": 3023, + "iv": 13.37, + "ltp": 184.9, + "change": 101.60000000000001, + "pChange": 121.96878751500601, + "totBuyQty": 12975, + "totSellQty": 12575, + "bidQty": 375, + "bidPrice": 183.35, + "askQty": 500, + "askPrice": 185.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23900, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23900.00", + "oi": 1871, + "oiChg": 1151, + "oiPctChg": 159.86111111111111, + "totTradedVol": 7456, + "iv": 14.99, + "ltp": 342.3, + "change": -230.55, + "pChange": -40.24613773239068, + "totBuyQty": 38100, + "totSellQty": 13650, + "bidQty": 750, + "bidPrice": 340.3, + "askQty": 600, + "askPrice": 342.45 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23900.00", + "oi": 5942, + "oiChg": 3319, + "oiPctChg": 126.53450247807854, + "totTradedVol": 26867, + "iv": 13.55, + "ltp": 202, + "change": 110.25, + "pChange": 120.16348773841963, + "totBuyQty": 23875, + "totSellQty": 22425, + "bidQty": 225, + "bidPrice": 201.8, + "askQty": 50, + "askPrice": 202.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23950, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE23950.00", + "oi": 360, + "oiChg": 117, + "oiPctChg": 48.148148148148145, + "totTradedVol": 1117, + "iv": 15.09, + "ltp": 310.05, + "change": -230.7, + "pChange": -42.6629680998613, + "totBuyQty": 23750, + "totSellQty": 9775, + "bidQty": 150, + "bidPrice": 311.2, + "askQty": 25, + "askPrice": 312.45 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE23950.00", + "oi": 837, + "oiChg": 534, + "oiPctChg": 176.23762376237624, + "totTradedVol": 3517, + "iv": 13.28, + "ltp": 225.05, + "change": 122.80000000000001, + "pChange": 120.09779951100245, + "totBuyQty": 6450, + "totSellQty": 15500, + "bidQty": 25, + "bidPrice": 223.55, + "askQty": 25, + "askPrice": 225.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24000.00", + "oi": 9048, + "oiChg": 4603, + "oiPctChg": 103.55455568053993, + "totTradedVol": 31475, + "iv": 14.7, + "ltp": 281.15, + "change": -213, + "pChange": -43.10432055044015, + "totBuyQty": 40325, + "totSellQty": 46075, + "bidQty": 25, + "bidPrice": 283.25, + "askQty": 500, + "askPrice": 284.35 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24000.00", + "oi": 16275, + "oiChg": 3397, + "oiPctChg": 26.378319614847026, + "totTradedVol": 65899, + "iv": 13.34, + "ltp": 244.85, + "change": 130.85, + "pChange": 114.78070175438594, + "totBuyQty": 36325, + "totSellQty": 39450, + "bidQty": 400, + "bidPrice": 243.05, + "askQty": 125, + "askPrice": 244.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24050, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24050.00", + "oi": 803, + "oiChg": 673, + "oiPctChg": 517.6923076923077, + "totTradedVol": 4190, + "iv": 14.91, + "ltp": 260.55, + "change": -197.64999999999998, + "pChange": -43.13618507202095, + "totBuyQty": 31050, + "totSellQty": 15250, + "bidQty": 75, + "bidPrice": 258.5, + "askQty": 675, + "askPrice": 260.75 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24050.00", + "oi": 937, + "oiChg": -1578, + "oiPctChg": -62.74353876739563, + "totTradedVol": 9738, + "iv": 12.76, + "ltp": 268, + "change": 141.15, + "pChange": 111.27315727236895, + "totBuyQty": 12925, + "totSellQty": 9000, + "bidQty": 200, + "bidPrice": 267.65, + "askQty": 150, + "askPrice": 269.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24100, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24100.00", + "oi": 5142, + "oiChg": 3154, + "oiPctChg": 158.65191146881287, + "totTradedVol": 18979, + "iv": 14.66, + "ltp": 234.2, + "change": -185.7, + "pChange": -44.22481543224578, + "totBuyQty": 38875, + "totSellQty": 39875, + "bidQty": 600, + "bidPrice": 234.05, + "askQty": 325, + "askPrice": 235.3 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24100.00", + "oi": 4733, + "oiChg": 1813, + "oiPctChg": 62.08904109589041, + "totTradedVol": 28713, + "iv": 12.96, + "ltp": 294, + "change": 154.9, + "pChange": 111.3587347232207, + "totBuyQty": 14075, + "totSellQty": 17900, + "bidQty": 350, + "bidPrice": 292.25, + "askQty": 75, + "askPrice": 294.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24150, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24150.00", + "oi": 808, + "oiChg": 506, + "oiPctChg": 167.5496688741722, + "totTradedVol": 3579, + "iv": 14.48, + "ltp": 213.1, + "change": -172.4, + "pChange": -44.72114137483788, + "totBuyQty": 30550, + "totSellQty": 14650, + "bidQty": 350, + "bidPrice": 210.45, + "askQty": 700, + "askPrice": 212.5 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24150.00", + "oi": 966, + "oiChg": 100, + "oiPctChg": 11.547344110854503, + "totTradedVol": 4654, + "iv": 12.49, + "ltp": 326.1, + "change": 170.35000000000002, + "pChange": 109.37399678972714, + "totBuyQty": 4750, + "totSellQty": 3725, + "bidQty": 100, + "bidPrice": 319.25, + "askQty": 500, + "askPrice": 321.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24200, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24200.00", + "oi": 12020, + "oiChg": 4684, + "oiPctChg": 63.849509269356595, + "totTradedVol": 36897, + "iv": 14.33, + "ltp": 190.3, + "change": -161.55, + "pChange": -45.91445218132727, + "totBuyQty": 54825, + "totSellQty": 43500, + "bidQty": 675, + "bidPrice": 189.8, + "askQty": 375, + "askPrice": 191.1 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24200.00", + "oi": 13790, + "oiChg": 4877, + "oiPctChg": 54.71782789184338, + "totTradedVol": 51018, + "iv": 12.85, + "ltp": 348, + "change": 177.9, + "pChange": 104.58553791887127, + "totBuyQty": 35200, + "totSellQty": 39450, + "bidQty": 1000, + "bidPrice": 348.5, + "askQty": 700, + "askPrice": 349.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24250, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24250.00", + "oi": 1745, + "oiChg": 1209, + "oiPctChg": 225.5597014925373, + "totTradedVol": 6610, + "iv": 14.73, + "ltp": 171.55, + "change": -147.95, + "pChange": -46.306729264475734, + "totBuyQty": 30900, + "totSellQty": 24350, + "bidQty": 525, + "bidPrice": 169.3, + "askQty": 25, + "askPrice": 170.3 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24250.00", + "oi": 644, + "oiChg": -165, + "oiPctChg": -20.3955500618047, + "totTradedVol": 2565, + "iv": 12.14, + "ltp": 378.8, + "change": 191.20000000000002, + "pChange": 101.91897654584223, + "totBuyQty": 5300, + "totSellQty": 7100, + "bidQty": 200, + "bidPrice": 377.5, + "askQty": 500, + "askPrice": 379.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24300, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24300.00", + "oi": 11526, + "oiChg": 6373, + "oiPctChg": 123.67552881816418, + "totTradedVol": 45279, + "iv": 14.21, + "ltp": 151, + "change": -137.2, + "pChange": -47.6058292852186, + "totBuyQty": 37050, + "totSellQty": 39675, + "bidQty": 400, + "bidPrice": 150.6, + "askQty": 125, + "askPrice": 151.5 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24300.00", + "oi": 7816, + "oiChg": 1572, + "oiPctChg": 25.176169122357464, + "totTradedVol": 28610, + "iv": 12.54, + "ltp": 413.7, + "change": 206.89999999999998, + "pChange": 100.04835589941972, + "totBuyQty": 12300, + "totSellQty": 11575, + "bidQty": 1050, + "bidPrice": 408.55, + "askQty": 50, + "askPrice": 410.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24350, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24350.00", + "oi": 1837, + "oiChg": 1053, + "oiPctChg": 134.3112244897959, + "totTradedVol": 3796, + "iv": 14.19, + "ltp": 136.35, + "change": -123.75000000000003, + "pChange": -47.577854671280285, + "totBuyQty": 33250, + "totSellQty": 36225, + "bidQty": 200, + "bidPrice": 133.9, + "askQty": 750, + "askPrice": 135.3 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24350.00", + "oi": 460, + "oiChg": -205, + "oiPctChg": -30.827067669172934, + "totTradedVol": 1658, + "iv": 11.79, + "ltp": 415.65, + "change": 187.89999999999998, + "pChange": 82.50274423710208, + "totBuyQty": 4275, + "totSellQty": 3075, + "bidQty": 450, + "bidPrice": 437.85, + "askQty": 25, + "askPrice": 440.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24400, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24400.00", + "oi": 9737, + "oiChg": 5508, + "oiPctChg": 130.2435563963112, + "totTradedVol": 31378, + "iv": 14, + "ltp": 117.65, + "change": -113.04999999999998, + "pChange": -49.00303424360641, + "totBuyQty": 43250, + "totSellQty": 33650, + "bidQty": 500, + "bidPrice": 117.75, + "askQty": 50, + "askPrice": 118.55 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24400.00", + "oi": 5255, + "oiChg": 1788, + "oiPctChg": 51.57196423420825, + "totTradedVol": 8474, + "iv": 12.33, + "ltp": 482.7, + "change": 231.5, + "pChange": 92.15764331210191, + "totBuyQty": 2225, + "totSellQty": 2400, + "bidQty": 200, + "bidPrice": 475.95, + "askQty": 200, + "askPrice": 478 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24450, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24450.00", + "oi": 1323, + "oiChg": 665, + "oiPctChg": 101.06382978723404, + "totTradedVol": 2320, + "iv": 14.32, + "ltp": 105.35, + "change": -101.15, + "pChange": -48.98305084745763, + "totBuyQty": 35050, + "totSellQty": 24825, + "bidQty": 550, + "bidPrice": 103.85, + "askQty": 50, + "askPrice": 105.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24450.00", + "oi": 330, + "oiChg": -56, + "oiPctChg": -14.507772020725389, + "totTradedVol": 480, + "iv": 9.12, + "ltp": 500, + "change": 226.39999999999998, + "pChange": 82.7485380116959, + "totBuyQty": 3075, + "totSellQty": 3275, + "bidQty": 25, + "bidPrice": 506.8, + "askQty": 25, + "askPrice": 509.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24500, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24500.00", + "oi": 16125, + "oiChg": 3838, + "oiPctChg": 31.236265972165704, + "totTradedVol": 57641, + "iv": 13.91, + "ltp": 92, + "change": -90.15, + "pChange": -49.49217677738128, + "totBuyQty": 54125, + "totSellQty": 52850, + "bidQty": 350, + "bidPrice": 91.55, + "askQty": 125, + "askPrice": 92.35 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24500.00", + "oi": 5187, + "oiChg": -467, + "oiPctChg": -8.259639193491333, + "totTradedVol": 10369, + "iv": 12.05, + "ltp": 550, + "change": 251.3, + "pChange": 84.1312353531972, + "totBuyQty": 10575, + "totSellQty": 12600, + "bidQty": 50, + "bidPrice": 542.25, + "askQty": 25, + "askPrice": 544.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24550, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24550.00", + "oi": 811, + "oiChg": 307, + "oiPctChg": 60.91269841269841, + "totTradedVol": 5023, + "iv": 14.21, + "ltp": 80.65, + "change": -78.9, + "pChange": -49.45158257599498, + "totBuyQty": 31175, + "totSellQty": 17600, + "bidQty": 325, + "bidPrice": 80.8, + "askQty": 400, + "askPrice": 81.85 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24550.00", + "oi": 151, + "oiChg": -266, + "oiPctChg": -63.78896882494005, + "totTradedVol": 520, + "iv": 11.72, + "ltp": 569.1, + "change": 239.25, + "pChange": 72.53296953160527, + "totBuyQty": 2900, + "totSellQty": 2875, + "bidQty": 25, + "bidPrice": 582.55, + "askQty": 25, + "askPrice": 585.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24600, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24600.00", + "oi": 3657, + "oiChg": 1242, + "oiPctChg": 51.42857142857143, + "totTradedVol": 17992, + "iv": 13.96, + "ltp": 70.15, + "change": -70.75, + "pChange": -50.21291696238467, + "totBuyQty": 35625, + "totSellQty": 31225, + "bidQty": 275, + "bidPrice": 69.75, + "askQty": 400, + "askPrice": 70.25 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24600.00", + "oi": 564, + "oiChg": -254, + "oiPctChg": -31.051344743276285, + "totTradedVol": 1320, + "iv": 11.98, + "ltp": 613.8, + "change": 257.34999999999997, + "pChange": 72.19806424463458, + "totBuyQty": 3700, + "totSellQty": 3850, + "bidQty": 200, + "bidPrice": 616.1, + "askQty": 200, + "askPrice": 629.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24650, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24650.00", + "oi": 655, + "oiChg": 217, + "oiPctChg": 49.54337899543379, + "totTradedVol": 2216, + "iv": 13.78, + "ltp": 60.5, + "change": -62.349999999999994, + "pChange": -50.75295075295075, + "totBuyQty": 22650, + "totSellQty": 18775, + "bidQty": 500, + "bidPrice": 60.8, + "askQty": 200, + "askPrice": 62 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24650.00", + "oi": 107, + "oiChg": -134, + "oiPctChg": -55.601659751037346, + "totTradedVol": 357, + "iv": 10.41, + "ltp": 667.85, + "change": 278.3, + "pChange": 71.4414067513798, + "totBuyQty": 3075, + "totSellQty": 3825, + "bidQty": 250, + "bidPrice": 662.15, + "askQty": 250, + "askPrice": 665.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24700, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24700.00", + "oi": 6430, + "oiChg": 3397, + "oiPctChg": 112.00131882624464, + "totTradedVol": 27328, + "iv": 13.83, + "ltp": 53.15, + "change": -52.9, + "pChange": -49.88213107024988, + "totBuyQty": 36975, + "totSellQty": 30775, + "bidQty": 550, + "bidPrice": 52.8, + "askQty": 25, + "askPrice": 53.05 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24700.00", + "oi": 517, + "oiChg": 11, + "oiPctChg": 2.1739130434782608, + "totTradedVol": 1053, + "iv": 0, + "ltp": 664.85, + "change": 238.15000000000003, + "pChange": 55.81204593391143, + "totBuyQty": 1825, + "totSellQty": 1825, + "bidQty": 50, + "bidPrice": 703.6, + "askQty": 75, + "askPrice": 714.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24750, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24750.00", + "oi": 971, + "oiChg": 462, + "oiPctChg": 90.76620825147347, + "totTradedVol": 2959, + "iv": 14.26, + "ltp": 46.55, + "change": -44.3, + "pChange": -48.76169510181618, + "totBuyQty": 21000, + "totSellQty": 9625, + "bidQty": 500, + "bidPrice": 46.1, + "askQty": 75, + "askPrice": 46.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24750.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1450, + "totSellQty": 425, + "bidQty": 25, + "bidPrice": 735.9, + "askQty": 25, + "askPrice": 763.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24800, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24800.00", + "oi": 6183, + "oiChg": 1649, + "oiPctChg": 36.369651521835024, + "totTradedVol": 33761, + "iv": 13.85, + "ltp": 40.1, + "change": -37.65, + "pChange": -48.42443729903537, + "totBuyQty": 38200, + "totSellQty": 28800, + "bidQty": 400, + "bidPrice": 40.1, + "askQty": 25, + "askPrice": 40.4 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24800.00", + "oi": 196, + "oiChg": 106, + "oiPctChg": 117.77777777777777, + "totTradedVol": 920, + "iv": 0, + "ltp": 797, + "change": 297.85, + "pChange": 59.6714414504658, + "totBuyQty": 2025, + "totSellQty": 2200, + "bidQty": 25, + "bidPrice": 788.95, + "askQty": 250, + "askPrice": 794.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24850, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24850.00", + "oi": 668, + "oiChg": 375, + "oiPctChg": 127.9863481228669, + "totTradedVol": 3894, + "iv": 13.82, + "ltp": 35.6, + "change": -31.499999999999993, + "pChange": -46.94485842026825, + "totBuyQty": 30900, + "totSellQty": 12075, + "bidQty": 700, + "bidPrice": 34.15, + "askQty": 2125, + "askPrice": 35.45 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24850.00", + "oi": 51, + "oiChg": 36, + "oiPctChg": 240, + "totTradedVol": 60, + "iv": 12.58, + "ltp": 839.25, + "change": 295.4, + "pChange": 54.31644754987588, + "totBuyQty": 1800, + "totSellQty": 1500, + "bidQty": 25, + "bidPrice": 818.4, + "askQty": 25, + "askPrice": 848.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24900, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24900.00", + "oi": 2970, + "oiChg": 1002, + "oiPctChg": 50.91463414634146, + "totTradedVol": 23030, + "iv": 13.87, + "ltp": 30.15, + "change": -26.6, + "pChange": -46.87224669603525, + "totBuyQty": 44100, + "totSellQty": 13950, + "bidQty": 925, + "bidPrice": 29.55, + "askQty": 400, + "askPrice": 30.15 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24900.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1400, + "totSellQty": 1375, + "bidQty": 25, + "bidPrice": 862.95, + "askQty": 25, + "askPrice": 897.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24950, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE24950.00", + "oi": 788, + "oiChg": 213, + "oiPctChg": 37.04347826086956, + "totTradedVol": 1835, + "iv": 13.9, + "ltp": 25.5, + "change": -22.5, + "pChange": -46.875, + "totBuyQty": 31825, + "totSellQty": 9225, + "bidQty": 400, + "bidPrice": 25.4, + "askQty": 600, + "askPrice": 26.05 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE24950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1375, + "totSellQty": 1350, + "bidQty": 25, + "bidPrice": 914.7, + "askQty": 25, + "askPrice": 943.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25000.00", + "oi": 19117, + "oiChg": 7415, + "oiPctChg": 63.36523671167322, + "totTradedVol": 61898, + "iv": 13.97, + "ltp": 22.2, + "change": -18.8, + "pChange": -45.85365853658537, + "totBuyQty": 73750, + "totSellQty": 59800, + "bidQty": 625, + "bidPrice": 22.1, + "askQty": 450, + "askPrice": 22.35 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25000.00", + "oi": 505, + "oiChg": 168, + "oiPctChg": 49.85163204747774, + "totTradedVol": 352, + "iv": 0, + "ltp": 955, + "change": 307.70000000000005, + "pChange": 47.53591843040322, + "totBuyQty": 2275, + "totSellQty": 2900, + "bidQty": 25, + "bidPrice": 972.1, + "askQty": 100, + "askPrice": 980.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25050, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25050.00", + "oi": 1941, + "oiChg": 665, + "oiPctChg": 52.11598746081505, + "totTradedVol": 3941, + "iv": 14.14, + "ltp": 18.9, + "change": -16, + "pChange": -45.845272206303726, + "totBuyQty": 42300, + "totSellQty": 8100, + "bidQty": 850, + "bidPrice": 18.8, + "askQty": 550, + "askPrice": 19.35 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1350, + "totSellQty": 1325, + "bidQty": 25, + "bidPrice": 998.5, + "askQty": 25, + "askPrice": 1039.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25100, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25100.00", + "oi": 4574, + "oiChg": 1551, + "oiPctChg": 51.3066490241482, + "totTradedVol": 17836, + "iv": 14.27, + "ltp": 16, + "change": -11.7, + "pChange": -42.238267148014444, + "totBuyQty": 73725, + "totSellQty": 20000, + "bidQty": 150, + "bidPrice": 15.95, + "askQty": 725, + "askPrice": 16.35 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1325, + "totSellQty": 1300, + "bidQty": 25, + "bidPrice": 1046.4, + "askQty": 25, + "askPrice": 1083.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25150, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25150.00", + "oi": 481, + "oiChg": 67, + "oiPctChg": 16.183574879227052, + "totTradedVol": 1222, + "iv": 14.2, + "ltp": 14, + "change": -9.2, + "pChange": -39.655172413793096, + "totBuyQty": 40275, + "totSellQty": 4650, + "bidQty": 475, + "bidPrice": 13.8, + "askQty": 25, + "askPrice": 14.1 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1325, + "totSellQty": 1300, + "bidQty": 25, + "bidPrice": 1097.25, + "askQty": 25, + "askPrice": 1132.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25200, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25200.00", + "oi": 6711, + "oiChg": 2923, + "oiPctChg": 77.16473072861669, + "totTradedVol": 26149, + "iv": 14.16, + "ltp": 11.85, + "change": -7.35, + "pChange": -38.28125, + "totBuyQty": 46400, + "totSellQty": 11800, + "bidQty": 1525, + "bidPrice": 11.7, + "askQty": 650, + "askPrice": 12.05 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25200.00", + "oi": 191, + "oiChg": -1, + "oiPctChg": -0.5208333333333334, + "totTradedVol": 16, + "iv": 0, + "ltp": 1120.15, + "change": 288.30000000000007, + "pChange": 34.65769068942719, + "totBuyQty": 1500, + "totSellQty": 1350, + "bidQty": 25, + "bidPrice": 1143.45, + "askQty": 150, + "askPrice": 1180.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25250, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25250.00", + "oi": 744, + "oiChg": 203, + "oiPctChg": 37.52310536044362, + "totTradedVol": 1284, + "iv": 14.38, + "ltp": 10.9, + "change": -5.200000000000001, + "pChange": -32.298136645962735, + "totBuyQty": 36925, + "totSellQty": 3950, + "bidQty": 75, + "bidPrice": 10.6, + "askQty": 575, + "askPrice": 11 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1300, + "totSellQty": 1275, + "bidQty": 25, + "bidPrice": 1195.45, + "askQty": 25, + "askPrice": 1241.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25300, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25300.00", + "oi": 3909, + "oiChg": 266, + "oiPctChg": 7.301674444139445, + "totTradedVol": 15559, + "iv": 14.28, + "ltp": 8.9, + "change": -4.049999999999999, + "pChange": -31.274131274131268, + "totBuyQty": 50650, + "totSellQty": 5625, + "bidQty": 400, + "bidPrice": 8.8, + "askQty": 25, + "askPrice": 8.9 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25300.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1275, + "totSellQty": 1275, + "bidQty": 25, + "bidPrice": 1244.25, + "askQty": 25, + "askPrice": 1279 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25350, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25350.00", + "oi": 665, + "oiChg": 439, + "oiPctChg": 194.24778761061947, + "totTradedVol": 996, + "iv": 14.53, + "ltp": 8.2, + "change": -3.4000000000000004, + "pChange": -29.31034482758621, + "totBuyQty": 39300, + "totSellQty": 2575, + "bidQty": 275, + "bidPrice": 7.65, + "askQty": 500, + "askPrice": 8.45 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1275, + "totSellQty": 1250, + "bidQty": 25, + "bidPrice": 1293.65, + "askQty": 25, + "askPrice": 1328.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25400, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25400.00", + "oi": 2781, + "oiChg": 1001, + "oiPctChg": 56.235955056179776, + "totTradedVol": 11465, + "iv": 14.44, + "ltp": 6.75, + "change": -3, + "pChange": -30.76923076923077, + "totBuyQty": 61600, + "totSellQty": 4775, + "bidQty": 500, + "bidPrice": 6.45, + "askQty": 250, + "askPrice": 6.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25400.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1275, + "totSellQty": 1250, + "bidQty": 25, + "bidPrice": 1328.85, + "askQty": 25, + "askPrice": 1372.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25450, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25450.00", + "oi": 744, + "oiChg": 378, + "oiPctChg": 103.27868852459017, + "totTradedVol": 857, + "iv": 14.79, + "ltp": 6.4, + "change": -6.049999999999999, + "pChange": -48.594377510040154, + "totBuyQty": 42025, + "totSellQty": 4725, + "bidQty": 275, + "bidPrice": 6, + "askQty": 400, + "askPrice": 6.25 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1250, + "totSellQty": 1250, + "bidQty": 25, + "bidPrice": 1379.2, + "askQty": 25, + "askPrice": 1429.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25500, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25500.00", + "oi": 7272, + "oiChg": 2925, + "oiPctChg": 67.28778467908903, + "totTradedVol": 22390, + "iv": 14.9, + "ltp": 5.55, + "change": -2.6000000000000005, + "pChange": -31.90184049079755, + "totBuyQty": 86000, + "totSellQty": 33850, + "bidQty": 825, + "bidPrice": 5.5, + "askQty": 725, + "askPrice": 5.55 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25500.00", + "oi": 360, + "oiChg": 98, + "oiPctChg": 37.404580152671755, + "totTradedVol": 111, + "iv": 0, + "ltp": 1448.95, + "change": 332.85000000000014, + "pChange": 29.82259654152855, + "totBuyQty": 2550, + "totSellQty": 1800, + "bidQty": 100, + "bidPrice": 1451.15, + "askQty": 100, + "askPrice": 1463.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25550, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25550.00", + "oi": 252, + "oiChg": 136, + "oiPctChg": 117.24137931034483, + "totTradedVol": 373, + "iv": 15.03, + "ltp": 4.95, + "change": -2.1499999999999995, + "pChange": -30.281690140845065, + "totBuyQty": 30975, + "totSellQty": 12550, + "bidQty": 600, + "bidPrice": 4.85, + "askQty": 100, + "askPrice": 5.1 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1250, + "totSellQty": 1225, + "bidQty": 25, + "bidPrice": 1478.6, + "askQty": 25, + "askPrice": 1540.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25600, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25600.00", + "oi": 1126, + "oiChg": 524, + "oiPctChg": 87.04318936877077, + "totTradedVol": 3132, + "iv": 15.32, + "ltp": 4.7, + "change": -1.3999999999999995, + "pChange": -22.95081967213114, + "totBuyQty": 93025, + "totSellQty": 14325, + "bidQty": 150, + "bidPrice": 4.4, + "askQty": 575, + "askPrice": 4.65 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1225, + "totSellQty": 1225, + "bidQty": 25, + "bidPrice": 1528.15, + "askQty": 25, + "askPrice": 1580.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25650, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25650.00", + "oi": 56, + "oiChg": 25, + "oiPctChg": 80.64516129032258, + "totTradedVol": 84, + "iv": 15.82, + "ltp": 4.9, + "change": -2.6999999999999993, + "pChange": -35.52631578947368, + "totBuyQty": 28900, + "totSellQty": 12300, + "bidQty": 800, + "bidPrice": 3.7, + "askQty": 50, + "askPrice": 4.75 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1225, + "totSellQty": 1225, + "bidQty": 25, + "bidPrice": 1578.25, + "askQty": 25, + "askPrice": 1629.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25700, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25700.00", + "oi": 917, + "oiChg": 54, + "oiPctChg": 6.257242178447277, + "totTradedVol": 1798, + "iv": 15.75, + "ltp": 4, + "change": -1.0999999999999996, + "pChange": -21.568627450980387, + "totBuyQty": 94275, + "totSellQty": 18250, + "bidQty": 1500, + "bidPrice": 4, + "askQty": 525, + "askPrice": 4.1 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25700.00", + "oi": 7, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 12, + "iv": 0, + "ltp": 1400, + "change": 0, + "pChange": 0, + "totBuyQty": 1375, + "totSellQty": 1375, + "bidQty": 150, + "bidPrice": 1628.3, + "askQty": 150, + "askPrice": 1674.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25750, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25750.00", + "oi": 225, + "oiChg": -27, + "oiPctChg": -10.714285714285714, + "totTradedVol": 279, + "iv": 16.25, + "ltp": 3.45, + "change": -2.45, + "pChange": -41.52542372881356, + "totBuyQty": 29150, + "totSellQty": 13975, + "bidQty": 350, + "bidPrice": 3.65, + "askQty": 525, + "askPrice": 3.95 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1225, + "totSellQty": 1200, + "bidQty": 25, + "bidPrice": 1678.25, + "askQty": 25, + "askPrice": 1731.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25800, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25800.00", + "oi": 406, + "oiChg": 284, + "oiPctChg": 232.78688524590163, + "totTradedVol": 606, + "iv": 16.17, + "ltp": 3.4, + "change": -1.0000000000000004, + "pChange": -22.727272727272734, + "totBuyQty": 87200, + "totSellQty": 17500, + "bidQty": 125, + "bidPrice": 3.25, + "askQty": 200, + "askPrice": 3.55 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1200, + "totSellQty": 1200, + "bidQty": 25, + "bidPrice": 1728, + "askQty": 25, + "askPrice": 1780.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25850, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25850.00", + "oi": 193, + "oiChg": 17, + "oiPctChg": 9.659090909090908, + "totTradedVol": 136, + "iv": 16.71, + "ltp": 3.65, + "change": -0.5000000000000004, + "pChange": -12.048192771084347, + "totBuyQty": 29550, + "totSellQty": 14450, + "bidQty": 550, + "bidPrice": 3.5, + "askQty": 625, + "askPrice": 3.7 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1200, + "totSellQty": 1200, + "bidQty": 25, + "bidPrice": 1778.4, + "askQty": 25, + "askPrice": 1832.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25900, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25900.00", + "oi": 930, + "oiChg": 242, + "oiPctChg": 35.174418604651166, + "totTradedVol": 2645, + "iv": 16.75, + "ltp": 3.3, + "change": -0.20000000000000018, + "pChange": -5.71428571428572, + "totBuyQty": 83650, + "totSellQty": 20675, + "bidQty": 500, + "bidPrice": 3.05, + "askQty": 225, + "askPrice": 3.25 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1200, + "totSellQty": 1200, + "bidQty": 25, + "bidPrice": 1828.3, + "askQty": 25, + "askPrice": 1882.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25950, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE25950.00", + "oi": 1467, + "oiChg": 774, + "oiPctChg": 111.68831168831169, + "totTradedVol": 1999, + "iv": 17.33, + "ltp": 3.45, + "change": -0.09999999999999964, + "pChange": -2.8169014084506943, + "totBuyQty": 37800, + "totSellQty": 22900, + "bidQty": 925, + "bidPrice": 3.45, + "askQty": 525, + "askPrice": 3.55 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE25950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1878.55, + "askQty": 25, + "askPrice": 1923.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "12-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY12-12-2024CE26000.00", + "oi": 1294, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2896, + "iv": 17.46, + "ltp": 3.3, + "change": -54.900000000000006, + "pChange": -94.32989690721651, + "totBuyQty": 99275, + "totSellQty": 26625, + "bidQty": 150, + "bidPrice": 3.25, + "askQty": 525, + "askPrice": 3.35 + }, + "pe": { + "id": "OPTIDXNIFTY12-12-2024PE26000.00", + "oi": 24, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 25, + "iv": 0, + "ltp": 1891.55, + "change": 213.5999999999999, + "pChange": 12.729819124526948, + "totBuyQty": 1650, + "totSellQty": 1725, + "bidQty": 150, + "bidPrice": 1945, + "askQty": 150, + "askPrice": 1960 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21600, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE21600.00", + "oi": 1, + "oiChg": 1, + "oiPctChg": 0, + "totTradedVol": 4, + "iv": 23.27, + "ltp": 12.4, + "change": 0.9000000000000004, + "pChange": 7.826086956521743, + "totBuyQty": 17375, + "totSellQty": 375, + "bidQty": 200, + "bidPrice": 3.15, + "askQty": 25, + "askPrice": 15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21650, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE21650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 10400, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 3.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21700, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE21700.00", + "oi": 154, + "oiChg": 22, + "oiPctChg": 16.666666666666668, + "totTradedVol": 75, + "iv": 21.61, + "ltp": 9.85, + "change": 2.3499999999999996, + "pChange": 31.33333333333333, + "totBuyQty": 22050, + "totSellQty": 100, + "bidQty": 400, + "bidPrice": 5.75, + "askQty": 100, + "askPrice": 9.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21750, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE21750.00", + "oi": 57, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 23.47, + "ltp": 18, + "change": 0, + "pChange": 0, + "totBuyQty": 12075, + "totSellQty": 0, + "bidQty": 200, + "bidPrice": 4.35, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21800, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE21800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8325, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 5.6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21850, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE21850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8600, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 4, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21900, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE21900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8500, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 4.3, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21950, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE21950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8600, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 4, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8200, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 7.2, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22050, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7900, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 4.3, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22100, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8900, + "totSellQty": 0, + "bidQty": 1000, + "bidPrice": 4, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22150, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6400, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 4.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22200, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22200.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9000, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 4.55, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22250, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6425, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22300, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22300.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8900, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 5.9, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22350, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6525, + "totSellQty": 0, + "bidQty": 800, + "bidPrice": 7, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22400, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22400.00", + "oi": 356, + "oiChg": 77, + "oiPctChg": 27.59856630824373, + "totTradedVol": 147, + "iv": 18.17, + "ltp": 20.4, + "change": 5.399999999999999, + "pChange": 35.99999999999999, + "totBuyQty": 35925, + "totSellQty": 2350, + "bidQty": 100, + "bidPrice": 16.8, + "askQty": 100, + "askPrice": 20.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22450, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 13125, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 9, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22500, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22500.00", + "oi": 350, + "oiChg": -123, + "oiPctChg": -26.004228329809724, + "totTradedVol": 599, + "iv": 17.49, + "ltp": 23.5, + "change": 9.9, + "pChange": 72.79411764705883, + "totBuyQty": 41300, + "totSellQty": 4000, + "bidQty": 100, + "bidPrice": 22.4, + "askQty": 25, + "askPrice": 24 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22550, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 15250, + "totSellQty": 300, + "bidQty": 300, + "bidPrice": 12.05, + "askQty": 300, + "askPrice": 29.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22600, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9400, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 12.65, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22650, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6900, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 14, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22700, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9725, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 16.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22750, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8425, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 21.45, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22800, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 11325, + "totSellQty": 1800, + "bidQty": 575, + "bidPrice": 24.6, + "askQty": 900, + "askPrice": 52.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22850, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9450, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 27.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22900, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 11200, + "totSellQty": 1800, + "bidQty": 900, + "bidPrice": 30.95, + "askQty": 1800, + "askPrice": 58.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22950, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE22950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8750, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 33.9, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23000.00", + "oi": 4140, + "oiChg": 1413, + "oiPctChg": 51.81518151815182, + "totTradedVol": 5193, + "iv": 15.66, + "ltp": 56, + "change": 25.3, + "pChange": 82.41042345276874, + "totBuyQty": 37575, + "totSellQty": 7350, + "bidQty": 25, + "bidPrice": 56.35, + "askQty": 425, + "askPrice": 57.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23050, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9250, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 42.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23100, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23100.00", + "oi": 271, + "oiChg": 38, + "oiPctChg": 16.30901287553648, + "totTradedVol": 538, + "iv": 15.61, + "ltp": 69.2, + "change": 32.85, + "pChange": 90.37138927097662, + "totBuyQty": 32650, + "totSellQty": 4375, + "bidQty": 25, + "bidPrice": 65.7, + "askQty": 50, + "askPrice": 68.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23150, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23150.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7300, + "totSellQty": 0, + "bidQty": 600, + "bidPrice": 26.6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23200, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23200.00", + "oi": 209, + "oiChg": 33, + "oiPctChg": 18.75, + "totTradedVol": 204, + "iv": 15.55, + "ltp": 80.55, + "change": 38.599999999999994, + "pChange": 92.01430274135875, + "totBuyQty": 19775, + "totSellQty": 3650, + "bidQty": 1800, + "bidPrice": 76.5, + "askQty": 1800, + "askPrice": 80.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23250, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2850, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 32, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23300, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23300.00", + "oi": 359, + "oiChg": 157, + "oiPctChg": 77.72277227722772, + "totTradedVol": 557, + "iv": 15.38, + "ltp": 88.9, + "change": 40.550000000000004, + "pChange": 83.86763185108585, + "totBuyQty": 16250, + "totSellQty": 6400, + "bidQty": 25, + "bidPrice": 91.6, + "askQty": 1825, + "askPrice": 94.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23350, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23350.00", + "oi": 32, + "oiChg": 1, + "oiPctChg": 3.225806451612903, + "totTradedVol": 4, + "iv": 11.55, + "ltp": 44.15, + "change": -8.5, + "pChange": -16.144349477682812, + "totBuyQty": 12175, + "totSellQty": 1525, + "bidQty": 675, + "bidPrice": 88.15, + "askQty": 25, + "askPrice": 110.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23400, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23400.00", + "oi": 11, + "oiChg": 1, + "oiPctChg": 10, + "totTradedVol": 2, + "iv": 19.49, + "ltp": 856.8, + "change": 72.04999999999995, + "pChange": 9.18126791971965, + "totBuyQty": 1175, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 768.45, + "askQty": 25, + "askPrice": 807.7 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23400.00", + "oi": 505, + "oiChg": -107, + "oiPctChg": -17.483660130718953, + "totTradedVol": 469, + "iv": 15.2, + "ltp": 110, + "change": 54.1, + "pChange": 96.77996422182468, + "totBuyQty": 10325, + "totSellQty": 7700, + "bidQty": 200, + "bidPrice": 108.35, + "askQty": 25, + "askPrice": 111.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23450, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23450.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 14.08, + "ltp": 723.15, + "change": 93.14999999999998, + "pChange": 14.785714285714283, + "totBuyQty": 1125, + "totSellQty": 1525, + "bidQty": 25, + "bidPrice": 721.55, + "askQty": 25, + "askPrice": 764.4 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23450.00", + "oi": 7, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6900, + "totSellQty": 4200, + "bidQty": 900, + "bidPrice": 103.5, + "askQty": 1800, + "askPrice": 135 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23500, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23500.00", + "oi": 115, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3175, + "totSellQty": 1500, + "bidQty": 475, + "bidPrice": 679.25, + "askQty": 900, + "askPrice": 722.15 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23500.00", + "oi": 3927, + "oiChg": 1289, + "oiPctChg": 48.862774829416225, + "totTradedVol": 5493, + "iv": 14.8, + "ltp": 132.05, + "change": 64.20000000000002, + "pChange": 94.62048636698603, + "totBuyQty": 10325, + "totSellQty": 12275, + "bidQty": 250, + "bidPrice": 130.75, + "askQty": 25, + "askPrice": 131.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23550, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3325, + "totSellQty": 1275, + "bidQty": 900, + "bidPrice": 639.75, + "askQty": 300, + "askPrice": 682.35 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23550.00", + "oi": 173, + "oiChg": -16, + "oiPctChg": -8.465608465608465, + "totTradedVol": 80, + "iv": 14.19, + "ltp": 143.35, + "change": 72.35, + "pChange": 101.90140845070421, + "totBuyQty": 9875, + "totSellQty": 8425, + "bidQty": 125, + "bidPrice": 140.15, + "askQty": 1925, + "askPrice": 145.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23600, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23600.00", + "oi": 27, + "oiChg": 23, + "oiPctChg": 575, + "totTradedVol": 24, + "iv": 17.09, + "ltp": 670.55, + "change": -261.5, + "pChange": -28.0564347406255, + "totBuyQty": 3000, + "totSellQty": 1025, + "bidQty": 25, + "bidPrice": 611.4, + "askQty": 25, + "askPrice": 651.2 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23600.00", + "oi": 185, + "oiChg": 108, + "oiPctChg": 140.25974025974025, + "totTradedVol": 430, + "iv": 14.55, + "ltp": 146.05, + "change": 67.00000000000001, + "pChange": 84.7564832384567, + "totBuyQty": 8800, + "totSellQty": 9225, + "bidQty": 250, + "bidPrice": 154.35, + "askQty": 25, + "askPrice": 156.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23650, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23650.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5100, + "totSellQty": 600, + "bidQty": 900, + "bidPrice": 561.55, + "askQty": 300, + "askPrice": 618.7 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23650.00", + "oi": 16, + "oiChg": -17, + "oiPctChg": -51.515151515151516, + "totTradedVol": 24, + "iv": 15.18, + "ltp": 172.85, + "change": 84.55, + "pChange": 95.75311438278595, + "totBuyQty": 5575, + "totSellQty": 4200, + "bidQty": 925, + "bidPrice": 153.3, + "askQty": 900, + "askPrice": 195.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23700, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23700.00", + "oi": 7, + "oiChg": 3, + "oiPctChg": 75, + "totTradedVol": 5, + "iv": 15.33, + "ltp": 568.05, + "change": -203.4000000000001, + "pChange": -26.365934279603355, + "totBuyQty": 5950, + "totSellQty": 1950, + "bidQty": 200, + "bidPrice": 544.05, + "askQty": 25, + "askPrice": 572.75 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23700.00", + "oi": 412, + "oiChg": 188, + "oiPctChg": 83.92857142857143, + "totTradedVol": 624, + "iv": 13.69, + "ltp": 158.7, + "change": 63.849999999999994, + "pChange": 67.31681602530311, + "totBuyQty": 10950, + "totSellQty": 12275, + "bidQty": 25, + "bidPrice": 178.55, + "askQty": 250, + "askPrice": 181.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23750, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6900, + "totSellQty": 600, + "bidQty": 900, + "bidPrice": 505.85, + "askQty": 300, + "askPrice": 552.35 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23750.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5125, + "totSellQty": 4500, + "bidQty": 900, + "bidPrice": 171.8, + "askQty": 1200, + "askPrice": 206.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23800, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23800.00", + "oi": 55, + "oiChg": 37, + "oiPctChg": 205.55555555555554, + "totTradedVol": 84, + "iv": 15.3, + "ltp": 503.8, + "change": -193.2, + "pChange": -27.71879483500717, + "totBuyQty": 8775, + "totSellQty": 2350, + "bidQty": 1600, + "bidPrice": 485.9, + "askQty": 775, + "askPrice": 492.1 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23800.00", + "oi": 337, + "oiChg": 158, + "oiPctChg": 88.26815642458101, + "totTradedVol": 851, + "iv": 13.84, + "ltp": 213.1, + "change": 101.55, + "pChange": 91.03541012998654, + "totBuyQty": 8100, + "totSellQty": 11800, + "bidQty": 25, + "bidPrice": 208.8, + "askQty": 50, + "askPrice": 212.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23850, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23850.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 13000, + "totSellQty": 1600, + "bidQty": 100, + "bidPrice": 450.05, + "askQty": 200, + "askPrice": 460.85 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23850.00", + "oi": 57, + "oiChg": 34, + "oiPctChg": 147.82608695652175, + "totTradedVol": 143, + "iv": 13.15, + "ltp": 228.7, + "change": 101.19999999999999, + "pChange": 79.37254901960783, + "totBuyQty": 3950, + "totSellQty": 7775, + "bidQty": 25, + "bidPrice": 226.1, + "askQty": 50, + "askPrice": 230.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23900, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23900.00", + "oi": 51, + "oiChg": 31, + "oiPctChg": 155, + "totTradedVol": 116, + "iv": 16.01, + "ltp": 424.9, + "change": -182.10000000000002, + "pChange": -30.000000000000004, + "totBuyQty": 19625, + "totSellQty": 6450, + "bidQty": 100, + "bidPrice": 423.8, + "askQty": 2300, + "askPrice": 428.05 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23900.00", + "oi": 236, + "oiChg": 143, + "oiPctChg": 153.76344086021504, + "totTradedVol": 558, + "iv": 14.12, + "ltp": 248.2, + "change": 116.25, + "pChange": 88.10155361879501, + "totBuyQty": 4275, + "totSellQty": 9600, + "bidQty": 275, + "bidPrice": 247.05, + "askQty": 1000, + "askPrice": 247.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23950, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE23950.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 14100, + "totSellQty": 2925, + "bidQty": 100, + "bidPrice": 386.25, + "askQty": 100, + "askPrice": 398.05 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE23950.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2925, + "totSellQty": 3800, + "bidQty": 150, + "bidPrice": 252.25, + "askQty": 300, + "askPrice": 277.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24000.00", + "oi": 530, + "oiChg": 367, + "oiPctChg": 225.15337423312883, + "totTradedVol": 1285, + "iv": 14.86, + "ltp": 365, + "change": -196.85000000000002, + "pChange": -35.03604164812673, + "totBuyQty": 22900, + "totSellQty": 7525, + "bidQty": 100, + "bidPrice": 362.3, + "askQty": 500, + "askPrice": 366.5 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24000.00", + "oi": 1177, + "oiChg": 286, + "oiPctChg": 32.098765432098766, + "totTradedVol": 3845, + "iv": 12.98, + "ltp": 289.5, + "change": 132.95, + "pChange": 84.92494410731395, + "totBuyQty": 7600, + "totSellQty": 11425, + "bidQty": 50, + "bidPrice": 287.3, + "askQty": 1825, + "askPrice": 292.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24050, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24050.00", + "oi": 53, + "oiChg": 45, + "oiPctChg": 562.5, + "totTradedVol": 131, + "iv": 13.7, + "ltp": 327.6, + "change": -215.29999999999995, + "pChange": -39.65739546877877, + "totBuyQty": 17175, + "totSellQty": 3125, + "bidQty": 50, + "bidPrice": 332.2, + "askQty": 25, + "askPrice": 343.4 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24050.00", + "oi": 19, + "oiChg": 15, + "oiPctChg": 375, + "totTradedVol": 68, + "iv": 12.03, + "ltp": 261.9, + "change": 88.74999999999997, + "pChange": 51.25613629800749, + "totBuyQty": 2550, + "totSellQty": 3550, + "bidQty": 400, + "bidPrice": 300.95, + "askQty": 900, + "askPrice": 324.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24100, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24100.00", + "oi": 313, + "oiChg": 287, + "oiPctChg": 1103.8461538461538, + "totTradedVol": 569, + "iv": 14.46, + "ltp": 320.5, + "change": -182.05, + "pChange": -36.2252512187842, + "totBuyQty": 18850, + "totSellQty": 6325, + "bidQty": 50, + "bidPrice": 308.95, + "askQty": 250, + "askPrice": 314.95 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24100.00", + "oi": 307, + "oiChg": -34, + "oiPctChg": -9.970674486803519, + "totTradedVol": 520, + "iv": 13.59, + "ltp": 340.5, + "change": 159.55, + "pChange": 88.17352859906052, + "totBuyQty": 5550, + "totSellQty": 5850, + "bidQty": 100, + "bidPrice": 334, + "askQty": 1150, + "askPrice": 338.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24150, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24150.00", + "oi": 77, + "oiChg": 23, + "oiPctChg": 42.592592592592595, + "totTradedVol": 68, + "iv": 15.16, + "ltp": 313, + "change": -139.10000000000002, + "pChange": -30.767529307675296, + "totBuyQty": 17075, + "totSellQty": 3900, + "bidQty": 200, + "bidPrice": 276.85, + "askQty": 25, + "askPrice": 296.55 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24150.00", + "oi": 44, + "oiChg": -3, + "oiPctChg": -6.382978723404255, + "totTradedVol": 223, + "iv": 12.33, + "ltp": 320.3, + "change": 124.35000000000002, + "pChange": 63.46006634345498, + "totBuyQty": 1700, + "totSellQty": 2575, + "bidQty": 25, + "bidPrice": 346.05, + "askQty": 100, + "askPrice": 366.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24200, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24200.00", + "oi": 430, + "oiChg": 269, + "oiPctChg": 167.08074534161491, + "totTradedVol": 1196, + "iv": 14.47, + "ltp": 275, + "change": -152.14999999999998, + "pChange": -35.61980568886808, + "totBuyQty": 25700, + "totSellQty": 10425, + "bidQty": 200, + "bidPrice": 262.3, + "askQty": 350, + "askPrice": 267.1 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24200.00", + "oi": 393, + "oiChg": 47, + "oiPctChg": 13.583815028901734, + "totTradedVol": 814, + "iv": 13.3, + "ltp": 382.2, + "change": 166.04999999999998, + "pChange": 76.82165163081193, + "totBuyQty": 4800, + "totSellQty": 9100, + "bidQty": 50, + "bidPrice": 382.7, + "askQty": 50, + "askPrice": 387.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24250, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24250.00", + "oi": 139, + "oiChg": 51, + "oiPctChg": 57.95454545454545, + "totTradedVol": 743, + "iv": 15.08, + "ltp": 267.85, + "change": -131.14999999999998, + "pChange": -32.86967418546365, + "totBuyQty": 19575, + "totSellQty": 4400, + "bidQty": 200, + "bidPrice": 233.75, + "askQty": 100, + "askPrice": 247.95 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24250.00", + "oi": 63, + "oiChg": -49, + "oiPctChg": -43.75, + "totTradedVol": 347, + "iv": 13.02, + "ltp": 392.7, + "change": 157.39999999999998, + "pChange": 66.89332766680832, + "totBuyQty": 3025, + "totSellQty": 2075, + "bidQty": 875, + "bidPrice": 411.8, + "askQty": 875, + "askPrice": 418.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24300, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24300.00", + "oi": 683, + "oiChg": 336, + "oiPctChg": 96.82997118155619, + "totTradedVol": 1315, + "iv": 14.33, + "ltp": 222.45, + "change": -140.55, + "pChange": -38.719008264462815, + "totBuyQty": 23425, + "totSellQty": 12875, + "bidQty": 25, + "bidPrice": 215.8, + "askQty": 50, + "askPrice": 222.25 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24300.00", + "oi": 302, + "oiChg": -83, + "oiPctChg": -21.558441558441558, + "totTradedVol": 1090, + "iv": 11.96, + "ltp": 399.65, + "change": 145.29999999999998, + "pChange": 57.12600747002162, + "totBuyQty": 2025, + "totSellQty": 1900, + "bidQty": 50, + "bidPrice": 440.9, + "askQty": 100, + "askPrice": 446.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24350, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24350.00", + "oi": 74, + "oiChg": 23, + "oiPctChg": 45.09803921568628, + "totTradedVol": 170, + "iv": 13.58, + "ltp": 196, + "change": -138.2, + "pChange": -41.35248354278875, + "totBuyQty": 22050, + "totSellQty": 4975, + "bidQty": 900, + "bidPrice": 190.45, + "askQty": 100, + "askPrice": 207.85 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24350.00", + "oi": 11, + "oiChg": 4, + "oiPctChg": 57.142857142857146, + "totTradedVol": 11, + "iv": 0, + "ltp": 257, + "change": -19.44999999999999, + "pChange": -7.035630312895637, + "totBuyQty": 1500, + "totSellQty": 700, + "bidQty": 300, + "bidPrice": 450.45, + "askQty": 300, + "askPrice": 489.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24400, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24400.00", + "oi": 400, + "oiChg": 224, + "oiPctChg": 127.27272727272727, + "totTradedVol": 800, + "iv": 14.56, + "ltp": 182.25, + "change": -121.35000000000002, + "pChange": -39.9703557312253, + "totBuyQty": 21500, + "totSellQty": 12100, + "bidQty": 50, + "bidPrice": 179.45, + "askQty": 50, + "askPrice": 183.15 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24400.00", + "oi": 148, + "oiChg": 69, + "oiPctChg": 87.34177215189874, + "totTradedVol": 370, + "iv": 11.67, + "ltp": 459.1, + "change": 170.35000000000002, + "pChange": 58.995670995671, + "totBuyQty": 3125, + "totSellQty": 2375, + "bidQty": 25, + "bidPrice": 492, + "askQty": 25, + "askPrice": 521.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24450, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24450.00", + "oi": 75, + "oiChg": 49, + "oiPctChg": 188.46153846153845, + "totTradedVol": 96, + "iv": 14.75, + "ltp": 187.05, + "change": -102.94999999999999, + "pChange": -35.5, + "totBuyQty": 18325, + "totSellQty": 5400, + "bidQty": 25, + "bidPrice": 163, + "askQty": 1800, + "askPrice": 168.05 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24450.00", + "oi": 6, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 34, + "iv": 10.94, + "ltp": 479.6, + "change": 134.60000000000002, + "pChange": 39.014492753623195, + "totBuyQty": 625, + "totSellQty": 1525, + "bidQty": 25, + "bidPrice": 513.75, + "askQty": 25, + "askPrice": 548.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24500, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24500.00", + "oi": 1932, + "oiChg": 1029, + "oiPctChg": 113.95348837209302, + "totTradedVol": 4131, + "iv": 14.05, + "ltp": 148.4, + "change": -103.94999999999999, + "pChange": -41.19278779472954, + "totBuyQty": 27525, + "totSellQty": 17100, + "bidQty": 200, + "bidPrice": 147.55, + "askQty": 25, + "askPrice": 150.4 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24500.00", + "oi": 262, + "oiChg": 35, + "oiPctChg": 15.418502202643172, + "totTradedVol": 531, + "iv": 12.19, + "ltp": 540, + "change": 201.45, + "pChange": 59.503766061143104, + "totBuyQty": 1900, + "totSellQty": 3925, + "bidQty": 675, + "bidPrice": 561.65, + "askQty": 25, + "askPrice": 568.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24550, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24550.00", + "oi": 49, + "oiChg": 36, + "oiPctChg": 276.9230769230769, + "totTradedVol": 98, + "iv": 13.98, + "ltp": 141.4, + "change": -119.95000000000002, + "pChange": -45.896307633441744, + "totBuyQty": 15925, + "totSellQty": 5525, + "bidQty": 900, + "bidPrice": 120.25, + "askQty": 125, + "askPrice": 143.5 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1500, + "totSellQty": 600, + "bidQty": 300, + "bidPrice": 584.65, + "askQty": 300, + "askPrice": 623.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24600, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24600.00", + "oi": 219, + "oiChg": 27, + "oiPctChg": 14.0625, + "totTradedVol": 561, + "iv": 13.78, + "ltp": 120, + "change": -91.65, + "pChange": -43.30262225372077, + "totBuyQty": 24550, + "totSellQty": 7225, + "bidQty": 100, + "bidPrice": 120.15, + "askQty": 200, + "askPrice": 123.15 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 775, + "totSellQty": 1475, + "bidQty": 300, + "bidPrice": 615.7, + "askQty": 300, + "askPrice": 659.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24650, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24650.00", + "oi": 1, + "oiChg": 1, + "oiPctChg": 0, + "totTradedVol": 5, + "iv": 12.47, + "ltp": 89.45, + "change": -41.7, + "pChange": -31.79565383149066, + "totBuyQty": 16050, + "totSellQty": 4275, + "bidQty": 900, + "bidPrice": 93.45, + "askQty": 25, + "askPrice": 117.75 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24700, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24700.00", + "oi": 481, + "oiChg": 106, + "oiPctChg": 28.266666666666666, + "totTradedVol": 872, + "iv": 13.93, + "ltp": 96.5, + "change": -70.05000000000001, + "pChange": -42.05944160912639, + "totBuyQty": 24225, + "totSellQty": 11100, + "bidQty": 1800, + "bidPrice": 93.8, + "askQty": 125, + "askPrice": 97.2 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24700.00", + "oi": 72, + "oiChg": 31, + "oiPctChg": 75.60975609756098, + "totTradedVol": 116, + "iv": 11.79, + "ltp": 716.35, + "change": 256.35, + "pChange": 55.728260869565226, + "totBuyQty": 600, + "totSellQty": 425, + "bidQty": 525, + "bidPrice": 713.9, + "askQty": 400, + "askPrice": 723.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24750, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24750.00", + "oi": 21, + "oiChg": 11, + "oiPctChg": 110, + "totTradedVol": 28, + "iv": 14.62, + "ltp": 105, + "change": -55, + "pChange": -34.375, + "totBuyQty": 17025, + "totSellQty": 2625, + "bidQty": 25, + "bidPrice": 77.35, + "askQty": 125, + "askPrice": 99.9 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24800, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24800.00", + "oi": 356, + "oiChg": 238, + "oiPctChg": 201.6949152542373, + "totTradedVol": 793, + "iv": 13.84, + "ltp": 76.65, + "change": -56.25, + "pChange": -42.32505643340858, + "totBuyQty": 21175, + "totSellQty": 7975, + "bidQty": 25, + "bidPrice": 76.65, + "askQty": 100, + "askPrice": 78 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24850, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24850.00", + "oi": 39, + "oiChg": 23, + "oiPctChg": 143.75, + "totTradedVol": 69, + "iv": 13.16, + "ltp": 64, + "change": -61, + "pChange": -48.8, + "totBuyQty": 22125, + "totSellQty": 650, + "bidQty": 25, + "bidPrice": 64, + "askQty": 25, + "askPrice": 77.6 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24900, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24900.00", + "oi": 197, + "oiChg": 81, + "oiPctChg": 69.82758620689656, + "totTradedVol": 490, + "iv": 13.56, + "ltp": 60.05, + "change": -44.10000000000001, + "pChange": -42.342774843975036, + "totBuyQty": 32325, + "totSellQty": 6000, + "bidQty": 25, + "bidPrice": 59.7, + "askQty": 25, + "askPrice": 61.55 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE24900.00", + "oi": 6, + "oiChg": 2, + "oiPctChg": 50, + "totTradedVol": 7, + "iv": 13.23, + "ltp": 875, + "change": 190.70000000000005, + "pChange": 27.867894198450983, + "totBuyQty": 750, + "totSellQty": 650, + "bidQty": 300, + "bidPrice": 857.85, + "askQty": 25, + "askPrice": 899.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24950, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE24950.00", + "oi": 35, + "oiChg": 13, + "oiPctChg": 59.09090909090909, + "totTradedVol": 45, + "iv": 14.31, + "ltp": 63.95, + "change": -26.5, + "pChange": -29.297954671089, + "totBuyQty": 18175, + "totSellQty": 775, + "bidQty": 25, + "bidPrice": 47.2, + "askQty": 250, + "askPrice": 63.95 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25000.00", + "oi": 1750, + "oiChg": 888, + "oiPctChg": 103.01624129930394, + "totTradedVol": 4021, + "iv": 13.43, + "ltp": 46, + "change": -34.7, + "pChange": -42.998760842627014, + "totBuyQty": 29250, + "totSellQty": 14250, + "bidQty": 200, + "bidPrice": 45.25, + "askQty": 100, + "askPrice": 46.2 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE25000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 24, + "iv": 16.14, + "ltp": 1000, + "change": 275, + "pChange": 37.93103448275862, + "totBuyQty": 50, + "totSellQty": 50, + "bidQty": 25, + "bidPrice": 944.15, + "askQty": 25, + "askPrice": 982.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25050, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25050.00", + "oi": 6, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 17475, + "totSellQty": 350, + "bidQty": 125, + "bidPrice": 27.5, + "askQty": 25, + "askPrice": 49.4 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25100, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25100.00", + "oi": 137, + "oiChg": 80, + "oiPctChg": 140.35087719298247, + "totTradedVol": 378, + "iv": 13.44, + "ltp": 34.35, + "change": -19.049999999999997, + "pChange": -35.674157303370784, + "totBuyQty": 23350, + "totSellQty": 6075, + "bidQty": 350, + "bidPrice": 34.35, + "askQty": 100, + "askPrice": 36.15 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25150, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25150.00", + "oi": 66, + "oiChg": 2, + "oiPctChg": 3.125, + "totTradedVol": 56, + "iv": 13.17, + "ltp": 29.7, + "change": -25.3, + "pChange": -46, + "totBuyQty": 21725, + "totSellQty": 625, + "bidQty": 300, + "bidPrice": 27.05, + "askQty": 300, + "askPrice": 35 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25200, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25200.00", + "oi": 273, + "oiChg": 156, + "oiPctChg": 133.33333333333334, + "totTradedVol": 573, + "iv": 13.58, + "ltp": 29.35, + "change": -16.1, + "pChange": -35.42354235423543, + "totBuyQty": 30375, + "totSellQty": 5175, + "bidQty": 50, + "bidPrice": 25.3, + "askQty": 50, + "askPrice": 28.8 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25250, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25250.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 13.49, + "ltp": 24.95, + "change": -29.95, + "pChange": -54.55373406193078, + "totBuyQty": 21700, + "totSellQty": 925, + "bidQty": 300, + "bidPrice": 20.1, + "askQty": 300, + "askPrice": 27.6 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25300, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25300.00", + "oi": 389, + "oiChg": 110, + "oiPctChg": 39.42652329749104, + "totTradedVol": 500, + "iv": 13.66, + "ltp": 21, + "change": -12.600000000000001, + "pChange": -37.5, + "totBuyQty": 36500, + "totSellQty": 2175, + "bidQty": 175, + "bidPrice": 21.05, + "askQty": 200, + "askPrice": 22.15 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25350, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25350.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 28600, + "totSellQty": 1950, + "bidQty": 400, + "bidPrice": 13.1, + "askQty": 300, + "askPrice": 27.9 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25400, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25400.00", + "oi": 53, + "oiChg": 45, + "oiPctChg": 562.5, + "totTradedVol": 77, + "iv": 13.35, + "ltp": 18.9, + "change": -12.200000000000003, + "pChange": -39.228295819935695, + "totBuyQty": 18975, + "totSellQty": 3150, + "bidQty": 350, + "bidPrice": 15.9, + "askQty": 525, + "askPrice": 17.65 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25450, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25450.00", + "oi": 73, + "oiChg": 69, + "oiPctChg": 1725, + "totTradedVol": 109, + "iv": 14, + "ltp": 15, + "change": -22.1, + "pChange": -59.56873315363882, + "totBuyQty": 28675, + "totSellQty": 5650, + "bidQty": 25, + "bidPrice": 14.55, + "askQty": 525, + "askPrice": 15.25 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25500, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25500.00", + "oi": 2090, + "oiChg": 806, + "oiPctChg": 62.77258566978193, + "totTradedVol": 2131, + "iv": 13.71, + "ltp": 13, + "change": -5.600000000000001, + "pChange": -30.107526881720435, + "totBuyQty": 48175, + "totSellQty": 5975, + "bidQty": 75, + "bidPrice": 12.55, + "askQty": 25, + "askPrice": 12.9 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25550, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25550.00", + "oi": 18, + "oiChg": 5, + "oiPctChg": 38.46153846153846, + "totTradedVol": 107, + "iv": 14.03, + "ltp": 12.05, + "change": -13.45, + "pChange": -52.74509803921569, + "totBuyQty": 27425, + "totSellQty": 4550, + "bidQty": 100, + "bidPrice": 10.6, + "askQty": 525, + "askPrice": 12.5 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25600, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25600.00", + "oi": 288, + "oiChg": 196, + "oiPctChg": 213.04347826086956, + "totTradedVol": 580, + "iv": 14.06, + "ltp": 11, + "change": -3.9499999999999993, + "pChange": -26.421404682274247, + "totBuyQty": 29025, + "totSellQty": 3000, + "bidQty": 100, + "bidPrice": 10.05, + "askQty": 525, + "askPrice": 11.35 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25650, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25650.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 35725, + "totSellQty": 3500, + "bidQty": 600, + "bidPrice": 6.4, + "askQty": 100, + "askPrice": 13.9 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25700, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25700.00", + "oi": 171, + "oiChg": 131, + "oiPctChg": 327.5, + "totTradedVol": 209, + "iv": 14.31, + "ltp": 9.4, + "change": -3.549999999999999, + "pChange": -27.41312741312741, + "totBuyQty": 33700, + "totSellQty": 6450, + "bidQty": 350, + "bidPrice": 7.9, + "askQty": 50, + "askPrice": 9.6 + }, + "pe": { + "id": "OPTIDXNIFTY19-12-2024PE25700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25750, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 17, + "iv": 14.56, + "ltp": 9, + "change": -10.600000000000001, + "pChange": -54.08163265306123, + "totBuyQty": 22000, + "totSellQty": 5900, + "bidQty": 750, + "bidPrice": 6, + "askQty": 200, + "askPrice": 10.45 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25800, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25800.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 23050, + "totSellQty": 4000, + "bidQty": 750, + "bidPrice": 5.4, + "askQty": 500, + "askPrice": 10 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25850, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 19500, + "totSellQty": 5250, + "bidQty": 750, + "bidPrice": 4.4, + "askQty": 50, + "askPrice": 10.45 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25900, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25900.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 16.22, + "ltp": 11.4, + "change": 0, + "pChange": 0, + "totBuyQty": 20950, + "totSellQty": 5475, + "bidQty": 400, + "bidPrice": 5.35, + "askQty": 100, + "askPrice": 9.95 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25950, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE25950.00", + "oi": 88, + "oiChg": 34, + "oiPctChg": 62.96296296296296, + "totTradedVol": 93, + "iv": 15.27, + "ltp": 6.85, + "change": -1.5, + "pChange": -17.964071856287426, + "totBuyQty": 32000, + "totSellQty": 6200, + "bidQty": 125, + "bidPrice": 5.5, + "askQty": 150, + "askPrice": 7 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "19-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY19-12-2024CE26000.00", + "oi": 238, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 465, + "iv": 15.23, + "ltp": 5.65, + "change": -6.15, + "pChange": -52.1186440677966, + "totBuyQty": 28250, + "totSellQty": 8650, + "bidQty": 525, + "bidPrice": 5.65, + "askQty": 175, + "askPrice": 5.85 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 14000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE14000.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 50, + "totSellQty": 1075, + "bidQty": 25, + "bidPrice": 9966.65, + "askQty": 25, + "askPrice": 10332.45 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE14000.00", + "oi": 13802, + "oiChg": 216, + "oiPctChg": 1.5898719269836596, + "totTradedVol": 1632, + "iv": 68.55, + "ltp": 2.1, + "change": -0.7999999999999998, + "pChange": -27.58620689655172, + "totBuyQty": 78650, + "totSellQty": 21750, + "bidQty": 1875, + "bidPrice": 2.1, + "askQty": 300, + "askPrice": 2.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 15000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE15000.00", + "oi": 602, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 75, + "totSellQty": 2825, + "bidQty": 25, + "bidPrice": 8901.05, + "askQty": 25, + "askPrice": 9242.85 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE15000.00", + "oi": 3428, + "oiChg": 50, + "oiPctChg": 1.4801657785671996, + "totTradedVol": 359, + "iv": 61.44, + "ltp": 2.5, + "change": -0.5499999999999998, + "pChange": -18.032786885245898, + "totBuyQty": 69675, + "totSellQty": 15825, + "bidQty": 350, + "bidPrice": 2.5, + "askQty": 925, + "askPrice": 2.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 16000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE16000.00", + "oi": 13270, + "oiChg": -10, + "oiPctChg": -0.07530120481927711, + "totTradedVol": 94, + "iv": 78.61, + "ltp": 8110.4, + "change": -255.35000000000036, + "pChange": -3.05232645010908, + "totBuyQty": 4450, + "totSellQty": 4700, + "bidQty": 25, + "bidPrice": 8016, + "askQty": 25, + "askPrice": 8043.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE16000.00", + "oi": 6227, + "oiChg": 20, + "oiPctChg": 0.3222168519413565, + "totTradedVol": 528, + "iv": 54.76, + "ltp": 3.05, + "change": -0.9500000000000002, + "pChange": -23.750000000000004, + "totBuyQty": 53325, + "totSellQty": 16750, + "bidQty": 350, + "bidPrice": 3.1, + "askQty": 100, + "askPrice": 3.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 17000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE17000.00", + "oi": 990, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 23, + "iv": 0, + "ltp": 7069.5, + "change": -329.39999999999964, + "pChange": -4.452013137087941, + "totBuyQty": 2700, + "totSellQty": 4375, + "bidQty": 25, + "bidPrice": 7000.05, + "askQty": 25, + "askPrice": 7073.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE17000.00", + "oi": 6826, + "oiChg": 89, + "oiPctChg": 1.3210627875909158, + "totTradedVol": 622, + "iv": 47.98, + "ltp": 3.7, + "change": -0.39999999999999947, + "pChange": -9.756097560975597, + "totBuyQty": 53375, + "totSellQty": 27000, + "bidQty": 200, + "bidPrice": 3.55, + "askQty": 150, + "askPrice": 3.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 18000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE18000.00", + "oi": 2227, + "oiChg": 20, + "oiPctChg": 0.9062075215224287, + "totTradedVol": 63, + "iv": 0, + "ltp": 6072, + "change": -319.1999999999998, + "pChange": -4.994367254975589, + "totBuyQty": 3850, + "totSellQty": 5825, + "bidQty": 100, + "bidPrice": 6031.55, + "askQty": 25, + "askPrice": 6086.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE18000.00", + "oi": 16111, + "oiChg": 303, + "oiPctChg": 1.916751012145749, + "totTradedVol": 2742, + "iv": 41.61, + "ltp": 4.25, + "change": -0.25, + "pChange": -5.555555555555555, + "totBuyQty": 70800, + "totSellQty": 23450, + "bidQty": 400, + "bidPrice": 4.1, + "askQty": 125, + "askPrice": 4.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE19000.00", + "oi": 3354, + "oiChg": -22, + "oiPctChg": -0.6516587677725119, + "totTradedVol": 32, + "iv": 0, + "ltp": 5065, + "change": -317.75, + "pChange": -5.903116436765594, + "totBuyQty": 6250, + "totSellQty": 7200, + "bidQty": 25, + "bidPrice": 5055, + "askQty": 100, + "askPrice": 5078.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE19000.00", + "oi": 23129, + "oiChg": 6, + "oiPctChg": 0.025948190113739566, + "totTradedVol": 2492, + "iv": 35.37, + "ltp": 5.25, + "change": 0.04999999999999982, + "pChange": 0.9615384615384581, + "totBuyQty": 117575, + "totSellQty": 21550, + "bidQty": 450, + "bidPrice": 5.05, + "askQty": 550, + "askPrice": 5.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE20000.00", + "oi": 12114, + "oiChg": 37, + "oiPctChg": 0.30636747536639897, + "totTradedVol": 881, + "iv": 35.29, + "ltp": 4094.35, + "change": -310.7000000000003, + "pChange": -7.053268407850087, + "totBuyQty": 6275, + "totSellQty": 6975, + "bidQty": 50, + "bidPrice": 4071.55, + "askQty": 150, + "askPrice": 4089 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE20000.00", + "oi": 71888, + "oiChg": -555, + "oiPctChg": -0.7661195698687244, + "totTradedVol": 17662, + "iv": 29.52, + "ltp": 6.75, + "change": 0.7000000000000002, + "pChange": 11.5702479338843, + "totBuyQty": 114825, + "totSellQty": 44325, + "bidQty": 4625, + "bidPrice": 6.7, + "askQty": 300, + "askPrice": 6.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21000.00", + "oi": 24168, + "oiChg": 90, + "oiPctChg": 0.373785198106155, + "totTradedVol": 663, + "iv": 28.07, + "ltp": 3083.05, + "change": -335.7999999999997, + "pChange": -9.822016175029608, + "totBuyQty": 6250, + "totSellQty": 9625, + "bidQty": 100, + "bidPrice": 3078.2, + "askQty": 100, + "askPrice": 3088.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21000.00", + "oi": 99905, + "oiChg": 4251, + "oiPctChg": 4.444142430008155, + "totTradedVol": 28279, + "iv": 23.6, + "ltp": 9, + "change": 0.5999999999999996, + "pChange": 7.142857142857138, + "totBuyQty": 79550, + "totSellQty": 26400, + "bidQty": 725, + "bidPrice": 9, + "askQty": 2825, + "askPrice": 9.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21600, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21600.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 3975, + "bidQty": 25, + "bidPrice": 2455.35, + "askQty": 250, + "askPrice": 2569.7 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21600.00", + "oi": 15263, + "oiChg": -270, + "oiPctChg": -1.738234726067083, + "totTradedVol": 17114, + "iv": 19.79, + "ltp": 10.8, + "change": 2.1500000000000004, + "pChange": 24.855491329479772, + "totBuyQty": 135600, + "totSellQty": 8550, + "bidQty": 450, + "bidPrice": 10.8, + "askQty": 550, + "askPrice": 10.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21650, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2200, + "totSellQty": 3725, + "bidQty": 250, + "bidPrice": 2411.25, + "askQty": 25, + "askPrice": 2516.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21650.00", + "oi": 568, + "oiChg": 268, + "oiPctChg": 89.33333333333333, + "totTradedVol": 456, + "iv": 19.76, + "ltp": 12.35, + "change": -2.6500000000000004, + "pChange": -17.666666666666668, + "totBuyQty": 22325, + "totSellQty": 4275, + "bidQty": 25, + "bidPrice": 12, + "askQty": 525, + "askPrice": 12.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21700, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2200, + "totSellQty": 3725, + "bidQty": 250, + "bidPrice": 2363, + "askQty": 25, + "askPrice": 2439.4 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21700.00", + "oi": 2404, + "oiChg": 129, + "oiPctChg": 5.670329670329671, + "totTradedVol": 7108, + "iv": 19.59, + "ltp": 12.8, + "change": 2.8500000000000014, + "pChange": 28.643216080402027, + "totBuyQty": 38800, + "totSellQty": 6725, + "bidQty": 450, + "bidPrice": 12.75, + "askQty": 225, + "askPrice": 12.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21750, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2200, + "totSellQty": 3725, + "bidQty": 250, + "bidPrice": 2317.05, + "askQty": 25, + "askPrice": 2392.25 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21750.00", + "oi": 884, + "oiChg": 218, + "oiPctChg": 32.732732732732735, + "totTradedVol": 330, + "iv": 18.89, + "ltp": 10.65, + "change": -0.5499999999999989, + "pChange": -4.910714285714277, + "totBuyQty": 29850, + "totSellQty": 4100, + "bidQty": 100, + "bidPrice": 10.65, + "askQty": 100, + "askPrice": 17.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21800, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21800.00", + "oi": 60, + "oiChg": 17, + "oiPctChg": 39.53488372093023, + "totTradedVol": 32, + "iv": 28.5, + "ltp": 2391, + "change": 656, + "pChange": 37.809798270893374, + "totBuyQty": 4125, + "totSellQty": 4275, + "bidQty": 250, + "bidPrice": 2279.7, + "askQty": 125, + "askPrice": 2334.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21800.00", + "oi": 18349, + "oiChg": 1146, + "oiPctChg": 6.661628785676917, + "totTradedVol": 19778, + "iv": 19.3, + "ltp": 14.65, + "change": 4, + "pChange": 37.558685446009385, + "totBuyQty": 34550, + "totSellQty": 8050, + "bidQty": 100, + "bidPrice": 14.45, + "askQty": 225, + "askPrice": 14.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21850, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21850.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4000, + "totSellQty": 3725, + "bidQty": 275, + "bidPrice": 2225.45, + "askQty": 25, + "askPrice": 2313.75 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21850.00", + "oi": 528, + "oiChg": 105, + "oiPctChg": 24.822695035460992, + "totTradedVol": 924, + "iv": 19.28, + "ltp": 15.65, + "change": 3.0500000000000007, + "pChange": 24.206349206349213, + "totBuyQty": 31275, + "totSellQty": 6250, + "bidQty": 350, + "bidPrice": 16.05, + "askQty": 525, + "askPrice": 16.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21900, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21900.00", + "oi": 17, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4000, + "totSellQty": 3750, + "bidQty": 275, + "bidPrice": 2176.9, + "askQty": 50, + "askPrice": 2248.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21900.00", + "oi": 4203, + "oiChg": -283, + "oiPctChg": -6.308515381185912, + "totTradedVol": 5485, + "iv": 19.21, + "ltp": 17.65, + "change": 4.299999999999999, + "pChange": 32.20973782771535, + "totBuyQty": 33500, + "totSellQty": 8825, + "bidQty": 925, + "bidPrice": 17.55, + "askQty": 800, + "askPrice": 17.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21950, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE21950.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4000, + "totSellQty": 3750, + "bidQty": 275, + "bidPrice": 2133.5, + "askQty": 50, + "askPrice": 2200.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE21950.00", + "oi": 412, + "oiChg": 27, + "oiPctChg": 7.012987012987013, + "totTradedVol": 704, + "iv": 19.14, + "ltp": 17.95, + "change": 4.299999999999999, + "pChange": 31.501831501831496, + "totBuyQty": 32100, + "totSellQty": 9375, + "bidQty": 350, + "bidPrice": 18.35, + "askQty": 525, + "askPrice": 18.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22000.00", + "oi": 25249, + "oiChg": 942, + "oiPctChg": 3.8754268317768545, + "totTradedVol": 2722, + "iv": 22, + "ltp": 2113.65, + "change": -318.4000000000001, + "pChange": -13.091836105343232, + "totBuyQty": 11350, + "totSellQty": 11600, + "bidQty": 75, + "bidPrice": 2103.15, + "askQty": 100, + "askPrice": 2111.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22000.00", + "oi": 159453, + "oiChg": 12103, + "oiPctChg": 8.21377672209026, + "totTradedVol": 106801, + "iv": 19.08, + "ltp": 20.6, + "change": 5.450000000000001, + "pChange": 35.97359735973598, + "totBuyQty": 118600, + "totSellQty": 53050, + "bidQty": 625, + "bidPrice": 20.4, + "askQty": 50, + "askPrice": 20.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22050, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22050.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3975, + "totSellQty": 2825, + "bidQty": 250, + "bidPrice": 2036.7, + "askQty": 25, + "askPrice": 2123.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 31625, + "totSellQty": 0, + "bidQty": 600, + "bidPrice": 15.65, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22100, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22100.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3975, + "totSellQty": 4650, + "bidQty": 250, + "bidPrice": 1990.35, + "askQty": 25, + "askPrice": 2061.2 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22100.00", + "oi": 2148, + "oiChg": 954, + "oiPctChg": 79.89949748743719, + "totTradedVol": 5476, + "iv": 18.62, + "ltp": 22.95, + "change": 7.199999999999999, + "pChange": 45.71428571428571, + "totBuyQty": 45700, + "totSellQty": 7775, + "bidQty": 200, + "bidPrice": 22.85, + "askQty": 700, + "askPrice": 23.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22150, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22150.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3975, + "totSellQty": 3975, + "bidQty": 250, + "bidPrice": 1944, + "askQty": 250, + "askPrice": 2031.55 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22150.00", + "oi": 448, + "oiChg": 187, + "oiPctChg": 71.64750957854406, + "totTradedVol": 929, + "iv": 18.37, + "ltp": 24.3, + "change": 7.650000000000002, + "pChange": 45.945945945945965, + "totBuyQty": 37325, + "totSellQty": 10375, + "bidQty": 375, + "bidPrice": 23.5, + "askQty": 525, + "askPrice": 23.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22200, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22200.00", + "oi": 10, + "oiChg": 2, + "oiPctChg": 25, + "totTradedVol": 3, + "iv": 0, + "ltp": 1872.25, + "change": 302.25, + "pChange": 19.2515923566879, + "totBuyQty": 4200, + "totSellQty": 3975, + "bidQty": 250, + "bidPrice": 1896.75, + "askQty": 150, + "askPrice": 1950.3 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22200.00", + "oi": 6547, + "oiChg": -174, + "oiPctChg": -2.5889004612408866, + "totTradedVol": 15496, + "iv": 18.25, + "ltp": 25.7, + "change": 7.649999999999999, + "pChange": 42.38227146814403, + "totBuyQty": 39775, + "totSellQty": 8050, + "bidQty": 100, + "bidPrice": 25.5, + "askQty": 500, + "askPrice": 25.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22250, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22250.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 3975, + "bidQty": 25, + "bidPrice": 1851.95, + "askQty": 250, + "askPrice": 1936.1 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22250.00", + "oi": 247, + "oiChg": 160, + "oiPctChg": 183.90804597701148, + "totTradedVol": 647, + "iv": 18.46, + "ltp": 28.5, + "change": 10.05, + "pChange": 54.47154471544716, + "totBuyQty": 43325, + "totSellQty": 2575, + "bidQty": 50, + "bidPrice": 25.45, + "askQty": 50, + "askPrice": 28.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22300, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22300.00", + "oi": 147, + "oiChg": 5, + "oiPctChg": 3.5211267605633805, + "totTradedVol": 12, + "iv": 27.68, + "ltp": 1950, + "change": 658.8499999999999, + "pChange": 51.02815319676256, + "totBuyQty": 4325, + "totSellQty": 5025, + "bidQty": 250, + "bidPrice": 1788.9, + "askQty": 150, + "askPrice": 1852.7 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22300.00", + "oi": 6267, + "oiChg": 50, + "oiPctChg": 0.804246421103426, + "totTradedVol": 8169, + "iv": 17.89, + "ltp": 28.85, + "change": 9.55, + "pChange": 49.4818652849741, + "totBuyQty": 45275, + "totSellQty": 6725, + "bidQty": 350, + "bidPrice": 28.8, + "askQty": 250, + "askPrice": 29 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22350, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22350.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 3725, + "bidQty": 25, + "bidPrice": 1760.2, + "askQty": 25, + "askPrice": 1821.4 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22350.00", + "oi": 343, + "oiChg": 91, + "oiPctChg": 36.111111111111114, + "totTradedVol": 654, + "iv": 17.61, + "ltp": 28.3, + "change": 7.699999999999999, + "pChange": 37.37864077669902, + "totBuyQty": 43325, + "totSellQty": 4025, + "bidQty": 350, + "bidPrice": 31.25, + "askQty": 525, + "askPrice": 31.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22400, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22400.00", + "oi": 22, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3975, + "totSellQty": 4625, + "bidQty": 250, + "bidPrice": 1705.35, + "askQty": 900, + "askPrice": 1773.75 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22400.00", + "oi": 11342, + "oiChg": 846, + "oiPctChg": 8.060213414634147, + "totTradedVol": 11387, + "iv": 17.71, + "ltp": 33.95, + "change": 11.950000000000003, + "pChange": 54.318181818181834, + "totBuyQty": 45500, + "totSellQty": 5600, + "bidQty": 50, + "bidPrice": 34.1, + "askQty": 125, + "askPrice": 34.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22450, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22450.00", + "oi": 41, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 14, + "iv": 0, + "ltp": 1661.2, + "change": -374.0999999999999, + "pChange": -18.380582715078855, + "totBuyQty": 4425, + "totSellQty": 4175, + "bidQty": 250, + "bidPrice": 1653.5, + "askQty": 125, + "askPrice": 1702.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22450.00", + "oi": 429, + "oiChg": 142, + "oiPctChg": 49.47735191637631, + "totTradedVol": 1456, + "iv": 17.44, + "ltp": 35.55, + "change": 12.599999999999998, + "pChange": 54.90196078431372, + "totBuyQty": 35550, + "totSellQty": 4450, + "bidQty": 350, + "bidPrice": 36.2, + "askQty": 75, + "askPrice": 36.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22500, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22500.00", + "oi": 13003, + "oiChg": 779, + "oiPctChg": 6.372709424083769, + "totTradedVol": 3079, + "iv": 17.61, + "ltp": 1634.6, + "change": -308.45000000000005, + "pChange": -15.874527160906823, + "totBuyQty": 9775, + "totSellQty": 17875, + "bidQty": 25, + "bidPrice": 1626.9, + "askQty": 25, + "askPrice": 1633.8 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22500.00", + "oi": 76425, + "oiChg": 5449, + "oiPctChg": 7.677243011722273, + "totTradedVol": 80441, + "iv": 17.41, + "ltp": 39.25, + "change": 15.45, + "pChange": 64.91596638655462, + "totBuyQty": 243475, + "totSellQty": 27275, + "bidQty": 225, + "bidPrice": 38.95, + "askQty": 375, + "askPrice": 39.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22550, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22550.00", + "oi": 28, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 17.09, + "ltp": 1600, + "change": -340, + "pChange": -17.525773195876287, + "totBuyQty": 4100, + "totSellQty": 3850, + "bidQty": 250, + "bidPrice": 1544.3, + "askQty": 125, + "askPrice": 1616.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22550.00", + "oi": 440, + "oiChg": -5, + "oiPctChg": -1.1235955056179776, + "totTradedVol": 1567, + "iv": 17.24, + "ltp": 41.7, + "change": 15.800000000000004, + "pChange": 61.003861003861026, + "totBuyQty": 43025, + "totSellQty": 2800, + "bidQty": 25, + "bidPrice": 41.65, + "askQty": 550, + "askPrice": 42 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22600, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22600.00", + "oi": 317, + "oiChg": 69, + "oiPctChg": 27.822580645161292, + "totTradedVol": 87, + "iv": 25.28, + "ltp": 1666, + "change": -79.84999999999991, + "pChange": -4.5737033536672635, + "totBuyQty": 3850, + "totSellQty": 4475, + "bidQty": 125, + "bidPrice": 1528.15, + "askQty": 125, + "askPrice": 1566.55 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22600.00", + "oi": 13164, + "oiChg": 43, + "oiPctChg": 0.3277189238625105, + "totTradedVol": 24158, + "iv": 17.11, + "ltp": 44.65, + "change": 17.75, + "pChange": 65.98513011152417, + "totBuyQty": 46700, + "totSellQty": 7275, + "bidQty": 675, + "bidPrice": 44.55, + "askQty": 725, + "askPrice": 44.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22650, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22650.00", + "oi": 40, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3000, + "totSellQty": 3725, + "bidQty": 250, + "bidPrice": 1455.4, + "askQty": 25, + "askPrice": 1525.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22650.00", + "oi": 2215, + "oiChg": 492, + "oiPctChg": 28.554846198491003, + "totTradedVol": 2521, + "iv": 16.97, + "ltp": 47.85, + "change": 19, + "pChange": 65.8578856152513, + "totBuyQty": 43600, + "totSellQty": 3400, + "bidQty": 350, + "bidPrice": 48.1, + "askQty": 525, + "askPrice": 48.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22700, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22700.00", + "oi": 162, + "oiChg": -2, + "oiPctChg": -1.2195121951219512, + "totTradedVol": 18, + "iv": 25.13, + "ltp": 1583.3, + "change": -93.25, + "pChange": -5.562017237779965, + "totBuyQty": 3875, + "totSellQty": 4925, + "bidQty": 50, + "bidPrice": 1436.65, + "askQty": 300, + "askPrice": 1472.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22700.00", + "oi": 17110, + "oiChg": 7, + "oiPctChg": 0.04092849207741332, + "totTradedVol": 22034, + "iv": 16.79, + "ltp": 51.75, + "change": 20.85, + "pChange": 67.47572815533981, + "totBuyQty": 41800, + "totSellQty": 5125, + "bidQty": 850, + "bidPrice": 51.5, + "askQty": 75, + "askPrice": 51.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22750, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22750.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3850, + "totSellQty": 3750, + "bidQty": 250, + "bidPrice": 1371, + "askQty": 25, + "askPrice": 1451.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22750.00", + "oi": 1352, + "oiChg": 243, + "oiPctChg": 21.911632100991884, + "totTradedVol": 2201, + "iv": 16.74, + "ltp": 54.7, + "change": 21.950000000000003, + "pChange": 67.02290076335878, + "totBuyQty": 40750, + "totSellQty": 200, + "bidQty": 25, + "bidPrice": 54.5, + "askQty": 25, + "askPrice": 57.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22800, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22800.00", + "oi": 268, + "oiChg": 3, + "oiPctChg": 1.1320754716981132, + "totTradedVol": 24, + "iv": 17.58, + "ltp": 1383, + "change": -271.45000000000005, + "pChange": -16.407265254314122, + "totBuyQty": 4825, + "totSellQty": 4875, + "bidQty": 50, + "bidPrice": 1346.3, + "askQty": 25, + "askPrice": 1369.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22800.00", + "oi": 32223, + "oiChg": 7353, + "oiPctChg": 29.56574185765983, + "totTradedVol": 55027, + "iv": 16.73, + "ltp": 60.7, + "change": 26.35, + "pChange": 76.7103347889374, + "totBuyQty": 49825, + "totSellQty": 15250, + "bidQty": 525, + "bidPrice": 60.05, + "askQty": 225, + "askPrice": 60.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22850, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22850.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4550, + "totSellQty": 3925, + "bidQty": 25, + "bidPrice": 1295.6, + "askQty": 200, + "askPrice": 1346.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22850.00", + "oi": 1219, + "oiChg": 91, + "oiPctChg": 8.067375886524824, + "totTradedVol": 2118, + "iv": 16.39, + "ltp": 63.1, + "change": 26.050000000000004, + "pChange": 70.31039136302296, + "totBuyQty": 43125, + "totSellQty": 3900, + "bidQty": 500, + "bidPrice": 63.95, + "askQty": 50, + "askPrice": 64.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22900, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22900.00", + "oi": 188, + "oiChg": 2, + "oiPctChg": 1.075268817204301, + "totTradedVol": 51, + "iv": 12.41, + "ltp": 1237.4, + "change": -344.5999999999999, + "pChange": -21.782553729456378, + "totBuyQty": 5000, + "totSellQty": 4975, + "bidQty": 125, + "bidPrice": 1258.3, + "askQty": 125, + "askPrice": 1287.75 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22900.00", + "oi": 23452, + "oiChg": 2341, + "oiPctChg": 11.089005731609113, + "totTradedVol": 35957, + "iv": 16.29, + "ltp": 69.25, + "change": 29.75, + "pChange": 75.31645569620254, + "totBuyQty": 48700, + "totSellQty": 15600, + "bidQty": 100, + "bidPrice": 69.15, + "askQty": 525, + "askPrice": 69.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22950, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE22950.00", + "oi": 377, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4000, + "totSellQty": 3975, + "bidQty": 25, + "bidPrice": 1211.3, + "askQty": 25, + "askPrice": 1252.1 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE22950.00", + "oi": 995, + "oiChg": 363, + "oiPctChg": 57.436708860759495, + "totTradedVol": 2131, + "iv": 16.11, + "ltp": 75.1, + "change": 33.099999999999994, + "pChange": 78.8095238095238, + "totBuyQty": 42625, + "totSellQty": 2550, + "bidQty": 500, + "bidPrice": 73.8, + "askQty": 500, + "askPrice": 74.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23000.00", + "oi": 44542, + "oiChg": 5382, + "oiPctChg": 13.74361593462717, + "totTradedVol": 14408, + "iv": 16.68, + "ltp": 1179.65, + "change": -294.64999999999986, + "pChange": -19.985755951977204, + "totBuyQty": 13600, + "totSellQty": 78450, + "bidQty": 25, + "bidPrice": 1179.65, + "askQty": 675, + "askPrice": 1179.75 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23000.00", + "oi": 180410, + "oiChg": -2365, + "oiPctChg": -1.2939406373957052, + "totTradedVol": 190698, + "iv": 16.23, + "ltp": 80.2, + "change": 34.5, + "pChange": 75.49234135667395, + "totBuyQty": 109350, + "totSellQty": 90425, + "bidQty": 500, + "bidPrice": 80.1, + "askQty": 25, + "askPrice": 80.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23050, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23050.00", + "oi": 476, + "oiChg": -1, + "oiPctChg": -0.20964360587002095, + "totTradedVol": 4, + "iv": 14.69, + "ltp": 1128.7, + "change": -222.5999999999999, + "pChange": -16.473025974987042, + "totBuyQty": 4950, + "totSellQty": 4050, + "bidQty": 125, + "bidPrice": 1122.1, + "askQty": 25, + "askPrice": 1145.55 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23050.00", + "oi": 727, + "oiChg": 327, + "oiPctChg": 81.75, + "totTradedVol": 2157, + "iv": 15.96, + "ltp": 85.45, + "change": 37.300000000000004, + "pChange": 77.46625129802702, + "totBuyQty": 30800, + "totSellQty": 7475, + "bidQty": 500, + "bidPrice": 85, + "askQty": 500, + "askPrice": 85.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23100, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23100.00", + "oi": 521, + "oiChg": 1, + "oiPctChg": 0.19230769230769232, + "totTradedVol": 112, + "iv": 17.97, + "ltp": 1139.55, + "change": -244.54999999999995, + "pChange": -17.668521060617003, + "totBuyQty": 5775, + "totSellQty": 5325, + "bidQty": 100, + "bidPrice": 1087.55, + "askQty": 100, + "askPrice": 1098.35 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23100.00", + "oi": 12645, + "oiChg": 2825, + "oiPctChg": 28.767820773930755, + "totTradedVol": 25437, + "iv": 15.75, + "ltp": 91.4, + "change": 40.60000000000001, + "pChange": 79.9212598425197, + "totBuyQty": 34450, + "totSellQty": 11575, + "bidQty": 200, + "bidPrice": 91.15, + "askQty": 125, + "askPrice": 91.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23150, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23150.00", + "oi": 634, + "oiChg": 4, + "oiPctChg": 0.6349206349206349, + "totTradedVol": 5, + "iv": 14.79, + "ltp": 1045.75, + "change": -229.45000000000005, + "pChange": -17.99325595984944, + "totBuyQty": 3250, + "totSellQty": 4025, + "bidQty": 25, + "bidPrice": 1036.45, + "askQty": 25, + "askPrice": 1062.3 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23150.00", + "oi": 880, + "oiChg": 318, + "oiPctChg": 56.58362989323843, + "totTradedVol": 2566, + "iv": 15.63, + "ltp": 98.9, + "change": 44.35000000000001, + "pChange": 81.30155820348305, + "totBuyQty": 18850, + "totSellQty": 7950, + "bidQty": 50, + "bidPrice": 98.1, + "askQty": 1100, + "askPrice": 98.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23200, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23200.00", + "oi": 1976, + "oiChg": 8, + "oiPctChg": 0.4065040650406504, + "totTradedVol": 500, + "iv": 17.18, + "ltp": 1007.2, + "change": -289.54999999999995, + "pChange": -22.32889917100443, + "totBuyQty": 10475, + "totSellQty": 9725, + "bidQty": 50, + "bidPrice": 1006.55, + "askQty": 250, + "askPrice": 1012.35 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23200.00", + "oi": 26409, + "oiChg": 3861, + "oiPctChg": 17.123469930814263, + "totTradedVol": 48964, + "iv": 15.64, + "ltp": 106, + "change": 47.3, + "pChange": 80.57921635434411, + "totBuyQty": 37125, + "totSellQty": 20650, + "bidQty": 575, + "bidPrice": 105.3, + "askQty": 175, + "askPrice": 106 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23250, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23250.00", + "oi": 410, + "oiChg": 1, + "oiPctChg": 0.24449877750611246, + "totTradedVol": 7, + "iv": 16.3, + "ltp": 991.1, + "change": -274.6, + "pChange": -21.695504463933002, + "totBuyQty": 5150, + "totSellQty": 4425, + "bidQty": 125, + "bidPrice": 955.15, + "askQty": 125, + "askPrice": 976.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23250.00", + "oi": 3453, + "oiChg": 443, + "oiPctChg": 14.717607973421927, + "totTradedVol": 10516, + "iv": 15.34, + "ltp": 114.35, + "change": 51.74999999999999, + "pChange": 82.66773162939296, + "totBuyQty": 17425, + "totSellQty": 14275, + "bidQty": 600, + "bidPrice": 113.15, + "askQty": 900, + "askPrice": 114 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23300, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23300.00", + "oi": 2104, + "oiChg": 16, + "oiPctChg": 0.7662835249042146, + "totTradedVol": 665, + "iv": 16.31, + "ltp": 930, + "change": -270.6500000000001, + "pChange": -22.541956440261533, + "totBuyQty": 4800, + "totSellQty": 8250, + "bidQty": 25, + "bidPrice": 925.15, + "askQty": 25, + "askPrice": 929.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23300.00", + "oi": 31162, + "oiChg": 1322, + "oiPctChg": 4.43029490616622, + "totTradedVol": 46027, + "iv": 15.39, + "ltp": 122.75, + "change": 55.7, + "pChange": 83.07233407904549, + "totBuyQty": 30650, + "totSellQty": 19575, + "bidQty": 150, + "bidPrice": 122.75, + "askQty": 100, + "askPrice": 122.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23350, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23350.00", + "oi": 397, + "oiChg": -86, + "oiPctChg": -17.805383022774325, + "totTradedVol": 241, + "iv": 15.59, + "ltp": 900.35, + "change": -259.4999999999999, + "pChange": -22.37358279087812, + "totBuyQty": 2725, + "totSellQty": 4900, + "bidQty": 125, + "bidPrice": 875, + "askQty": 125, + "askPrice": 898.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23350.00", + "oi": 2456, + "oiChg": -1025, + "oiPctChg": -29.445561620224073, + "totTradedVol": 4622, + "iv": 15.11, + "ltp": 131.6, + "change": 59.05, + "pChange": 81.3921433494142, + "totBuyQty": 16325, + "totSellQty": 11750, + "bidQty": 775, + "bidPrice": 131.2, + "askQty": 25, + "askPrice": 132.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23400, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23400.00", + "oi": 3333, + "oiChg": 318, + "oiPctChg": 10.54726368159204, + "totTradedVol": 1412, + "iv": 16.04, + "ltp": 840, + "change": -273.95000000000005, + "pChange": -24.592665739036764, + "totBuyQty": 7375, + "totSellQty": 11025, + "bidQty": 50, + "bidPrice": 844.25, + "askQty": 50, + "askPrice": 848.45 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23400.00", + "oi": 19813, + "oiChg": 926, + "oiPctChg": 4.90284322549902, + "totTradedVol": 28981, + "iv": 15.17, + "ltp": 142.55, + "change": 64.55000000000001, + "pChange": 82.75641025641028, + "totBuyQty": 32775, + "totSellQty": 23525, + "bidQty": 600, + "bidPrice": 141.7, + "askQty": 25, + "askPrice": 142.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23450, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23450.00", + "oi": 695, + "oiChg": -4, + "oiPctChg": -0.5722460658082976, + "totTradedVol": 24, + "iv": 16.12, + "ltp": 836.8, + "change": -150.25, + "pChange": -15.222126538675854, + "totBuyQty": 2550, + "totSellQty": 5900, + "bidQty": 50, + "bidPrice": 801.7, + "askQty": 125, + "askPrice": 818.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23450.00", + "oi": 3596, + "oiChg": 2360, + "oiPctChg": 190.93851132686083, + "totTradedVol": 8064, + "iv": 14.88, + "ltp": 150.5, + "change": 65.9, + "pChange": 77.89598108747046, + "totBuyQty": 16075, + "totSellQty": 15800, + "bidQty": 1225, + "bidPrice": 151.45, + "askQty": 300, + "askPrice": 152.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23500, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23500.00", + "oi": 33637, + "oiChg": 1347, + "oiPctChg": 4.1715701455559, + "totTradedVol": 13708, + "iv": 15.33, + "ltp": 763.3, + "change": -264.10000000000014, + "pChange": -25.705664784893916, + "totBuyQty": 21975, + "totSellQty": 30550, + "bidQty": 25, + "bidPrice": 765.05, + "askQty": 100, + "askPrice": 767.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23500.00", + "oi": 147093, + "oiChg": 12398, + "oiPctChg": 9.20449905341698, + "totTradedVol": 182918, + "iv": 15.01, + "ltp": 165.05, + "change": 72.75000000000001, + "pChange": 78.819068255688, + "totBuyQty": 94775, + "totSellQty": 61750, + "bidQty": 100, + "bidPrice": 164.6, + "askQty": 400, + "askPrice": 165.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23550, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23550.00", + "oi": 1217, + "oiChg": -81, + "oiPctChg": -6.240369799691834, + "totTradedVol": 194, + "iv": 16.31, + "ltp": 731.5, + "change": -241.95000000000005, + "pChange": -24.854897529405726, + "totBuyQty": 1100, + "totSellQty": 8025, + "bidQty": 100, + "bidPrice": 725.5, + "askQty": 50, + "askPrice": 734.1 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23550.00", + "oi": 1481, + "oiChg": 319, + "oiPctChg": 27.452667814113596, + "totTradedVol": 3664, + "iv": 14.74, + "ltp": 174.2, + "change": 76.1, + "pChange": 77.57390417940877, + "totBuyQty": 13225, + "totSellQty": 13225, + "bidQty": 500, + "bidPrice": 174.7, + "askQty": 100, + "askPrice": 175.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23600, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23600.00", + "oi": 3631, + "oiChg": -160, + "oiPctChg": -4.220522289633342, + "totTradedVol": 2268, + "iv": 15.36, + "ltp": 696.3, + "change": -243.95000000000005, + "pChange": -25.94522733315608, + "totBuyQty": 8250, + "totSellQty": 12400, + "bidQty": 25, + "bidPrice": 689.2, + "askQty": 25, + "askPrice": 695.8 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23600.00", + "oi": 17548, + "oiChg": 1029, + "oiPctChg": 6.229190628972698, + "totTradedVol": 30595, + "iv": 14.75, + "ltp": 187.75, + "change": 81.9, + "pChange": 77.37364194615022, + "totBuyQty": 22075, + "totSellQty": 16625, + "bidQty": 100, + "bidPrice": 187.05, + "askQty": 25, + "askPrice": 187.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23650, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23650.00", + "oi": 872, + "oiChg": 61, + "oiPctChg": 7.52157829839704, + "totTradedVol": 301, + "iv": 15.61, + "ltp": 657, + "change": -271.95000000000005, + "pChange": -29.274987889552722, + "totBuyQty": 3750, + "totSellQty": 7925, + "bidQty": 25, + "bidPrice": 657.1, + "askQty": 25, + "askPrice": 659.75 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23650.00", + "oi": 2189, + "oiChg": 224, + "oiPctChg": 11.399491094147583, + "totTradedVol": 3193, + "iv": 14.45, + "ltp": 199.75, + "change": 85.8, + "pChange": 75.29618253620008, + "totBuyQty": 11600, + "totSellQty": 14050, + "bidQty": 275, + "bidPrice": 200.3, + "askQty": 200, + "askPrice": 202.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23700, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23700.00", + "oi": 9235, + "oiChg": 582, + "oiPctChg": 6.725990985785277, + "totTradedVol": 6084, + "iv": 14.79, + "ltp": 618.25, + "change": -239.95000000000005, + "pChange": -27.959683057562344, + "totBuyQty": 11125, + "totSellQty": 15625, + "bidQty": 25, + "bidPrice": 621.05, + "askQty": 25, + "askPrice": 623.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23700.00", + "oi": 33521, + "oiChg": 1175, + "oiPctChg": 3.6325975391083904, + "totTradedVol": 39665, + "iv": 14.53, + "ltp": 218.85, + "change": 95.05, + "pChange": 76.77705977382875, + "totBuyQty": 27375, + "totSellQty": 33025, + "bidQty": 25, + "bidPrice": 216.35, + "askQty": 50, + "askPrice": 217.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23750, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23750.00", + "oi": 884, + "oiChg": 160, + "oiPctChg": 22.099447513812155, + "totTradedVol": 706, + "iv": 14.94, + "ltp": 590, + "change": -231.04999999999995, + "pChange": -28.14079532306193, + "totBuyQty": 6950, + "totSellQty": 9900, + "bidQty": 25, + "bidPrice": 587.65, + "askQty": 400, + "askPrice": 590 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23750.00", + "oi": 2036, + "oiChg": 426, + "oiPctChg": 26.459627329192546, + "totTradedVol": 4620, + "iv": 14.16, + "ltp": 229.8, + "change": 98.70000000000002, + "pChange": 75.28604118993137, + "totBuyQty": 13000, + "totSellQty": 13675, + "bidQty": 100, + "bidPrice": 229.95, + "askQty": 25, + "askPrice": 231.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23800, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23800.00", + "oi": 11189, + "oiChg": 1089, + "oiPctChg": 10.782178217821782, + "totTradedVol": 11165, + "iv": 14.59, + "ltp": 555.25, + "change": -222, + "pChange": -28.56223866194918, + "totBuyQty": 12375, + "totSellQty": 17550, + "bidQty": 50, + "bidPrice": 554.4, + "askQty": 50, + "askPrice": 556.45 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23800.00", + "oi": 43427, + "oiChg": 2796, + "oiPctChg": 6.881445201939406, + "totTradedVol": 68714, + "iv": 14.37, + "ltp": 249.8, + "change": 107.35000000000002, + "pChange": 75.35977535977538, + "totBuyQty": 39525, + "totSellQty": 34500, + "bidQty": 75, + "bidPrice": 247.85, + "askQty": 150, + "askPrice": 247.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23850, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23850.00", + "oi": 1013, + "oiChg": 324, + "oiPctChg": 47.02467343976778, + "totTradedVol": 1611, + "iv": 14.4, + "ltp": 522.6, + "change": -218, + "pChange": -29.435592762624896, + "totBuyQty": 9325, + "totSellQty": 10475, + "bidQty": 450, + "bidPrice": 520.9, + "askQty": 450, + "askPrice": 522.75 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23850.00", + "oi": 1902, + "oiChg": 460, + "oiPctChg": 31.9001386962552, + "totTradedVol": 4392, + "iv": 13.8, + "ltp": 262.75, + "change": 112.15, + "pChange": 74.46879150066403, + "totBuyQty": 15850, + "totSellQty": 13775, + "bidQty": 150, + "bidPrice": 263.05, + "askQty": 100, + "askPrice": 264.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23900, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23900.00", + "oi": 9143, + "oiChg": 2048, + "oiPctChg": 28.86539816772375, + "totTradedVol": 15202, + "iv": 14.36, + "ltp": 491.5, + "change": -205.75, + "pChange": -29.508784510577268, + "totBuyQty": 29375, + "totSellQty": 20975, + "bidQty": 500, + "bidPrice": 490.65, + "askQty": 500, + "askPrice": 492.45 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23900.00", + "oi": 20073, + "oiChg": 5205, + "oiPctChg": 35.00807102502018, + "totTradedVol": 49830, + "iv": 14.11, + "ltp": 282.85, + "change": 121.25000000000003, + "pChange": 75.03094059405943, + "totBuyQty": 28125, + "totSellQty": 31775, + "bidQty": 100, + "bidPrice": 282.05, + "askQty": 25, + "askPrice": 282.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23950, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE23950.00", + "oi": 1708, + "oiChg": 678, + "oiPctChg": 65.8252427184466, + "totTradedVol": 3427, + "iv": 14.53, + "ltp": 461.35, + "change": -203.75, + "pChange": -30.63449105397684, + "totBuyQty": 15025, + "totSellQty": 13150, + "bidQty": 500, + "bidPrice": 460.1, + "askQty": 500, + "askPrice": 461.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE23950.00", + "oi": 1678, + "oiChg": 487, + "oiPctChg": 40.890008396305625, + "totTradedVol": 6225, + "iv": 14.03, + "ltp": 302.2, + "change": 127.44999999999999, + "pChange": 72.93276108726752, + "totBuyQty": 14800, + "totSellQty": 15975, + "bidQty": 50, + "bidPrice": 301.2, + "askQty": 325, + "askPrice": 302.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24000.00", + "oi": 120541, + "oiChg": 18643, + "oiPctChg": 18.295746727119276, + "totTradedVol": 160235, + "iv": 14.24, + "ltp": 434.8, + "change": -192.95, + "pChange": -30.736758263639985, + "totBuyQty": 95725, + "totSellQty": 107950, + "bidQty": 25, + "bidPrice": 433.6, + "askQty": 50, + "askPrice": 434.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24000.00", + "oi": 202831, + "oiChg": 14142, + "oiPctChg": 7.49487251509097, + "totTradedVol": 305591, + "iv": 13.96, + "ltp": 322.3, + "change": 134, + "pChange": 71.16303770578864, + "totBuyQty": 216800, + "totSellQty": 96875, + "bidQty": 375, + "bidPrice": 322.3, + "askQty": 100, + "askPrice": 322.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24050, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24050.00", + "oi": 3009, + "oiChg": 2080, + "oiPctChg": 223.8966630785791, + "totTradedVol": 6557, + "iv": 14.18, + "ltp": 400.7, + "change": -191.00000000000006, + "pChange": -32.279871556532036, + "totBuyQty": 31450, + "totSellQty": 15425, + "bidQty": 100, + "bidPrice": 401.85, + "askQty": 25, + "askPrice": 402.85 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24050.00", + "oi": 2849, + "oiChg": 1363, + "oiPctChg": 91.72274562584118, + "totTradedVol": 8916, + "iv": 13.79, + "ltp": 345.05, + "change": 144.60000000000002, + "pChange": 72.13769019705664, + "totBuyQty": 20275, + "totSellQty": 16975, + "bidQty": 500, + "bidPrice": 343, + "askQty": 150, + "askPrice": 345.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24100, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24100.00", + "oi": 19448, + "oiChg": 9378, + "oiPctChg": 93.12810327706057, + "totTradedVol": 42520, + "iv": 14.01, + "ltp": 375.85, + "change": -180.60000000000002, + "pChange": -32.45574624853985, + "totBuyQty": 39325, + "totSellQty": 32900, + "bidQty": 25, + "bidPrice": 376.2, + "askQty": 200, + "askPrice": 377 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24100.00", + "oi": 19912, + "oiChg": 6612, + "oiPctChg": 49.714285714285715, + "totTradedVol": 56726, + "iv": 13.76, + "ltp": 364.85, + "change": 150.60000000000002, + "pChange": 70.291715285881, + "totBuyQty": 29925, + "totSellQty": 21875, + "bidQty": 525, + "bidPrice": 363.3, + "askQty": 100, + "askPrice": 365 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24150, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24150.00", + "oi": 2947, + "oiChg": 1762, + "oiPctChg": 148.69198312236287, + "totTradedVol": 5343, + "iv": 13.81, + "ltp": 348.1, + "change": -174.39999999999998, + "pChange": -33.377990430622006, + "totBuyQty": 47225, + "totSellQty": 13675, + "bidQty": 200, + "bidPrice": 349.5, + "askQty": 25, + "askPrice": 350.8 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24150.00", + "oi": 2380, + "oiChg": 670, + "oiPctChg": 39.1812865497076, + "totTradedVol": 7806, + "iv": 13.37, + "ltp": 387.9, + "change": 158.99999999999997, + "pChange": 69.46264744429881, + "totBuyQty": 15000, + "totSellQty": 15850, + "bidQty": 525, + "bidPrice": 387, + "askQty": 250, + "askPrice": 389.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24200, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24200.00", + "oi": 35474, + "oiChg": 13601, + "oiPctChg": 62.18168518264527, + "totTradedVol": 84141, + "iv": 13.79, + "ltp": 323.2, + "change": -166, + "pChange": -33.932951757972205, + "totBuyQty": 50225, + "totSellQty": 73750, + "bidQty": 200, + "bidPrice": 323.35, + "askQty": 125, + "askPrice": 324.45 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24200.00", + "oi": 35093, + "oiChg": 8635, + "oiPctChg": 32.63663164260337, + "totTradedVol": 99493, + "iv": 13.57, + "ltp": 411.9, + "change": 165.29999999999998, + "pChange": 67.03163017031629, + "totBuyQty": 41350, + "totSellQty": 30325, + "bidQty": 200, + "bidPrice": 411.5, + "askQty": 150, + "askPrice": 412.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24250, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24250.00", + "oi": 3531, + "oiChg": 1265, + "oiPctChg": 55.8252427184466, + "totTradedVol": 8152, + "iv": 13.62, + "ltp": 301, + "change": -154.89999999999998, + "pChange": -33.97674928712436, + "totBuyQty": 33250, + "totSellQty": 23775, + "bidQty": 325, + "bidPrice": 300, + "askQty": 200, + "askPrice": 301.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24250.00", + "oi": 3252, + "oiChg": 1038, + "oiPctChg": 46.883468834688344, + "totTradedVol": 9561, + "iv": 13.17, + "ltp": 437.8, + "change": 174.35000000000002, + "pChange": 66.17954070981213, + "totBuyQty": 13100, + "totSellQty": 14875, + "bidQty": 25, + "bidPrice": 438, + "askQty": 400, + "askPrice": 439.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24300, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24300.00", + "oi": 35413, + "oiChg": 12334, + "oiPctChg": 53.442523506217775, + "totTradedVol": 95572, + "iv": 13.58, + "ltp": 276.55, + "change": -148.59999999999997, + "pChange": -34.95236975185228, + "totBuyQty": 47075, + "totSellQty": 59525, + "bidQty": 300, + "bidPrice": 277, + "askQty": 500, + "askPrice": 278.1 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24300.00", + "oi": 30900, + "oiChg": 4628, + "oiPctChg": 17.615712545676004, + "totTradedVol": 94786, + "iv": 13.42, + "ltp": 465.95, + "change": 182.95, + "pChange": 64.64664310954063, + "totBuyQty": 25450, + "totSellQty": 21800, + "bidQty": 450, + "bidPrice": 464, + "askQty": 75, + "askPrice": 465.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24350, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24350.00", + "oi": 3030, + "oiChg": 987, + "oiPctChg": 48.311306901615275, + "totTradedVol": 8971, + "iv": 13.75, + "ltp": 253.15, + "change": -142.24999999999997, + "pChange": -35.976226605968634, + "totBuyQty": 32400, + "totSellQty": 17150, + "bidQty": 450, + "bidPrice": 253.55, + "askQty": 25, + "askPrice": 254.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24350.00", + "oi": 2317, + "oiChg": 72, + "oiPctChg": 3.2071269487750556, + "totTradedVol": 7297, + "iv": 13, + "ltp": 496, + "change": 194.8, + "pChange": 64.67463479415672, + "totBuyQty": 8725, + "totSellQty": 12300, + "bidQty": 75, + "bidPrice": 493.1, + "askQty": 25, + "askPrice": 495.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24400, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24400.00", + "oi": 25522, + "oiChg": 3906, + "oiPctChg": 18.069948186528496, + "totTradedVol": 55925, + "iv": 13.41, + "ltp": 233.6, + "change": -134.75000000000003, + "pChange": -36.58205511062849, + "totBuyQty": 41850, + "totSellQty": 48225, + "bidQty": 250, + "bidPrice": 233.95, + "askQty": 150, + "askPrice": 235.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24400.00", + "oi": 23621, + "oiChg": -120, + "oiPctChg": -0.5054546986226359, + "totTradedVol": 46494, + "iv": 13.21, + "ltp": 526.85, + "change": 201.85000000000002, + "pChange": 62.10769230769232, + "totBuyQty": 15575, + "totSellQty": 21625, + "bidQty": 225, + "bidPrice": 524.2, + "askQty": 225, + "askPrice": 525.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24450, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24450.00", + "oi": 3879, + "oiChg": 619, + "oiPctChg": 18.987730061349694, + "totTradedVol": 8218, + "iv": 13.41, + "ltp": 214.7, + "change": -124.90000000000003, + "pChange": -36.77856301531214, + "totBuyQty": 33525, + "totSellQty": 20050, + "bidQty": 50, + "bidPrice": 215.25, + "askQty": 200, + "askPrice": 216.85 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24450.00", + "oi": 2188, + "oiChg": -383, + "oiPctChg": -14.896927265655387, + "totTradedVol": 6435, + "iv": 12.4, + "ltp": 548.85, + "change": 204.75, + "pChange": 59.5030514385353, + "totBuyQty": 8125, + "totSellQty": 10475, + "bidQty": 125, + "bidPrice": 550.35, + "askQty": 125, + "askPrice": 552.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24500, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24500.00", + "oi": 145758, + "oiChg": 57110, + "oiPctChg": 64.42333724393106, + "totTradedVol": 264770, + "iv": 13.33, + "ltp": 199.15, + "change": -114.70000000000002, + "pChange": -36.546120758324044, + "totBuyQty": 99675, + "totSellQty": 167250, + "bidQty": 1800, + "bidPrice": 199.05, + "askQty": 175, + "askPrice": 199.35 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24500.00", + "oi": 141439, + "oiChg": 38040, + "oiPctChg": 36.78952407663517, + "totTradedVol": 181171, + "iv": 13.03, + "ltp": 586.5, + "change": 215.60000000000002, + "pChange": 58.12887570773795, + "totBuyQty": 34075, + "totSellQty": 28000, + "bidQty": 275, + "bidPrice": 584, + "askQty": 400, + "askPrice": 585.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24550, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24550.00", + "oi": 2775, + "oiChg": 445, + "oiPctChg": 19.098712446351932, + "totTradedVol": 7247, + "iv": 13.43, + "ltp": 179.9, + "change": -108.24999999999997, + "pChange": -37.56723928509456, + "totBuyQty": 31450, + "totSellQty": 17525, + "bidQty": 700, + "bidPrice": 178.95, + "askQty": 1550, + "askPrice": 180.1 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24550.00", + "oi": 1048, + "oiChg": 16, + "oiPctChg": 1.550387596899225, + "totTradedVol": 1998, + "iv": 12.48, + "ltp": 605.95, + "change": 212.80000000000007, + "pChange": 54.12692356606895, + "totBuyQty": 5425, + "totSellQty": 6300, + "bidQty": 25, + "bidPrice": 615.05, + "askQty": 25, + "askPrice": 617.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24600, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24600.00", + "oi": 18161, + "oiChg": 2022, + "oiPctChg": 12.528657289794907, + "totTradedVol": 39761, + "iv": 13.17, + "ltp": 164.1, + "change": -99.15, + "pChange": -37.66381766381767, + "totBuyQty": 57575, + "totSellQty": 30475, + "bidQty": 50, + "bidPrice": 163.85, + "askQty": 225, + "askPrice": 164.55 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24600.00", + "oi": 22828, + "oiChg": 823, + "oiPctChg": 3.7400590774823903, + "totTradedVol": 16687, + "iv": 13.03, + "ltp": 651, + "change": 230.64999999999998, + "pChange": 54.87094088259783, + "totBuyQty": 15625, + "totSellQty": 15450, + "bidQty": 25, + "bidPrice": 650.5, + "askQty": 125, + "askPrice": 652.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24650, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24650.00", + "oi": 2242, + "oiChg": 199, + "oiPctChg": 9.740577581987274, + "totTradedVol": 7618, + "iv": 13.3, + "ltp": 149.65, + "change": -91.25, + "pChange": -37.878787878787875, + "totBuyQty": 28775, + "totSellQty": 10800, + "bidQty": 625, + "bidPrice": 148.1, + "askQty": 600, + "askPrice": 149 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24650.00", + "oi": 1213, + "oiChg": 204, + "oiPctChg": 20.218037661050545, + "totTradedVol": 896, + "iv": 12.13, + "ltp": 683.7, + "change": 239.40000000000003, + "pChange": 53.88251181634032, + "totBuyQty": 5575, + "totSellQty": 5400, + "bidQty": 25, + "bidPrice": 681.1, + "askQty": 100, + "askPrice": 684.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24700, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24700.00", + "oi": 18636, + "oiChg": 2862, + "oiPctChg": 18.14378090528718, + "totTradedVol": 45943, + "iv": 13.08, + "ltp": 134.5, + "change": -84.44999999999999, + "pChange": -38.570449874400545, + "totBuyQty": 39650, + "totSellQty": 22075, + "bidQty": 125, + "bidPrice": 134.6, + "askQty": 400, + "askPrice": 135.4 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24700.00", + "oi": 4483, + "oiChg": 520, + "oiPctChg": 13.121372697451426, + "totTradedVol": 6076, + "iv": 12.15, + "ltp": 713.25, + "change": 239.89999999999998, + "pChange": 50.68131403823808, + "totBuyQty": 11375, + "totSellQty": 9600, + "bidQty": 25, + "bidPrice": 717.3, + "askQty": 25, + "askPrice": 719.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24750, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24750.00", + "oi": 2971, + "oiChg": 305, + "oiPctChg": 11.440360090022505, + "totTradedVol": 7477, + "iv": 13.13, + "ltp": 124.2, + "change": -75.45, + "pChange": -37.79113448534936, + "totBuyQty": 32925, + "totSellQty": 12550, + "bidQty": 25, + "bidPrice": 121.55, + "askQty": 400, + "askPrice": 122.3 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24750.00", + "oi": 1018, + "oiChg": 179, + "oiPctChg": 21.33492252681764, + "totTradedVol": 708, + "iv": 11.84, + "ltp": 720, + "change": 216.45, + "pChange": 42.98480786416443, + "totBuyQty": 7025, + "totSellQty": 2675, + "bidQty": 50, + "bidPrice": 749.65, + "askQty": 25, + "askPrice": 757.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24800, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24800.00", + "oi": 28943, + "oiChg": 5594, + "oiPctChg": 23.95819949462504, + "totTradedVol": 54670, + "iv": 12.99, + "ltp": 111.1, + "change": -69.30000000000001, + "pChange": -38.41463414634147, + "totBuyQty": 42650, + "totSellQty": 37850, + "bidQty": 225, + "bidPrice": 110.25, + "askQty": 175, + "askPrice": 110.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24800.00", + "oi": 32353, + "oiChg": 19793, + "oiPctChg": 157.5875796178344, + "totTradedVol": 27472, + "iv": 12.4, + "ltp": 796.1, + "change": 260.9, + "pChange": 48.74813153961135, + "totBuyQty": 13525, + "totSellQty": 11025, + "bidQty": 175, + "bidPrice": 795.55, + "askQty": 150, + "askPrice": 799.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24850, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24850.00", + "oi": 1953, + "oiChg": 1016, + "oiPctChg": 108.43116328708645, + "totTradedVol": 5822, + "iv": 13.02, + "ltp": 99.9, + "change": -63.599999999999994, + "pChange": -38.89908256880734, + "totBuyQty": 33700, + "totSellQty": 11350, + "bidQty": 600, + "bidPrice": 100, + "askQty": 125, + "askPrice": 100.7 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24850.00", + "oi": 378, + "oiChg": -11, + "oiPctChg": -2.827763496143959, + "totTradedVol": 105, + "iv": 12, + "ltp": 802.6, + "change": 244.70000000000005, + "pChange": 43.86090697257574, + "totBuyQty": 5950, + "totSellQty": 5200, + "bidQty": 50, + "bidPrice": 819, + "askQty": 100, + "askPrice": 840.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24900, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24900.00", + "oi": 14945, + "oiChg": 2154, + "oiPctChg": 16.839965600813073, + "totTradedVol": 34562, + "iv": 12.97, + "ltp": 89.9, + "change": -57.29999999999998, + "pChange": -38.9266304347826, + "totBuyQty": 36025, + "totSellQty": 16725, + "bidQty": 100, + "bidPrice": 89.7, + "askQty": 225, + "askPrice": 90.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24900.00", + "oi": 2272, + "oiChg": 88, + "oiPctChg": 4.029304029304029, + "totTradedVol": 1648, + "iv": 11.93, + "ltp": 869.4, + "change": 271.35, + "pChange": 45.372460496614, + "totBuyQty": 12750, + "totSellQty": 12375, + "bidQty": 25, + "bidPrice": 868.6, + "askQty": 25, + "askPrice": 873.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24950, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE24950.00", + "oi": 2190, + "oiChg": 753, + "oiPctChg": 52.40083507306889, + "totTradedVol": 6291, + "iv": 12.95, + "ltp": 80.85, + "change": -53, + "pChange": -39.596563317146064, + "totBuyQty": 26025, + "totSellQty": 10200, + "bidQty": 375, + "bidPrice": 81.55, + "askQty": 500, + "askPrice": 82.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE24950.00", + "oi": 340, + "oiChg": -64, + "oiPctChg": -15.841584158415841, + "totTradedVol": 170, + "iv": 12.22, + "ltp": 887.45, + "change": 249.55000000000007, + "pChange": 39.12055181062864, + "totBuyQty": 7075, + "totSellQty": 4600, + "bidQty": 250, + "bidPrice": 907.85, + "askQty": 100, + "askPrice": 914.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25000.00", + "oi": 165184, + "oiChg": 24270, + "oiPctChg": 17.22327093120627, + "totTradedVol": 249370, + "iv": 12.9, + "ltp": 71.7, + "change": -49.3, + "pChange": -40.74380165289256, + "totBuyQty": 107400, + "totSellQty": 241975, + "bidQty": 400, + "bidPrice": 72.3, + "askQty": 525, + "askPrice": 72.6 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25000.00", + "oi": 86950, + "oiChg": 1091, + "oiPctChg": 1.2706879884461735, + "totTradedVol": 40488, + "iv": 12.21, + "ltp": 955, + "change": 284.25, + "pChange": 42.377935147223255, + "totBuyQty": 33350, + "totSellQty": 23525, + "bidQty": 200, + "bidPrice": 953.3, + "askQty": 50, + "askPrice": 956.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25050, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25050.00", + "oi": 3601, + "oiChg": 412, + "oiPctChg": 12.919410473502666, + "totTradedVol": 18352, + "iv": 12.9, + "ltp": 64.65, + "change": -42.599999999999994, + "pChange": -39.72027972027972, + "totBuyQty": 32850, + "totSellQty": 12450, + "bidQty": 425, + "bidPrice": 64.55, + "askQty": 550, + "askPrice": 64.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25050.00", + "oi": 174, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5250, + "totSellQty": 2700, + "bidQty": 25, + "bidPrice": 976.05, + "askQty": 25, + "askPrice": 1013.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25100, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25100.00", + "oi": 14030, + "oiChg": 1350, + "oiPctChg": 10.646687697160884, + "totTradedVol": 56083, + "iv": 12.85, + "ltp": 57.8, + "change": -37.85000000000001, + "pChange": -39.5713538944067, + "totBuyQty": 35425, + "totSellQty": 19925, + "bidQty": 175, + "bidPrice": 57.65, + "askQty": 25, + "askPrice": 57.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25100.00", + "oi": 1546, + "oiChg": 30, + "oiPctChg": 1.9788918205804749, + "totTradedVol": 932, + "iv": 7.29, + "ltp": 1019, + "change": 276.54999999999995, + "pChange": 37.24829954879116, + "totBuyQty": 6575, + "totSellQty": 6725, + "bidQty": 25, + "bidPrice": 1029.55, + "askQty": 100, + "askPrice": 1043.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25150, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25150.00", + "oi": 1968, + "oiChg": 620, + "oiPctChg": 45.99406528189911, + "totTradedVol": 5130, + "iv": 13.03, + "ltp": 51.95, + "change": -33.45, + "pChange": -39.168618266978925, + "totBuyQty": 19375, + "totSellQty": 4125, + "bidQty": 25, + "bidPrice": 51.85, + "askQty": 450, + "askPrice": 52.2 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25150.00", + "oi": 270, + "oiChg": 1, + "oiPctChg": 0.37174721189591076, + "totTradedVol": 10, + "iv": 10.25, + "ltp": 1040, + "change": 259, + "pChange": 33.162612035851474, + "totBuyQty": 5875, + "totSellQty": 4700, + "bidQty": 250, + "bidPrice": 1061.25, + "askQty": 400, + "askPrice": 1097.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25200, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25200.00", + "oi": 33421, + "oiChg": 3863, + "oiPctChg": 13.069219838960688, + "totTradedVol": 56592, + "iv": 13.04, + "ltp": 47.3, + "change": -28.950000000000003, + "pChange": -37.9672131147541, + "totBuyQty": 37400, + "totSellQty": 35350, + "bidQty": 100, + "bidPrice": 47.3, + "askQty": 175, + "askPrice": 47.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25200.00", + "oi": 1911, + "oiChg": 350, + "oiPctChg": 22.42152466367713, + "totTradedVol": 1234, + "iv": 11.85, + "ltp": 1120, + "change": 289.45000000000005, + "pChange": 34.85040033712601, + "totBuyQty": 8900, + "totSellQty": 7675, + "bidQty": 25, + "bidPrice": 1114.5, + "askQty": 250, + "askPrice": 1120.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25250, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25250.00", + "oi": 2043, + "oiChg": 785, + "oiPctChg": 62.40063593004769, + "totTradedVol": 5825, + "iv": 12.96, + "ltp": 40.85, + "change": -26.15, + "pChange": -39.02985074626866, + "totBuyQty": 26475, + "totSellQty": 8925, + "bidQty": 150, + "bidPrice": 40.25, + "askQty": 50, + "askPrice": 40.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25250.00", + "oi": 346, + "oiChg": 10, + "oiPctChg": 2.9761904761904763, + "totTradedVol": 39, + "iv": 9.63, + "ltp": 1150.7, + "change": 295.30000000000007, + "pChange": 34.52186111760581, + "totBuyQty": 5350, + "totSellQty": 4200, + "bidQty": 25, + "bidPrice": 1157.95, + "askQty": 250, + "askPrice": 1169.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25300, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25300.00", + "oi": 13849, + "oiChg": 3317, + "oiPctChg": 31.494492973794152, + "totTradedVol": 49169, + "iv": 12.94, + "ltp": 36.9, + "change": -22.550000000000004, + "pChange": -37.931034482758626, + "totBuyQty": 41825, + "totSellQty": 16400, + "bidQty": 1200, + "bidPrice": 36.75, + "askQty": 100, + "askPrice": 36.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25300.00", + "oi": 1205, + "oiChg": 482, + "oiPctChg": 66.66666666666667, + "totTradedVol": 628, + "iv": 0, + "ltp": 1217.95, + "change": 318, + "pChange": 35.335296405355855, + "totBuyQty": 8300, + "totSellQty": 6075, + "bidQty": 25, + "bidPrice": 1203.2, + "askQty": 250, + "askPrice": 1211.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25350, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25350.00", + "oi": 2562, + "oiChg": 393, + "oiPctChg": 18.118948824343015, + "totTradedVol": 8609, + "iv": 13, + "ltp": 32.2, + "change": -20.15, + "pChange": -38.4909264565425, + "totBuyQty": 41425, + "totSellQty": 7750, + "bidQty": 625, + "bidPrice": 31.95, + "askQty": 25, + "askPrice": 32.2 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25350.00", + "oi": 154, + "oiChg": -22, + "oiPctChg": -12.5, + "totTradedVol": 62, + "iv": 0, + "ltp": 1120.65, + "change": 192.95000000000005, + "pChange": 20.7987495957745, + "totBuyQty": 4775, + "totSellQty": 4100, + "bidQty": 125, + "bidPrice": 1245.8, + "askQty": 150, + "askPrice": 1284.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25400, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25400.00", + "oi": 13785, + "oiChg": 3634, + "oiPctChg": 35.799428627721404, + "totTradedVol": 39734, + "iv": 12.93, + "ltp": 28.55, + "change": -16.900000000000002, + "pChange": -37.18371837183719, + "totBuyQty": 56050, + "totSellQty": 22325, + "bidQty": 475, + "bidPrice": 28.45, + "askQty": 175, + "askPrice": 28.6 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25400.00", + "oi": 1125, + "oiChg": 312, + "oiPctChg": 38.37638376383764, + "totTradedVol": 404, + "iv": 0, + "ltp": 1270, + "change": 277.65, + "pChange": 27.97903965334811, + "totBuyQty": 7950, + "totSellQty": 4425, + "bidQty": 100, + "bidPrice": 1296.35, + "askQty": 250, + "askPrice": 1308.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25450, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25450.00", + "oi": 704, + "oiChg": 245, + "oiPctChg": 53.37690631808279, + "totTradedVol": 4134, + "iv": 12.93, + "ltp": 25.9, + "change": -13.399999999999999, + "pChange": -34.096692111959285, + "totBuyQty": 47925, + "totSellQty": 7550, + "bidQty": 350, + "bidPrice": 25.9, + "askQty": 800, + "askPrice": 26.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25450.00", + "oi": 568, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4575, + "totSellQty": 3100, + "bidQty": 225, + "bidPrice": 1308.55, + "askQty": 25, + "askPrice": 1371.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25500, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25500.00", + "oi": 77163, + "oiChg": 16545, + "oiPctChg": 27.29387310699792, + "totTradedVol": 123703, + "iv": 13.06, + "ltp": 23.45, + "change": -11.650000000000002, + "pChange": -33.1908831908832, + "totBuyQty": 110675, + "totSellQty": 122400, + "bidQty": 25, + "bidPrice": 23.45, + "askQty": 650, + "askPrice": 23.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25500.00", + "oi": 30375, + "oiChg": 9273, + "oiPctChg": 43.943702018766, + "totTradedVol": 13270, + "iv": 0, + "ltp": 1393.25, + "change": 315.5, + "pChange": 29.27395035954535, + "totBuyQty": 21225, + "totSellQty": 13525, + "bidQty": 100, + "bidPrice": 1393.8, + "askQty": 25, + "askPrice": 1399.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25550, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25550.00", + "oi": 1757, + "oiChg": 318, + "oiPctChg": 22.098679638637943, + "totTradedVol": 6256, + "iv": 12.99, + "ltp": 21, + "change": -9.8, + "pChange": -31.818181818181817, + "totBuyQty": 45900, + "totSellQty": 8450, + "bidQty": 25, + "bidPrice": 20.7, + "askQty": 450, + "askPrice": 21 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25550.00", + "oi": 109, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4550, + "totSellQty": 4075, + "bidQty": 25, + "bidPrice": 1415.95, + "askQty": 150, + "askPrice": 1461.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25600, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25600.00", + "oi": 25492, + "oiChg": 8603, + "oiPctChg": 50.938480667890346, + "totTradedVol": 41598, + "iv": 13, + "ltp": 18.35, + "change": -8.349999999999998, + "pChange": -31.273408239700366, + "totBuyQty": 110125, + "totSellQty": 12900, + "bidQty": 125, + "bidPrice": 18, + "askQty": 350, + "askPrice": 18.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25600.00", + "oi": 1508, + "oiChg": 135, + "oiPctChg": 9.832483612527312, + "totTradedVol": 313, + "iv": 15.51, + "ltp": 1505, + "change": 350, + "pChange": 30.303030303030305, + "totBuyQty": 6300, + "totSellQty": 4675, + "bidQty": 125, + "bidPrice": 1480.1, + "askQty": 150, + "askPrice": 1505 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25650, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25650.00", + "oi": 1006, + "oiChg": 57, + "oiPctChg": 6.006322444678609, + "totTradedVol": 2753, + "iv": 13.2, + "ltp": 17, + "change": -7.25, + "pChange": -29.896907216494846, + "totBuyQty": 42625, + "totSellQty": 2975, + "bidQty": 50, + "bidPrice": 16.75, + "askQty": 25, + "askPrice": 17.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25650.00", + "oi": 277, + "oiChg": 193, + "oiPctChg": 229.76190476190476, + "totTradedVol": 271, + "iv": 0, + "ltp": 1477.15, + "change": 319.1500000000001, + "pChange": 27.560449050086365, + "totBuyQty": 4775, + "totSellQty": 3950, + "bidQty": 250, + "bidPrice": 1515.95, + "askQty": 25, + "askPrice": 1568.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25700, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25700.00", + "oi": 16533, + "oiChg": 259, + "oiPctChg": 1.591495637212732, + "totTradedVol": 42030, + "iv": 13.19, + "ltp": 15.2, + "change": -5.400000000000002, + "pChange": -26.21359223300972, + "totBuyQty": 43375, + "totSellQty": 13600, + "bidQty": 575, + "bidPrice": 14.95, + "askQty": 500, + "askPrice": 15.1 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25700.00", + "oi": 1420, + "oiChg": 426, + "oiPctChg": 42.857142857142854, + "totTradedVol": 488, + "iv": 0, + "ltp": 1575.15, + "change": 313.45000000000005, + "pChange": 24.843465166045814, + "totBuyQty": 8050, + "totSellQty": 4975, + "bidQty": 900, + "bidPrice": 1576.2, + "askQty": 25, + "askPrice": 1596.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25750, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25750.00", + "oi": 1212, + "oiChg": -53, + "oiPctChg": -4.189723320158103, + "totTradedVol": 4636, + "iv": 13.39, + "ltp": 14.4, + "change": -4.1, + "pChange": -22.16216216216216, + "totBuyQty": 36775, + "totSellQty": 15050, + "bidQty": 375, + "bidPrice": 14.2, + "askQty": 25, + "askPrice": 14.3 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25750.00", + "oi": 11, + "oiChg": 8, + "oiPctChg": 266.6666666666667, + "totTradedVol": 9, + "iv": 0, + "ltp": 1500, + "change": 185, + "pChange": 14.068441064638785, + "totBuyQty": 4575, + "totSellQty": 3900, + "bidQty": 25, + "bidPrice": 1613.7, + "askQty": 175, + "askPrice": 1669 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25800, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25800.00", + "oi": 16737, + "oiChg": 5628, + "oiPctChg": 50.661625708884685, + "totTradedVol": 35298, + "iv": 13.47, + "ltp": 13.15, + "change": -4.15, + "pChange": -23.988439306358384, + "totBuyQty": 68825, + "totSellQty": 12275, + "bidQty": 10600, + "bidPrice": 12.95, + "askQty": 300, + "askPrice": 13.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25800.00", + "oi": 1726, + "oiChg": 283, + "oiPctChg": 19.61191961191961, + "totTradedVol": 572, + "iv": 0, + "ltp": 1660, + "change": 308.79999999999995, + "pChange": 22.853759621077558, + "totBuyQty": 8025, + "totSellQty": 4000, + "bidQty": 25, + "bidPrice": 1681.65, + "askQty": 250, + "askPrice": 1694.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25850, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25850.00", + "oi": 969, + "oiChg": 82, + "oiPctChg": 9.244644870349493, + "totTradedVol": 4511, + "iv": 13.66, + "ltp": 12.3, + "change": -3.299999999999999, + "pChange": -21.15384615384615, + "totBuyQty": 40925, + "totSellQty": 7750, + "bidQty": 500, + "bidPrice": 12.25, + "askQty": 600, + "askPrice": 12.4 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25850.00", + "oi": 8, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4700, + "totSellQty": 2200, + "bidQty": 275, + "bidPrice": 1700.55, + "askQty": 250, + "askPrice": 1791.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25900, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25900.00", + "oi": 9793, + "oiChg": 5348, + "oiPctChg": 120.31496062992126, + "totTradedVol": 23512, + "iv": 13.68, + "ltp": 11.05, + "change": -3.5999999999999996, + "pChange": -24.57337883959044, + "totBuyQty": 50775, + "totSellQty": 13550, + "bidQty": 1150, + "bidPrice": 10.9, + "askQty": 525, + "askPrice": 11 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25900.00", + "oi": 536, + "oiChg": 216, + "oiPctChg": 67.5, + "totTradedVol": 295, + "iv": 0, + "ltp": 1730, + "change": 276.6500000000001, + "pChange": 19.035332163621984, + "totBuyQty": 6375, + "totSellQty": 5125, + "bidQty": 75, + "bidPrice": 1773.5, + "askQty": 100, + "askPrice": 1793.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25950, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE25950.00", + "oi": 797, + "oiChg": 395, + "oiPctChg": 98.2587064676617, + "totTradedVol": 4759, + "iv": 13.94, + "ltp": 10.85, + "change": -2.3499999999999996, + "pChange": -17.8030303030303, + "totBuyQty": 37450, + "totSellQty": 4375, + "bidQty": 675, + "bidPrice": 10.7, + "askQty": 750, + "askPrice": 10.85 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE25950.00", + "oi": 6, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4000, + "totSellQty": 3725, + "bidQty": 275, + "bidPrice": 1798, + "askQty": 25, + "askPrice": 1875.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26000.00", + "oi": 151892, + "oiChg": 11690, + "oiPctChg": 8.337969501148343, + "totTradedVol": 108042, + "iv": 14.22, + "ltp": 10.65, + "change": -2.799999999999999, + "pChange": -20.817843866170996, + "totBuyQty": 179400, + "totSellQty": 118300, + "bidQty": 3175, + "bidPrice": 10.65, + "askQty": 1625, + "askPrice": 10.7 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26000.00", + "oi": 61448, + "oiChg": 8878, + "oiPctChg": 16.887958911926955, + "totTradedVol": 13691, + "iv": 0, + "ltp": 1878.35, + "change": 327.29999999999995, + "pChange": 21.101834241320393, + "totBuyQty": 15900, + "totSellQty": 13450, + "bidQty": 100, + "bidPrice": 1875.35, + "askQty": 25, + "askPrice": 1878.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26050, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26050.00", + "oi": 1753, + "oiChg": 1354, + "oiPctChg": 339.3483709273183, + "totTradedVol": 4335, + "iv": 14.32, + "ltp": 9.8, + "change": -1.799999999999999, + "pChange": -15.517241379310336, + "totBuyQty": 36550, + "totSellQty": 7700, + "bidQty": 600, + "bidPrice": 9.8, + "askQty": 25, + "askPrice": 9.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26050.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3975, + "totSellQty": 1950, + "bidQty": 250, + "bidPrice": 1870.4, + "askQty": 25, + "askPrice": 1959.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26100, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26100.00", + "oi": 4639, + "oiChg": 892, + "oiPctChg": 23.805711235655192, + "totTradedVol": 15684, + "iv": 14.42, + "ltp": 9, + "change": -1.8499999999999996, + "pChange": -17.05069124423963, + "totBuyQty": 49425, + "totSellQty": 20150, + "bidQty": 625, + "bidPrice": 9, + "askQty": 1600, + "askPrice": 9.1 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26100.00", + "oi": 1968, + "oiChg": 277, + "oiPctChg": 16.380839739798937, + "totTradedVol": 339, + "iv": 17.85, + "ltp": 1970, + "change": 332.8499999999999, + "pChange": 20.331063127996817, + "totBuyQty": 5475, + "totSellQty": 3650, + "bidQty": 25, + "bidPrice": 1964.55, + "askQty": 25, + "askPrice": 1984.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26150, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26150.00", + "oi": 481, + "oiChg": 58, + "oiPctChg": 13.711583924349881, + "totTradedVol": 456, + "iv": 14.58, + "ltp": 8.6, + "change": -1.8000000000000007, + "pChange": -17.307692307692314, + "totBuyQty": 37975, + "totSellQty": 4325, + "bidQty": 350, + "bidPrice": 8.5, + "askQty": 525, + "askPrice": 8.7 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26150.00", + "oi": 7, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4000, + "totSellQty": 3725, + "bidQty": 250, + "bidPrice": 1964.05, + "askQty": 25, + "askPrice": 2057.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26200, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26200.00", + "oi": 10857, + "oiChg": 258, + "oiPctChg": 2.4341919048966885, + "totTradedVol": 16485, + "iv": 14.74, + "ltp": 7.95, + "change": -1.8500000000000005, + "pChange": -18.877551020408166, + "totBuyQty": 51525, + "totSellQty": 10825, + "bidQty": 450, + "bidPrice": 7.95, + "askQty": 400, + "askPrice": 8.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26200.00", + "oi": 2264, + "oiChg": 973, + "oiPctChg": 75.36793183578621, + "totTradedVol": 1064, + "iv": 19.84, + "ltp": 2075, + "change": 334.5, + "pChange": 19.21861534041942, + "totBuyQty": 4975, + "totSellQty": 3525, + "bidQty": 100, + "bidPrice": 2058.7, + "askQty": 25, + "askPrice": 2089.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26250, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26250.00", + "oi": 356, + "oiChg": -137, + "oiPctChg": -27.789046653144016, + "totTradedVol": 630, + "iv": 14.97, + "ltp": 7.95, + "change": -1.6499999999999995, + "pChange": -17.187499999999993, + "totBuyQty": 36375, + "totSellQty": 8925, + "bidQty": 350, + "bidPrice": 7.8, + "askQty": 525, + "askPrice": 8.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26250.00", + "oi": 55, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 0, + "ltp": 1929.5, + "change": 415.5, + "pChange": 27.443857331571998, + "totBuyQty": 3975, + "totSellQty": 3725, + "bidQty": 250, + "bidPrice": 2062.1, + "askQty": 25, + "askPrice": 2160.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26300, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26300.00", + "oi": 2430, + "oiChg": 102, + "oiPctChg": 4.381443298969073, + "totTradedVol": 5664, + "iv": 15.15, + "ltp": 7.5, + "change": -1.75, + "pChange": -18.91891891891892, + "totBuyQty": 36800, + "totSellQty": 9450, + "bidQty": 500, + "bidPrice": 7.4, + "askQty": 400, + "askPrice": 7.55 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26300.00", + "oi": 554, + "oiChg": 327, + "oiPctChg": 144.05286343612335, + "totTradedVol": 361, + "iv": 0, + "ltp": 2082.45, + "change": 242.44999999999982, + "pChange": 13.176630434782599, + "totBuyQty": 5125, + "totSellQty": 5700, + "bidQty": 950, + "bidPrice": 2153.2, + "askQty": 25, + "askPrice": 2192.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26350, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26350.00", + "oi": 345, + "oiChg": 88, + "oiPctChg": 34.24124513618677, + "totTradedVol": 268, + "iv": 15.61, + "ltp": 8.2, + "change": -0.7000000000000011, + "pChange": -7.865168539325855, + "totBuyQty": 35600, + "totSellQty": 4375, + "bidQty": 1200, + "bidPrice": 6.2, + "askQty": 350, + "askPrice": 9.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26350.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3975, + "totSellQty": 1950, + "bidQty": 250, + "bidPrice": 2164.65, + "askQty": 25, + "askPrice": 2268.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26400, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26400.00", + "oi": 3105, + "oiChg": -65, + "oiPctChg": -2.050473186119874, + "totTradedVol": 3913, + "iv": 15.38, + "ltp": 6.5, + "change": -1.8499999999999996, + "pChange": -22.15568862275449, + "totBuyQty": 41225, + "totSellQty": 7975, + "bidQty": 350, + "bidPrice": 6.4, + "askQty": 925, + "askPrice": 6.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26400.00", + "oi": 56, + "oiChg": 20, + "oiPctChg": 55.55555555555556, + "totTradedVol": 200, + "iv": 0, + "ltp": 1885, + "change": -65, + "pChange": -3.3333333333333335, + "totBuyQty": 6100, + "totSellQty": 5150, + "bidQty": 750, + "bidPrice": 2233.3, + "askQty": 100, + "askPrice": 2331.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26450, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26450.00", + "oi": 381, + "oiChg": 66, + "oiPctChg": 20.952380952380953, + "totTradedVol": 522, + "iv": 15.67, + "ltp": 6.65, + "change": -1.549999999999999, + "pChange": -18.902439024390233, + "totBuyQty": 26400, + "totSellQty": 8550, + "bidQty": 600, + "bidPrice": 6.55, + "askQty": 125, + "askPrice": 6.75 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26450.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3975, + "totSellQty": 3725, + "bidQty": 250, + "bidPrice": 2261, + "askQty": 25, + "askPrice": 2370.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26500, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26500.00", + "oi": 34729, + "oiChg": 623, + "oiPctChg": 1.8266580660294376, + "totTradedVol": 24256, + "iv": 15.8, + "ltp": 6.1, + "change": -1.7000000000000002, + "pChange": -21.7948717948718, + "totBuyQty": 44900, + "totSellQty": 62275, + "bidQty": 1500, + "bidPrice": 6.05, + "askQty": 975, + "askPrice": 6.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26500.00", + "oi": 8809, + "oiChg": 1179, + "oiPctChg": 15.4521625163827, + "totTradedVol": 1518, + "iv": 0, + "ltp": 2365.8, + "change": 322.2000000000003, + "pChange": 15.766294773928378, + "totBuyQty": 8600, + "totSellQty": 10100, + "bidQty": 50, + "bidPrice": 2364.5, + "askQty": 125, + "askPrice": 2370.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26550, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26550.00", + "oi": 257, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 5, + "iv": 16.5, + "ltp": 7.5, + "change": -0.8499999999999996, + "pChange": -10.17964071856287, + "totBuyQty": 30100, + "totSellQty": 7700, + "bidQty": 750, + "bidPrice": 5.1, + "askQty": 400, + "askPrice": 8.3 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26550.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 2359.4, + "askQty": 25, + "askPrice": 2473.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26600, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26600.00", + "oi": 2057, + "oiChg": -208, + "oiPctChg": -9.183222958057396, + "totTradedVol": 2250, + "iv": 16.25, + "ltp": 6, + "change": -1.75, + "pChange": -22.58064516129032, + "totBuyQty": 38950, + "totSellQty": 11025, + "bidQty": 350, + "bidPrice": 5.95, + "askQty": 475, + "askPrice": 6.05 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26600.00", + "oi": 899, + "oiChg": 56, + "oiPctChg": 6.6429418742586, + "totTradedVol": 89, + "iv": 0, + "ltp": 2325, + "change": 180, + "pChange": 8.391608391608392, + "totBuyQty": 4725, + "totSellQty": 4025, + "bidQty": 25, + "bidPrice": 2450.2, + "askQty": 25, + "askPrice": 2515.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26650, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26650.00", + "oi": 150, + "oiChg": -7, + "oiPctChg": -4.45859872611465, + "totTradedVol": 75, + "iv": 16.59, + "ltp": 6.05, + "change": -3.7, + "pChange": -37.948717948717956, + "totBuyQty": 24725, + "totSellQty": 9875, + "bidQty": 350, + "bidPrice": 6, + "askQty": 1550, + "askPrice": 6.25 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 2457.85, + "askQty": 25, + "askPrice": 2548.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26700, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26700.00", + "oi": 2288, + "oiChg": -88, + "oiPctChg": -3.7037037037037037, + "totTradedVol": 1337, + "iv": 16.54, + "ltp": 5.3, + "change": -1.8500000000000005, + "pChange": -25.87412587412588, + "totBuyQty": 40625, + "totSellQty": 12825, + "bidQty": 1050, + "bidPrice": 5.2, + "askQty": 125, + "askPrice": 5.3 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26700.00", + "oi": 1245, + "oiChg": 21, + "oiPctChg": 1.7156862745098038, + "totTradedVol": 25, + "iv": 0, + "ltp": 2500.35, + "change": 158.04999999999973, + "pChange": 6.7476412073602745, + "totBuyQty": 5200, + "totSellQty": 3750, + "bidQty": 300, + "bidPrice": 2546.9, + "askQty": 25, + "askPrice": 2584.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26750, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26750.00", + "oi": 233, + "oiChg": -16, + "oiPctChg": -6.42570281124498, + "totTradedVol": 268, + "iv": 16.94, + "ltp": 5.75, + "change": -1.6500000000000004, + "pChange": -22.2972972972973, + "totBuyQty": 25575, + "totSellQty": 7825, + "bidQty": 350, + "bidPrice": 5.75, + "askQty": 525, + "askPrice": 6 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 2556.35, + "askQty": 25, + "askPrice": 2652.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26800, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26800.00", + "oi": 932, + "oiChg": -7, + "oiPctChg": -0.7454739084132055, + "totTradedVol": 789, + "iv": 17.06, + "ltp": 5.4, + "change": -1.6999999999999993, + "pChange": -23.943661971830977, + "totBuyQty": 37650, + "totSellQty": 8325, + "bidQty": 275, + "bidPrice": 4.7, + "askQty": 475, + "askPrice": 5.55 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26800.00", + "oi": 84, + "oiChg": 82, + "oiPctChg": 4100, + "totTradedVol": 130, + "iv": 0, + "ltp": 2635, + "change": -491.8499999999999, + "pChange": -15.729887906359433, + "totBuyQty": 4075, + "totSellQty": 4125, + "bidQty": 125, + "bidPrice": 2649.85, + "askQty": 100, + "askPrice": 2691.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26850, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26850.00", + "oi": 134, + "oiChg": -49, + "oiPctChg": -26.775956284153004, + "totTradedVol": 312, + "iv": 17.38, + "ltp": 5.55, + "change": -1.2000000000000002, + "pChange": -17.777777777777782, + "totBuyQty": 22425, + "totSellQty": 6725, + "bidQty": 350, + "bidPrice": 5.6, + "askQty": 525, + "askPrice": 5.8 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 2654.9, + "askQty": 25, + "askPrice": 2753.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26900, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26900.00", + "oi": 1769, + "oiChg": -4, + "oiPctChg": -0.22560631697687536, + "totTradedVol": 2238, + "iv": 17.4, + "ltp": 4.9, + "change": -1.3499999999999996, + "pChange": -21.599999999999994, + "totBuyQty": 54250, + "totSellQty": 15950, + "bidQty": 1475, + "bidPrice": 4.9, + "askQty": 2225, + "askPrice": 5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26900.00", + "oi": 1602, + "oiChg": 1, + "oiPctChg": 0.06246096189881324, + "totTradedVol": 2, + "iv": 0, + "ltp": 2685.8, + "change": 145.05000000000018, + "pChange": 5.708944209386999, + "totBuyQty": 3900, + "totSellQty": 3825, + "bidQty": 25, + "bidPrice": 2747.15, + "askQty": 25, + "askPrice": 2795.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26950, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE26950.00", + "oi": 139, + "oiChg": 51, + "oiPctChg": 57.95454545454545, + "totTradedVol": 233, + "iv": 17.92, + "ltp": 5.6, + "change": -1.4000000000000004, + "pChange": -20.000000000000004, + "totBuyQty": 29500, + "totSellQty": 7350, + "bidQty": 125, + "bidPrice": 4.7, + "askQty": 100, + "askPrice": 6.95 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE26950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 2781.4, + "askQty": 25, + "askPrice": 2856.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27000.00", + "oi": 92787, + "oiChg": 3274, + "oiPctChg": 3.6575692916112743, + "totTradedVol": 21348, + "iv": 18.22, + "ltp": 5.55, + "change": -1.7999999999999998, + "pChange": -24.489795918367346, + "totBuyQty": 61175, + "totSellQty": 118125, + "bidQty": 3025, + "bidPrice": 5.55, + "askQty": 725, + "askPrice": 5.65 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27000.00", + "oi": 30832, + "oiChg": 2732, + "oiPctChg": 9.722419928825623, + "totTradedVol": 4979, + "iv": 0, + "ltp": 2874.35, + "change": 340.1500000000001, + "pChange": 13.422381816746906, + "totBuyQty": 8200, + "totSellQty": 11850, + "bidQty": 25, + "bidPrice": 2875.75, + "askQty": 50, + "askPrice": 2878.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27050, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27050.00", + "oi": 95, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 25300, + "totSellQty": 4300, + "bidQty": 1800, + "bidPrice": 4.1, + "askQty": 200, + "askPrice": 7.25 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27050.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 2852.2, + "askQty": 25, + "askPrice": 2958.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27100, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27100.00", + "oi": 234, + "oiChg": -69, + "oiPctChg": -22.77227722772277, + "totTradedVol": 324, + "iv": 18.62, + "ltp": 5.25, + "change": -1.2999999999999998, + "pChange": -19.847328244274806, + "totBuyQty": 43375, + "totSellQty": 10400, + "bidQty": 350, + "bidPrice": 5.25, + "askQty": 500, + "askPrice": 5.45 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27100.00", + "oi": 32, + "oiChg": 26, + "oiPctChg": 433.3333333333333, + "totTradedVol": 33, + "iv": 0, + "ltp": 2930.8, + "change": 180.80000000000018, + "pChange": 6.5745454545454605, + "totBuyQty": 3925, + "totSellQty": 3050, + "bidQty": 200, + "bidPrice": 2906.1, + "askQty": 25, + "askPrice": 3005.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27150, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27150.00", + "oi": 99, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 22775, + "totSellQty": 3400, + "bidQty": 900, + "bidPrice": 4.15, + "askQty": 600, + "askPrice": 7.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 2951.15, + "askQty": 25, + "askPrice": 3060.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27200, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27200.00", + "oi": 175, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 49, + "iv": 19.03, + "ltp": 5.25, + "change": -1.6500000000000004, + "pChange": -23.913043478260875, + "totBuyQty": 25175, + "totSellQty": 5925, + "bidQty": 350, + "bidPrice": 5.1, + "askQty": 525, + "askPrice": 5.3 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27200.00", + "oi": 25, + "oiChg": 6, + "oiPctChg": 31.57894736842105, + "totTradedVol": 22, + "iv": 0, + "ltp": 3038, + "change": 313, + "pChange": 11.486238532110091, + "totBuyQty": 4200, + "totSellQty": 4200, + "bidQty": 250, + "bidPrice": 3033.35, + "askQty": 250, + "askPrice": 3084.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27250, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27250.00", + "oi": 26, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 21625, + "totSellQty": 2750, + "bidQty": 900, + "bidPrice": 3.65, + "askQty": 600, + "askPrice": 8 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3049.75, + "askQty": 25, + "askPrice": 3163.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27300, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27300.00", + "oi": 281, + "oiChg": 6, + "oiPctChg": 2.1818181818181817, + "totTradedVol": 69, + "iv": 19.81, + "ltp": 5.85, + "change": -2.0500000000000007, + "pChange": -25.9493670886076, + "totBuyQty": 23675, + "totSellQty": 5025, + "bidQty": 200, + "bidPrice": 3.8, + "askQty": 75, + "askPrice": 6.45 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27300.00", + "oi": 5, + "oiChg": 2, + "oiPctChg": 66.66666666666667, + "totTradedVol": 6, + "iv": 0, + "ltp": 3110, + "change": 305, + "pChange": 10.87344028520499, + "totBuyQty": 3725, + "totSellQty": 3725, + "bidQty": 25, + "bidPrice": 3094.75, + "askQty": 25, + "askPrice": 3209.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27350, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27350.00", + "oi": 11, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 15125, + "totSellQty": 3050, + "bidQty": 750, + "bidPrice": 3.65, + "askQty": 100, + "askPrice": 7.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3148.4, + "askQty": 25, + "askPrice": 3265.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27400, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27400.00", + "oi": 163, + "oiChg": 1, + "oiPctChg": 0.6172839506172839, + "totTradedVol": 3, + "iv": 20.22, + "ltp": 5.65, + "change": -0.2999999999999998, + "pChange": -5.042016806722685, + "totBuyQty": 29375, + "totSellQty": 8225, + "bidQty": 900, + "bidPrice": 3.7, + "askQty": 25, + "askPrice": 7 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27400.00", + "oi": 20, + "oiChg": 14, + "oiPctChg": 233.33333333333334, + "totTradedVol": 15, + "iv": 0, + "ltp": 3150, + "change": 174, + "pChange": 5.846774193548387, + "totBuyQty": 3750, + "totSellQty": 3750, + "bidQty": 25, + "bidPrice": 3192.05, + "askQty": 25, + "askPrice": 3310.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27450, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27450.00", + "oi": 30, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 19825, + "totSellQty": 2850, + "bidQty": 900, + "bidPrice": 3.1, + "askQty": 600, + "askPrice": 7.35 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3210.95, + "askQty": 25, + "askPrice": 3369.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27500, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27500.00", + "oi": 6760, + "oiChg": 340, + "oiPctChg": 5.29595015576324, + "totTradedVol": 4206, + "iv": 20.04, + "ltp": 4.35, + "change": -1.4500000000000002, + "pChange": -25.000000000000007, + "totBuyQty": 68950, + "totSellQty": 22925, + "bidQty": 1025, + "bidPrice": 4.35, + "askQty": 1200, + "askPrice": 4.4 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27500.00", + "oi": 3674, + "oiChg": 818, + "oiPctChg": 28.641456582633054, + "totTradedVol": 928, + "iv": 0, + "ltp": 3330.25, + "change": 304, + "pChange": 10.045435770342834, + "totBuyQty": 5175, + "totSellQty": 5025, + "bidQty": 50, + "bidPrice": 3350.2, + "askQty": 100, + "askPrice": 3372.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27550, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27550.00", + "oi": 73, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 19600, + "totSellQty": 3025, + "bidQty": 600, + "bidPrice": 3.25, + "askQty": 100, + "askPrice": 6.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3308.6, + "askQty": 25, + "askPrice": 3471.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27600, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27600.00", + "oi": 37, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 21.28, + "ltp": 5.8, + "change": 0, + "pChange": 0, + "totBuyQty": 21100, + "totSellQty": 4675, + "bidQty": 25, + "bidPrice": 3.7, + "askQty": 100, + "askPrice": 6.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27600.00", + "oi": 24, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 3, + "iv": 0, + "ltp": 3380, + "change": 255, + "pChange": 8.16, + "totBuyQty": 3725, + "totSellQty": 2825, + "bidQty": 25, + "bidPrice": 3353, + "askQty": 25, + "askPrice": 3516.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27650, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27650.00", + "oi": 64, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 80150, + "totSellQty": 3600, + "bidQty": 600, + "bidPrice": 3.1, + "askQty": 100, + "askPrice": 6.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3406.3, + "askQty": 25, + "askPrice": 3574.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27700, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27700.00", + "oi": 191, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 30300, + "totSellQty": 6875, + "bidQty": 925, + "bidPrice": 4.1, + "askQty": 100, + "askPrice": 6.15 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3454.9, + "askQty": 25, + "askPrice": 3624.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27750, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27750.00", + "oi": 70, + "oiChg": 16, + "oiPctChg": 29.62962962962963, + "totTradedVol": 208, + "iv": 21.23, + "ltp": 4.3, + "change": -1.7000000000000002, + "pChange": -28.33333333333334, + "totBuyQty": 23000, + "totSellQty": 9550, + "bidQty": 475, + "bidPrice": 4.2, + "askQty": 100, + "askPrice": 4.3 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3503.8, + "askQty": 25, + "askPrice": 3675.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27800, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27800.00", + "oi": 137, + "oiChg": 1, + "oiPctChg": 0.7352941176470589, + "totTradedVol": 5, + "iv": 22.26, + "ltp": 5.8, + "change": 0, + "pChange": 0, + "totBuyQty": 28300, + "totSellQty": 7875, + "bidQty": 100, + "bidPrice": 3.55, + "askQty": 1200, + "askPrice": 5.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 0, + "ltp": 3530, + "change": 2014.65, + "pChange": 132.94948361764608, + "totBuyQty": 3725, + "totSellQty": 3725, + "bidQty": 25, + "bidPrice": 3552.4, + "askQty": 25, + "askPrice": 3726.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27850, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27850.00", + "oi": 274, + "oiChg": 70, + "oiPctChg": 34.31372549019608, + "totTradedVol": 253, + "iv": 21.68, + "ltp": 4.3, + "change": -1.25, + "pChange": -22.52252252252252, + "totBuyQty": 15500, + "totSellQty": 6250, + "bidQty": 1250, + "bidPrice": 4, + "askQty": 100, + "askPrice": 7.1 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3601.7, + "askQty": 25, + "askPrice": 3777.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27900, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27900.00", + "oi": 272, + "oiChg": 97, + "oiPctChg": 55.42857142857143, + "totTradedVol": 494, + "iv": 21.75, + "ltp": 4, + "change": -1.4500000000000002, + "pChange": -26.605504587155966, + "totBuyQty": 180200, + "totSellQty": 7250, + "bidQty": 350, + "bidPrice": 4.05, + "askQty": 525, + "askPrice": 4.2 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 3650.3, + "askQty": 25, + "askPrice": 3828.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27950, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE27950.00", + "oi": 362, + "oiChg": 55, + "oiPctChg": 17.91530944625407, + "totTradedVol": 355, + "iv": 21.99, + "ltp": 4.05, + "change": -1.2000000000000002, + "pChange": -22.857142857142858, + "totBuyQty": 23375, + "totSellQty": 6575, + "bidQty": 1800, + "bidPrice": 3.9, + "askQty": 100, + "askPrice": 4.2 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE27950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3725, + "totSellQty": 2150, + "bidQty": 25, + "bidPrice": 3699.3, + "askQty": 25, + "askPrice": 3880 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 28000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE28000.00", + "oi": 35873, + "oiChg": 1095, + "oiPctChg": 3.1485421818390935, + "totTradedVol": 11254, + "iv": 21.95, + "ltp": 3.8, + "change": -1.0499999999999998, + "pChange": -21.649484536082472, + "totBuyQty": 63525, + "totSellQty": 24325, + "bidQty": 1350, + "bidPrice": 3.8, + "askQty": 600, + "askPrice": 3.9 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE28000.00", + "oi": 11260, + "oiChg": 439, + "oiPctChg": 4.05692634691803, + "totTradedVol": 670, + "iv": 0, + "ltp": 3851.8, + "change": 325.10000000000036, + "pChange": 9.218249354921042, + "totBuyQty": 7025, + "totSellQty": 5850, + "bidQty": 25, + "bidPrice": 3853, + "askQty": 250, + "askPrice": 3866.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 29000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE29000.00", + "oi": 31555, + "oiChg": 5134, + "oiPctChg": 19.43151281177851, + "totTradedVol": 14983, + "iv": 26.2, + "ltp": 3.55, + "change": -0.10000000000000009, + "pChange": -2.739726027397263, + "totBuyQty": 72275, + "totSellQty": 87625, + "bidQty": 1000, + "bidPrice": 3.55, + "askQty": 1775, + "askPrice": 3.6 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE29000.00", + "oi": 21327, + "oiChg": 95, + "oiPctChg": 0.4474378296910324, + "totTradedVol": 160, + "iv": 0, + "ltp": 4840, + "change": 318.60000000000036, + "pChange": 7.046490025213438, + "totBuyQty": 7450, + "totSellQty": 5075, + "bidQty": 100, + "bidPrice": 4836.5, + "askQty": 25, + "askPrice": 4862.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 30000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE30000.00", + "oi": 32063, + "oiChg": 5430, + "oiPctChg": 20.388240153193408, + "totTradedVol": 10526, + "iv": 30.3, + "ltp": 3.5, + "change": -0.04999999999999982, + "pChange": -1.4084507042253471, + "totBuyQty": 58100, + "totSellQty": 53850, + "bidQty": 750, + "bidPrice": 3.35, + "askQty": 1625, + "askPrice": 3.5 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE30000.00", + "oi": 1038, + "oiChg": 13, + "oiPctChg": 1.2682926829268293, + "totTradedVol": 27, + "iv": 0, + "ltp": 5783.3, + "change": 276, + "pChange": 5.011530150890636, + "totBuyQty": 6175, + "totSellQty": 3900, + "bidQty": 25, + "bidPrice": 5794.95, + "askQty": 25, + "askPrice": 5842.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 31000, + "expiry": "26-Dec-2024", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-12-2024CE31000.00", + "oi": 20298, + "oiChg": 5620, + "oiPctChg": 38.28859517645456, + "totTradedVol": 13005, + "iv": 34.17, + "ltp": 3.4, + "change": -0.1499999999999999, + "pChange": -4.225352112676054, + "totBuyQty": 65175, + "totSellQty": 54925, + "bidQty": 350, + "bidPrice": 3.25, + "askQty": 525, + "askPrice": 3.4 + }, + "pe": { + "id": "OPTIDXNIFTY26-12-2024PE31000.00", + "oi": 2361, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2825, + "totSellQty": 425, + "bidQty": 25, + "bidPrice": 6675.9, + "askQty": 375, + "askPrice": 6970.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21600, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE21600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 15375, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 4.2, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21650, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE21650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3300, + "totSellQty": 0, + "bidQty": 150, + "bidPrice": 6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21700, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE21700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4650, + "totSellQty": 75, + "bidQty": 75, + "bidPrice": 7.1, + "askQty": 75, + "askPrice": 20.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21750, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE21750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6900, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 4.75, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21800, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE21800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5925, + "totSellQty": 0, + "bidQty": 150, + "bidPrice": 6.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21850, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE21850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7650, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 4.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21900, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE21900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7725, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 4.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21950, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE21950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6150, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 4.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9375, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 4.7, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22050, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7725, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 4.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22100, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 11025, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 5.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22150, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6150, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 4.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22200, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22200.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6900, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 7.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22250, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7875, + "totSellQty": 0, + "bidQty": 150, + "bidPrice": 6.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22300, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22300.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9750, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 6.75, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22350, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6900, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22400, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22400.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9825, + "totSellQty": 0, + "bidQty": 75, + "bidPrice": 6.85, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22450, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7650, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 7, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22500, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22500.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6375, + "totSellQty": 0, + "bidQty": 75, + "bidPrice": 12.8, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22550, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6150, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 8.9, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22600, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7425, + "totSellQty": 0, + "bidQty": 75, + "bidPrice": 10.65, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22650, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6150, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 9.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22700, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8100, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 10.6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22750, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1650, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22800, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4275, + "totSellQty": 0, + "bidQty": 900, + "bidPrice": 11.15, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22850, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1725, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 6.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22900, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3675, + "totSellQty": 0, + "bidQty": 900, + "bidPrice": 9.15, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22950, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE22950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1650, + "totSellQty": 0, + "bidQty": 600, + "bidPrice": 8.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5100, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 85, + "askQty": 900, + "askPrice": 107.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23050, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1275, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 10.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23100, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2925, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 11.05, + "askQty": 900, + "askPrice": 121.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23150, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1275, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 11.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23200, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23200.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2775, + "totSellQty": 900, + "bidQty": 750, + "bidPrice": 12.1, + "askQty": 900, + "askPrice": 136.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23250, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23250.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1575, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 20.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23300, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23300.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3450, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 15.8, + "askQty": 900, + "askPrice": 152 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23350, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23350.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2100, + "totSellQty": 900, + "bidQty": 525, + "bidPrice": 17.05, + "askQty": 900, + "askPrice": 165.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23400, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23400.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3000, + "totSellQty": 900, + "bidQty": 375, + "bidPrice": 17.15, + "askQty": 900, + "askPrice": 174 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23450, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23450.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1275, + "totSellQty": 900, + "bidQty": 300, + "bidPrice": 20.1, + "askQty": 900, + "askPrice": 185.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23500, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23500.00", + "oi": 52, + "oiChg": 13, + "oiPctChg": 33.333333333333336, + "totTradedVol": 28, + "iv": 14.42, + "ltp": 169.25, + "change": 62.599999999999994, + "pChange": 58.6966713548992, + "totBuyQty": 2775, + "totSellQty": 1950, + "bidQty": 375, + "bidPrice": 175.45, + "askQty": 75, + "askPrice": 190.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23550, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23550.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 975, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 5.15, + "askQty": 900, + "askPrice": 209.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23600, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23600.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2025, + "totSellQty": 0, + "bidQty": 150, + "bidPrice": 205.7, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23650, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 975, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 0.15, + "askQty": 900, + "askPrice": 235 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23700, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE23700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23700.00", + "oi": 11, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 975, + "totSellQty": 75, + "bidQty": 900, + "bidPrice": 0.15, + "askQty": 75, + "askPrice": 244.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23750, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 75, + "totSellQty": 825, + "bidQty": 75, + "bidPrice": 0.1, + "askQty": 825, + "askPrice": 266.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23800, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE23800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 225, + "bidQty": 0, + "bidPrice": 0, + "askQty": 225, + "askPrice": 634.4 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 80.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23850, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE23850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 900, + "totSellQty": 225, + "bidQty": 900, + "bidPrice": 573.05, + "askQty": 225, + "askPrice": 606.25 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 975, + "totSellQty": 0, + "bidQty": 900, + "bidPrice": 0.15, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23900, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE23900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 600, + "totSellQty": 900, + "bidQty": 525, + "bidPrice": 0.15, + "askQty": 900, + "askPrice": 318.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23950, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE23950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 225, + "totSellQty": 225, + "bidQty": 225, + "bidPrice": 508.05, + "askQty": 225, + "askPrice": 540.45 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE23950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24000.00", + "oi": 15, + "oiChg": 1, + "oiPctChg": 7.142857142857143, + "totTradedVol": 7, + "iv": 15.34, + "ltp": 541.5, + "change": -140.70000000000005, + "pChange": -20.624450307827622, + "totBuyQty": 450, + "totSellQty": 375, + "bidQty": 150, + "bidPrice": 482.15, + "askQty": 150, + "askPrice": 501.1 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24000.00", + "oi": 34, + "oiChg": 2, + "oiPctChg": 6.25, + "totTradedVol": 22, + "iv": 13.39, + "ltp": 316.05, + "change": 111.05000000000001, + "pChange": 54.170731707317074, + "totBuyQty": 1425, + "totSellQty": 1425, + "bidQty": 150, + "bidPrice": 254.15, + "askQty": 300, + "askPrice": 356.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24050, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 225, + "bidQty": 0, + "bidPrice": 0, + "askQty": 225, + "askPrice": 484.4 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24050.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 975, + "totSellQty": 975, + "bidQty": 900, + "bidPrice": 35.05, + "askQty": 75, + "askPrice": 378.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24100, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 525, + "bidQty": 0, + "bidPrice": 0, + "askQty": 300, + "askPrice": 455.5 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24150, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24150.00", + "oi": 1, + "oiChg": 1, + "oiPctChg": 0, + "totTradedVol": 4, + "iv": 15.9, + "ltp": 480, + "change": 208.75, + "pChange": 76.95852534562212, + "totBuyQty": 2175, + "totSellQty": 225, + "bidQty": 75, + "bidPrice": 107.4, + "askQty": 225, + "askPrice": 428.3 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 225, + "totSellQty": 0, + "bidQty": 225, + "bidPrice": 397.65, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24200, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24200.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 825, + "bidQty": 0, + "bidPrice": 0, + "askQty": 300, + "askPrice": 401.05 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24200.00", + "oi": 29, + "oiChg": -1, + "oiPctChg": -3.3333333333333335, + "totTradedVol": 2, + "iv": 12.31, + "ltp": 379.25, + "change": 76.05000000000001, + "pChange": 25.082453825857527, + "totBuyQty": 300, + "totSellQty": 375, + "bidQty": 225, + "bidPrice": 420.7, + "askQty": 75, + "askPrice": 445.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24250, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24250.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 5, + "iv": 19.52, + "ltp": 539.5, + "change": -5, + "pChange": -0.9182736455463728, + "totBuyQty": 3900, + "totSellQty": 0, + "bidQty": 225, + "bidPrice": 26.95, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24300, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24300.00", + "oi": 19, + "oiChg": 17, + "oiPctChg": 850, + "totTradedVol": 21, + "iv": 14.34, + "ltp": 364, + "change": -137.85000000000002, + "pChange": -27.46836704194481, + "totBuyQty": 5700, + "totSellQty": 600, + "bidQty": 75, + "bidPrice": 325.65, + "askQty": 75, + "askPrice": 351.65 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24300.00", + "oi": 2, + "oiChg": -1, + "oiPctChg": -33.333333333333336, + "totTradedVol": 9, + "iv": 11.7, + "ltp": 415, + "change": 97.69999999999999, + "pChange": 30.791049479987386, + "totBuyQty": 150, + "totSellQty": 450, + "bidQty": 75, + "bidPrice": 461.3, + "askQty": 75, + "askPrice": 519.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24350, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24350.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6375, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 11.05, + "askQty": 900, + "askPrice": 329.3 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24400, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24400.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5400, + "totSellQty": 900, + "bidQty": 1800, + "bidPrice": 10.1, + "askQty": 900, + "askPrice": 305.95 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24400.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24450, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6300, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 10.15, + "askQty": 900, + "askPrice": 285.95 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24500, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24500.00", + "oi": 36, + "oiChg": 30, + "oiPctChg": 500, + "totTradedVol": 54, + "iv": 13.76, + "ltp": 260.3, + "change": -124.69999999999999, + "pChange": -32.38961038961038, + "totBuyQty": 5850, + "totSellQty": 2550, + "bidQty": 150, + "bidPrice": 240.15, + "askQty": 75, + "askPrice": 259.45 + }, + "pe": { + "id": "OPTIDXNIFTY02-01-2025PE24500.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24550, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6000, + "totSellQty": 0, + "bidQty": 600, + "bidPrice": 10.15, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24600, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24600.00", + "oi": 2, + "oiChg": -1, + "oiPctChg": -33.333333333333336, + "totTradedVol": 16, + "iv": 13.47, + "ltp": 224.35, + "change": -105.50000000000003, + "pChange": -31.984235258450816, + "totBuyQty": 5925, + "totSellQty": 975, + "bidQty": 150, + "bidPrice": 202.05, + "askQty": 75, + "askPrice": 228.35 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24650, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6300, + "totSellQty": 825, + "bidQty": 900, + "bidPrice": 10.15, + "askQty": 825, + "askPrice": 210.9 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24700, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5550, + "totSellQty": 0, + "bidQty": 75, + "bidPrice": 40, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24750, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24750.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 13.82, + "ltp": 188.4, + "change": 0, + "pChange": 0, + "totBuyQty": 6375, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 55.1, + "askQty": 900, + "askPrice": 181.1 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24800, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5400, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 10.1, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24850, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5400, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 10.1, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24900, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6900, + "totSellQty": 0, + "bidQty": 900, + "bidPrice": 11.15, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24950, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE24950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5400, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 10.1, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25000.00", + "oi": 157, + "oiChg": 112, + "oiPctChg": 248.88888888888889, + "totTradedVol": 188, + "iv": 13.09, + "ltp": 111.7, + "change": -43.45, + "pChange": -28.005156300354493, + "totBuyQty": 12225, + "totSellQty": 2175, + "bidQty": 75, + "bidPrice": 106.05, + "askQty": 150, + "askPrice": 111.55 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25050, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 12.97, + "ltp": 100, + "change": 14.75, + "pChange": 17.302052785923756, + "totBuyQty": 7575, + "totSellQty": 75, + "bidQty": 300, + "bidPrice": 16.1, + "askQty": 75, + "askPrice": 120 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25100, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25100.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 17550, + "totSellQty": 1200, + "bidQty": 900, + "bidPrice": 21.05, + "askQty": 900, + "askPrice": 171.85 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25150, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2175, + "totSellQty": 0, + "bidQty": 375, + "bidPrice": 18.1, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25200, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25200.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8025, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 16.5, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25250, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6075, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 14.1, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25300, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25300.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 7500, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 16.55, + "askQty": 900, + "askPrice": 73.25 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25350, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5325, + "totSellQty": 300, + "bidQty": 750, + "bidPrice": 16, + "askQty": 300, + "askPrice": 200 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25400, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25400.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8400, + "totSellQty": 900, + "bidQty": 900, + "bidPrice": 17.55, + "askQty": 900, + "askPrice": 61.75 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25450, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25450.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 5475, + "totSellQty": 450, + "bidQty": 150, + "bidPrice": 15, + "askQty": 150, + "askPrice": 160 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25500, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25500.00", + "oi": 4, + "oiChg": 4, + "oiPctChg": 0, + "totTradedVol": 6, + "iv": 13.6, + "ltp": 50, + "change": 6.799999999999997, + "pChange": 15.740740740740733, + "totBuyQty": 14775, + "totSellQty": 1800, + "bidQty": 900, + "bidPrice": 21.55, + "askQty": 900, + "askPrice": 67.85 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25550, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 10050, + "totSellQty": 1425, + "bidQty": 750, + "bidPrice": 12, + "askQty": 75, + "askPrice": 67 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25600, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25600.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 10350, + "totSellQty": 1725, + "bidQty": 300, + "bidPrice": 13.05, + "askQty": 75, + "askPrice": 62 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25650, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25650.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9150, + "totSellQty": 1800, + "bidQty": 750, + "bidPrice": 12, + "askQty": 75, + "askPrice": 62 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25700, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8325, + "totSellQty": 1650, + "bidQty": 75, + "bidPrice": 12.15, + "askQty": 75, + "askPrice": 59.6 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25750, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25750.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9900, + "totSellQty": 1500, + "bidQty": 300, + "bidPrice": 11.75, + "askQty": 75, + "askPrice": 56.95 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25800, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8925, + "totSellQty": 2100, + "bidQty": 75, + "bidPrice": 13.15, + "askQty": 75, + "askPrice": 56.95 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25850, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6300, + "totSellQty": 2400, + "bidQty": 750, + "bidPrice": 9, + "askQty": 75, + "askPrice": 49.95 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25900, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25900.00", + "oi": 20, + "oiChg": 18, + "oiPctChg": 900, + "totTradedVol": 32, + "iv": 13.07, + "ltp": 18, + "change": -23.75, + "pChange": -56.886227544910184, + "totBuyQty": 11700, + "totSellQty": 3450, + "bidQty": 75, + "bidPrice": 16.2, + "askQty": 75, + "askPrice": 19.85 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25950, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE25950.00", + "oi": 26, + "oiChg": 9, + "oiPctChg": 52.94117647058823, + "totTradedVol": 18, + "iv": 13.15, + "ltp": 16.55, + "change": -9.2, + "pChange": -35.728155339805824, + "totBuyQty": 11175, + "totSellQty": 2700, + "bidQty": 225, + "bidPrice": 16.55, + "askQty": 300, + "askPrice": 30.5 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "02-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY02-01-2025CE26000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9225, + "totSellQty": 1800, + "bidQty": 75, + "bidPrice": 19.6, + "askQty": 150, + "askPrice": 27.7 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21600, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE21600.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 19.5, + "ltp": 2765, + "change": -225, + "pChange": -7.5250836120401345, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 2612.75, + "askQty": 25, + "askPrice": 2816.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE21600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4175, + "totSellQty": 0, + "bidQty": 500, + "bidPrice": 12.8, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21650, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE21650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 2561.75, + "askQty": 25, + "askPrice": 2760.35 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE21650.00", + "oi": 519, + "oiChg": -2, + "oiPctChg": -0.3838771593090211, + "totTradedVol": 12, + "iv": 17.36, + "ltp": 35, + "change": -7.5, + "pChange": -17.647058823529413, + "totBuyQty": 7725, + "totSellQty": 0, + "bidQty": 25, + "bidPrice": 31, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21700, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE21700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 2517.1, + "askQty": 25, + "askPrice": 2711.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE21700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 6200, + "totSellQty": 0, + "bidQty": 500, + "bidPrice": 20.75, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21750, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE21750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 2472.35, + "askQty": 25, + "askPrice": 2663.75 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE21750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1375, + "totSellQty": 0, + "bidQty": 100, + "bidPrice": 15.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21800, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE21800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 2426.2, + "askQty": 25, + "askPrice": 2613.9 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE21800.00", + "oi": 3034, + "oiChg": 122, + "oiPctChg": 4.18956043956044, + "totTradedVol": 451, + "iv": 17.51, + "ltp": 47.8, + "change": 14.949999999999996, + "pChange": 45.50989345509892, + "totBuyQty": 3725, + "totSellQty": 4800, + "bidQty": 100, + "bidPrice": 45, + "askQty": 525, + "askPrice": 47.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21850, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE21850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 2384.5, + "askQty": 25, + "askPrice": 2566.65 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE21850.00", + "oi": 81, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1175, + "totSellQty": 0, + "bidQty": 50, + "bidPrice": 18.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21900, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE21900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 2339.6, + "askQty": 25, + "askPrice": 2517.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE21900.00", + "oi": 1254, + "oiChg": 41, + "oiPctChg": 3.3800494641384997, + "totTradedVol": 200, + "iv": 17.14, + "ltp": 48.15, + "change": 10.699999999999996, + "pChange": 28.57142857142856, + "totBuyQty": 3175, + "totSellQty": 450, + "bidQty": 200, + "bidPrice": 46.5, + "askQty": 25, + "askPrice": 53.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21950, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE21950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 2296.4, + "askQty": 25, + "askPrice": 2396.9 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE21950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1750, + "totSellQty": 0, + "bidQty": 50, + "bidPrice": 23, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22000.00", + "oi": 535, + "oiChg": 17, + "oiPctChg": 3.281853281853282, + "totTradedVol": 49, + "iv": 0, + "ltp": 2294.4, + "change": -305.25, + "pChange": -11.741965264554842, + "totBuyQty": 3800, + "totSellQty": 3250, + "bidQty": 25, + "bidPrice": 2285, + "askQty": 100, + "askPrice": 2341.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22000.00", + "oi": 22214, + "oiChg": 1363, + "oiPctChg": 6.536856745479833, + "totTradedVol": 11871, + "iv": 17.35, + "ltp": 61.05, + "change": 16.849999999999994, + "pChange": 38.122171945701346, + "totBuyQty": 24100, + "totSellQty": 10750, + "bidQty": 25, + "bidPrice": 60.6, + "askQty": 400, + "askPrice": 61.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22050, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 2208.75, + "askQty": 25, + "askPrice": 2302.45 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 4400, + "totSellQty": 0, + "bidQty": 100, + "bidPrice": 43.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22100, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3175, + "totSellQty": 3175, + "bidQty": 25, + "bidPrice": 2164.75, + "askQty": 450, + "askPrice": 2287.55 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22100.00", + "oi": 1277, + "oiChg": 162, + "oiPctChg": 14.52914798206278, + "totTradedVol": 227, + "iv": 17.06, + "ltp": 63, + "change": 16.299999999999997, + "pChange": 34.90364025695931, + "totBuyQty": 2175, + "totSellQty": 1900, + "bidQty": 100, + "bidPrice": 48.35, + "askQty": 200, + "askPrice": 66 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22150, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1525, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 2121.3, + "askQty": 25, + "askPrice": 2211.15 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22150.00", + "oi": 592, + "oiChg": 23, + "oiPctChg": 4.042179261862917, + "totTradedVol": 252, + "iv": 16.82, + "ltp": 63.95, + "change": 2.0500000000000043, + "pChange": 3.3117932148626883, + "totBuyQty": 3075, + "totSellQty": 1875, + "bidQty": 125, + "bidPrice": 65.85, + "askQty": 525, + "askPrice": 69.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22200, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22200.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3175, + "totSellQty": 3175, + "bidQty": 25, + "bidPrice": 2073.7, + "askQty": 25, + "askPrice": 2162.05 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22200.00", + "oi": 2084, + "oiChg": 314, + "oiPctChg": 17.740112994350284, + "totTradedVol": 988, + "iv": 16.53, + "ltp": 70, + "change": 21.75, + "pChange": 45.07772020725388, + "totBuyQty": 5175, + "totSellQty": 2250, + "bidQty": 125, + "bidPrice": 68.35, + "askQty": 50, + "askPrice": 71.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22250, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22250.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 2032.8, + "askQty": 25, + "askPrice": 2118.15 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22250.00", + "oi": 66, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1175, + "totSellQty": 0, + "bidQty": 75, + "bidPrice": 21, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22300, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22300.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3175, + "totSellQty": 3175, + "bidQty": 25, + "bidPrice": 1988.25, + "askQty": 25, + "askPrice": 2073.35 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22300.00", + "oi": 4057, + "oiChg": 527, + "oiPctChg": 14.929178470254957, + "totTradedVol": 1007, + "iv": 16.3, + "ltp": 77.5, + "change": 25.15, + "pChange": 48.04202483285577, + "totBuyQty": 2625, + "totSellQty": 2025, + "bidQty": 50, + "bidPrice": 73.9, + "askQty": 525, + "askPrice": 77.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22350, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22350.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 1948.65, + "askQty": 25, + "askPrice": 2030.75 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22350.00", + "oi": 66, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1375, + "totSellQty": 25, + "bidQty": 50, + "bidPrice": 21.1, + "askQty": 25, + "askPrice": 77.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22400, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22400.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1903.2, + "askQty": 25, + "askPrice": 1982.55 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22400.00", + "oi": 4599, + "oiChg": 1058, + "oiPctChg": 29.878565377012144, + "totTradedVol": 2746, + "iv": 16.3, + "ltp": 83, + "change": 21.450000000000003, + "pChange": 34.849715678310325, + "totBuyQty": 3850, + "totSellQty": 2050, + "bidQty": 75, + "bidPrice": 82.5, + "askQty": 1800, + "askPrice": 85.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22450, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22450.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1625, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 1864.25, + "askQty": 25, + "askPrice": 1942.4 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22450.00", + "oi": 8, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1025, + "totSellQty": 0, + "bidQty": 125, + "bidPrice": 20.4, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22500, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22500.00", + "oi": 641, + "oiChg": 10, + "oiPctChg": 1.5847860538827259, + "totTradedVol": 20, + "iv": 12.02, + "ltp": 1852.2, + "change": -287.14999999999986, + "pChange": -13.422301166242075, + "totBuyQty": 4625, + "totSellQty": 3825, + "bidQty": 500, + "bidPrice": 1828.3, + "askQty": 50, + "askPrice": 1863.1 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22500.00", + "oi": 32866, + "oiChg": 5616, + "oiPctChg": 20.609174311926605, + "totTradedVol": 18425, + "iv": 16.42, + "ltp": 98.6, + "change": 30.799999999999997, + "pChange": 45.427728613569315, + "totBuyQty": 27750, + "totSellQty": 2675, + "bidQty": 400, + "bidPrice": 97.5, + "askQty": 200, + "askPrice": 98.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22550, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22550.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 1778.1, + "askQty": 25, + "askPrice": 1851.9 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22550.00", + "oi": 45, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1900, + "totSellQty": 25, + "bidQty": 100, + "bidPrice": 41.1, + "askQty": 25, + "askPrice": 111.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22600, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22600.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1736.3, + "askQty": 25, + "askPrice": 1806.5 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22600.00", + "oi": 3108, + "oiChg": 1173, + "oiPctChg": 60.62015503875969, + "totTradedVol": 2041, + "iv": 15.97, + "ltp": 102.95, + "change": 31.549999999999997, + "pChange": 44.18767507002801, + "totBuyQty": 4550, + "totSellQty": 2250, + "bidQty": 1800, + "bidPrice": 103.05, + "askQty": 1800, + "askPrice": 106.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22650, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22650.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 1694.3, + "askQty": 25, + "askPrice": 1785.35 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22650.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1525, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 91.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22700, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22700.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1626.25, + "askQty": 25, + "askPrice": 1719.25 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22700.00", + "oi": 4793, + "oiChg": 1174, + "oiPctChg": 32.439900525006905, + "totTradedVol": 4142, + "iv": 15.76, + "ltp": 113.65, + "change": 38.45, + "pChange": 51.130319148936174, + "totBuyQty": 30925, + "totSellQty": 3000, + "bidQty": 50, + "bidPrice": 113.05, + "askQty": 100, + "askPrice": 115.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22750, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22750.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 1588.4, + "askQty": 25, + "askPrice": 1676.2 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22750.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1550, + "totSellQty": 325, + "bidQty": 300, + "bidPrice": 101.25, + "askQty": 25, + "askPrice": 129.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22800, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22800.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1546.4, + "askQty": 25, + "askPrice": 1609.05 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22800.00", + "oi": 3267, + "oiChg": 883, + "oiPctChg": 37.038590604026844, + "totTradedVol": 1707, + "iv": 15.58, + "ltp": 126.2, + "change": 42.8, + "pChange": 51.318944844124694, + "totBuyQty": 5100, + "totSellQty": 2900, + "bidQty": 75, + "bidPrice": 124.3, + "askQty": 25, + "askPrice": 126.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22850, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22850.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1507.9, + "askQty": 25, + "askPrice": 1567.8 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22850.00", + "oi": 14, + "oiChg": 1, + "oiPctChg": 7.6923076923076925, + "totTradedVol": 12, + "iv": 15.44, + "ltp": 125, + "change": 16.25, + "pChange": 14.942528735632186, + "totBuyQty": 1650, + "totSellQty": 625, + "bidQty": 300, + "bidPrice": 119.6, + "askQty": 25, + "askPrice": 146.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22900, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22900.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1467.95, + "askQty": 25, + "askPrice": 1527.2 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22900.00", + "oi": 2195, + "oiChg": 658, + "oiPctChg": 42.810670136629795, + "totTradedVol": 1335, + "iv": 15.5, + "ltp": 141.75, + "change": 47.650000000000006, + "pChange": 50.637619553666326, + "totBuyQty": 7275, + "totSellQty": 5400, + "bidQty": 50, + "bidPrice": 139.45, + "askQty": 50, + "askPrice": 142.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22950, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE22950.00", + "oi": 9, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 1825, + "bidQty": 25, + "bidPrice": 1428.75, + "askQty": 25, + "askPrice": 1486 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE22950.00", + "oi": 76, + "oiChg": 1, + "oiPctChg": 1.3333333333333333, + "totTradedVol": 13, + "iv": 15.32, + "ltp": 139.3, + "change": 22.000000000000014, + "pChange": 18.755328218243832, + "totBuyQty": 3325, + "totSellQty": 2400, + "bidQty": 1800, + "bidPrice": 146.9, + "askQty": 1800, + "askPrice": 151.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23000.00", + "oi": 3523, + "oiChg": -266, + "oiPctChg": -7.020321984692531, + "totTradedVol": 1751, + "iv": 13.95, + "ltp": 1422.45, + "change": -257.89999999999986, + "pChange": -15.347992977653458, + "totBuyQty": 4325, + "totSellQty": 8750, + "bidQty": 50, + "bidPrice": 1414.7, + "askQty": 50, + "askPrice": 1424.2 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23000.00", + "oi": 46283, + "oiChg": 4028, + "oiPctChg": 9.532599692344101, + "totTradedVol": 20777, + "iv": 15.47, + "ltp": 159.3, + "change": 52.20000000000002, + "pChange": 48.739495798319346, + "totBuyQty": 15525, + "totSellQty": 13975, + "bidQty": 400, + "bidPrice": 159.2, + "askQty": 25, + "askPrice": 160.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23050, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23050.00", + "oi": 10, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1350.6, + "askQty": 25, + "askPrice": 1421.05 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23050.00", + "oi": 145, + "oiChg": 94, + "oiPctChg": 184.31372549019608, + "totTradedVol": 123, + "iv": 15.19, + "ltp": 154.85, + "change": 45.39999999999999, + "pChange": 41.48012791228871, + "totBuyQty": 6200, + "totSellQty": 2400, + "bidQty": 1800, + "bidPrice": 163, + "askQty": 1800, + "askPrice": 166.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23100, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23100.00", + "oi": 7, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 12.92, + "ltp": 1342, + "change": -230, + "pChange": -14.631043256997456, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1313.05, + "askQty": 25, + "askPrice": 1385.2 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23100.00", + "oi": 822, + "oiChg": 123, + "oiPctChg": 17.59656652360515, + "totTradedVol": 1043, + "iv": 15.14, + "ltp": 172.95, + "change": 56.19999999999999, + "pChange": 48.13704496788008, + "totBuyQty": 3625, + "totSellQty": 4525, + "bidQty": 25, + "bidPrice": 171.35, + "askQty": 75, + "askPrice": 173.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23150, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23150.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 1575, + "bidQty": 25, + "bidPrice": 1275.3, + "askQty": 25, + "askPrice": 1341.25 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23150.00", + "oi": 199, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 650, + "totSellQty": 625, + "bidQty": 25, + "bidPrice": 164.5, + "askQty": 25, + "askPrice": 190.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23200, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23200.00", + "oi": 38, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2775, + "bidQty": 25, + "bidPrice": 1235.9, + "askQty": 25, + "askPrice": 1292.35 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23200.00", + "oi": 1345, + "oiChg": 191, + "oiPctChg": 16.55112651646447, + "totTradedVol": 1373, + "iv": 15.03, + "ltp": 189.35, + "change": 63.19999999999999, + "pChange": 50.09908838684105, + "totBuyQty": 3725, + "totSellQty": 3825, + "bidQty": 50, + "bidPrice": 190.55, + "askQty": 25, + "askPrice": 192.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23250, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23250.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1197, + "askQty": 25, + "askPrice": 1238.1 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23250.00", + "oi": 811, + "oiChg": -14, + "oiPctChg": -1.696969696969697, + "totTradedVol": 297, + "iv": 14.94, + "ltp": 195.7, + "change": 32.54999999999998, + "pChange": 19.95096536929205, + "totBuyQty": 1925, + "totSellQty": 28800, + "bidQty": 25, + "bidPrice": 201.55, + "askQty": 1800, + "askPrice": 203.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23300, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23300.00", + "oi": 464, + "oiChg": -244, + "oiPctChg": -34.463276836158194, + "totTradedVol": 364, + "iv": 14.2, + "ltp": 1219.15, + "change": -260.8499999999999, + "pChange": -17.624999999999993, + "totBuyQty": 1175, + "totSellQty": 3275, + "bidQty": 25, + "bidPrice": 1162.6, + "askQty": 225, + "askPrice": 1193.9 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23300.00", + "oi": 1485, + "oiChg": 263, + "oiPctChg": 21.522094926350245, + "totTradedVol": 1823, + "iv": 14.88, + "ltp": 213, + "change": 72.1, + "pChange": 51.17104329311568, + "totBuyQty": 34200, + "totSellQty": 6925, + "bidQty": 75, + "bidPrice": 210.95, + "askQty": 50, + "askPrice": 213 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23350, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23350.00", + "oi": 90, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 4, + "iv": 12.44, + "ltp": 1130.6, + "change": -174.75, + "pChange": -13.387214157122612, + "totBuyQty": 950, + "totSellQty": 2725, + "bidQty": 25, + "bidPrice": 1124.9, + "askQty": 25, + "askPrice": 1152.4 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23350.00", + "oi": 178, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 775, + "totSellQty": 650, + "bidQty": 300, + "bidPrice": 193.05, + "askQty": 25, + "askPrice": 238.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23400, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23400.00", + "oi": 453, + "oiChg": -2, + "oiPctChg": -0.43956043956043955, + "totTradedVol": 18, + "iv": 12.96, + "ltp": 1107.5, + "change": -269.54999999999995, + "pChange": -19.57445263425438, + "totBuyQty": 2550, + "totSellQty": 3125, + "bidQty": 50, + "bidPrice": 1087.9, + "askQty": 25, + "askPrice": 1115.65 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23400.00", + "oi": 1070, + "oiChg": 183, + "oiPctChg": 20.631341600901916, + "totTradedVol": 659, + "iv": 14.66, + "ltp": 232.05, + "change": 77.9, + "pChange": 50.53519299383717, + "totBuyQty": 3150, + "totSellQty": 3625, + "bidQty": 25, + "bidPrice": 231.6, + "askQty": 100, + "askPrice": 233.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23450, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23450.00", + "oi": 32, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 975, + "totSellQty": 3275, + "bidQty": 25, + "bidPrice": 1041.55, + "askQty": 150, + "askPrice": 1081.9 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23450.00", + "oi": 129, + "oiChg": -3, + "oiPctChg": -2.272727272727273, + "totTradedVol": 34, + "iv": 14.25, + "ltp": 219.4, + "change": 26.80000000000001, + "pChange": 13.914849428868125, + "totBuyQty": 600, + "totSellQty": 1550, + "bidQty": 300, + "bidPrice": 230.6, + "askQty": 25, + "askPrice": 254.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23500, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23500.00", + "oi": 4622, + "oiChg": 516, + "oiPctChg": 12.56697515830492, + "totTradedVol": 1350, + "iv": 13.11, + "ltp": 1027.4, + "change": -229.79999999999995, + "pChange": -18.27871460388164, + "totBuyQty": 3025, + "totSellQty": 8725, + "bidQty": 50, + "bidPrice": 1022.45, + "askQty": 50, + "askPrice": 1027.45 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23500.00", + "oi": 28002, + "oiChg": 1673, + "oiPctChg": 6.354210186486384, + "totTradedVol": 17639, + "iv": 14.69, + "ltp": 258, + "change": 86, + "pChange": 50, + "totBuyQty": 20450, + "totSellQty": 14475, + "bidQty": 200, + "bidPrice": 256.95, + "askQty": 50, + "askPrice": 258.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23550, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23550.00", + "oi": 176, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 50, + "totSellQty": 3225, + "bidQty": 25, + "bidPrice": 959.5, + "askQty": 475, + "askPrice": 1006.5 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23550.00", + "oi": 160, + "oiChg": 17, + "oiPctChg": 11.888111888111888, + "totTradedVol": 31, + "iv": 14.42, + "ltp": 262.35, + "change": 83.90000000000003, + "pChange": 47.01597086018495, + "totBuyQty": 2375, + "totSellQty": 3250, + "bidQty": 25, + "bidPrice": 266.85, + "askQty": 1425, + "askPrice": 269.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23600, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23600.00", + "oi": 372, + "oiChg": -47, + "oiPctChg": -11.217183770883056, + "totTradedVol": 231, + "iv": 13.22, + "ltp": 971.15, + "change": -244.64999999999998, + "pChange": -20.12255305148873, + "totBuyQty": 2525, + "totSellQty": 4075, + "bidQty": 50, + "bidPrice": 951.85, + "askQty": 50, + "askPrice": 956.65 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23600.00", + "oi": 6604, + "oiChg": 73, + "oiPctChg": 1.1177461338233043, + "totTradedVol": 412, + "iv": 14.51, + "ltp": 268.25, + "change": 82.85, + "pChange": 44.687162891046384, + "totBuyQty": 3325, + "totSellQty": 2400, + "bidQty": 1400, + "bidPrice": 276.8, + "askQty": 425, + "askPrice": 280.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23650, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23650.00", + "oi": 64, + "oiChg": 1, + "oiPctChg": 1.5873015873015872, + "totTradedVol": 3, + "iv": 15.19, + "ltp": 924.65, + "change": -189.69999999999993, + "pChange": -17.023376856463404, + "totBuyQty": 2375, + "totSellQty": 5050, + "bidQty": 125, + "bidPrice": 902.85, + "askQty": 375, + "askPrice": 921.7 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23650.00", + "oi": 95, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 700, + "totSellQty": 2525, + "bidQty": 300, + "bidPrice": 277.3, + "askQty": 25, + "askPrice": 309.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23700, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23700.00", + "oi": 442, + "oiChg": 114, + "oiPctChg": 34.75609756097561, + "totTradedVol": 309, + "iv": 13.13, + "ltp": 899.7, + "change": -207.8499999999999, + "pChange": -18.76664710396821, + "totBuyQty": 1650, + "totSellQty": 5375, + "bidQty": 25, + "bidPrice": 875.85, + "askQty": 100, + "askPrice": 880.55 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23700.00", + "oi": 3280, + "oiChg": -29, + "oiPctChg": -0.8763977032336053, + "totTradedVol": 516, + "iv": 14.1, + "ltp": 303.4, + "change": 96.49999999999997, + "pChange": 46.64088931851134, + "totBuyQty": 4250, + "totSellQty": 3450, + "bidQty": 1825, + "bidPrice": 304.15, + "askQty": 1800, + "askPrice": 308.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23750, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23750.00", + "oi": 120, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 15.89, + "ltp": 965.35, + "change": 0, + "pChange": 0, + "totBuyQty": 1525, + "totSellQty": 4200, + "bidQty": 300, + "bidPrice": 832.3, + "askQty": 25, + "askPrice": 869.3 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23750.00", + "oi": 246, + "oiChg": -11, + "oiPctChg": -4.280155642023346, + "totTradedVol": 33, + "iv": 13.27, + "ltp": 275.2, + "change": 55.19999999999999, + "pChange": 25.090909090909086, + "totBuyQty": 625, + "totSellQty": 1450, + "bidQty": 25, + "bidPrice": 307.1, + "askQty": 25, + "askPrice": 331.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23800, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23800.00", + "oi": 745, + "oiChg": 241, + "oiPctChg": 47.817460317460316, + "totTradedVol": 753, + "iv": 12.93, + "ltp": 810, + "change": -212.20000000000005, + "pChange": -20.759146937976915, + "totBuyQty": 3600, + "totSellQty": 5475, + "bidQty": 475, + "bidPrice": 807.55, + "askQty": 475, + "askPrice": 812.9 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23800.00", + "oi": 8235, + "oiChg": 374, + "oiPctChg": 4.757664419285078, + "totTradedVol": 3807, + "iv": 14.22, + "ltp": 333.15, + "change": 107.54999999999998, + "pChange": 47.67287234042553, + "totBuyQty": 3250, + "totSellQty": 3375, + "bidQty": 125, + "bidPrice": 332.85, + "askQty": 50, + "askPrice": 338.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23850, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23850.00", + "oi": 327, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 4, + "iv": 13.72, + "ltp": 823.75, + "change": -169.14999999999998, + "pChange": -17.03595528250579, + "totBuyQty": 1700, + "totSellQty": 3275, + "bidQty": 200, + "bidPrice": 760.15, + "askQty": 300, + "askPrice": 788.8 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23850.00", + "oi": 142, + "oiChg": -21, + "oiPctChg": -12.883435582822086, + "totTradedVol": 83, + "iv": 14.46, + "ltp": 349.2, + "change": 108.79999999999998, + "pChange": 45.25790349417637, + "totBuyQty": 1525, + "totSellQty": 2650, + "bidQty": 25, + "bidPrice": 347.5, + "askQty": 250, + "askPrice": 355.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23900, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23900.00", + "oi": 580, + "oiChg": -26, + "oiPctChg": -4.29042904290429, + "totTradedVol": 323, + "iv": 12.65, + "ltp": 745.25, + "change": -195.79999999999995, + "pChange": -20.806545879602567, + "totBuyQty": 2150, + "totSellQty": 4775, + "bidQty": 525, + "bidPrice": 741, + "askQty": 125, + "askPrice": 745.2 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23900.00", + "oi": 6364, + "oiChg": 40, + "oiPctChg": 0.6325110689437066, + "totTradedVol": 2445, + "iv": 13.92, + "ltp": 366.45, + "change": 116.79999999999998, + "pChange": 46.785499699579404, + "totBuyQty": 6750, + "totSellQty": 6575, + "bidQty": 200, + "bidPrice": 365.85, + "askQty": 25, + "askPrice": 368.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23950, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE23950.00", + "oi": 137, + "oiChg": 6, + "oiPctChg": 4.580152671755725, + "totTradedVol": 20, + "iv": 12.56, + "ltp": 711.3, + "change": -114.85000000000002, + "pChange": -13.901833807419964, + "totBuyQty": 2575, + "totSellQty": 3850, + "bidQty": 550, + "bidPrice": 708.1, + "askQty": 450, + "askPrice": 714.5 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE23950.00", + "oi": 7, + "oiChg": 1, + "oiPctChg": 16.666666666666668, + "totTradedVol": 13, + "iv": 13.28, + "ltp": 386.35, + "change": 123.15000000000003, + "pChange": 46.78951367781157, + "totBuyQty": 2825, + "totSellQty": 3300, + "bidQty": 1000, + "bidPrice": 382.25, + "askQty": 500, + "askPrice": 387.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24000.00", + "oi": 19158, + "oiChg": 1421, + "oiPctChg": 8.01150138129334, + "totTradedVol": 9191, + "iv": 12.59, + "ltp": 683.05, + "change": -195.10000000000002, + "pChange": -22.21716107726471, + "totBuyQty": 6425, + "totSellQty": 14700, + "bidQty": 25, + "bidPrice": 679.7, + "askQty": 200, + "askPrice": 685.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24000.00", + "oi": 32920, + "oiChg": 1729, + "oiPctChg": 5.54326568561444, + "totTradedVol": 21520, + "iv": 13.85, + "ltp": 401.5, + "change": 121.39999999999998, + "pChange": 43.34166369153872, + "totBuyQty": 12900, + "totSellQty": 12525, + "bidQty": 300, + "bidPrice": 402.85, + "askQty": 50, + "askPrice": 405.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24050, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24050.00", + "oi": 37, + "oiChg": 25, + "oiPctChg": 208.33333333333334, + "totTradedVol": 68, + "iv": 11.99, + "ltp": 656.5, + "change": -238.79999999999995, + "pChange": -26.67262370155255, + "totBuyQty": 3250, + "totSellQty": 4600, + "bidQty": 1275, + "bidPrice": 646.1, + "askQty": 25, + "askPrice": 651.35 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24050.00", + "oi": 60, + "oiChg": -1, + "oiPctChg": -1.639344262295082, + "totTradedVol": 42, + "iv": 13.98, + "ltp": 413.6, + "change": 68.70000000000005, + "pChange": 19.918817048419847, + "totBuyQty": 825, + "totSellQty": 1750, + "bidQty": 200, + "bidPrice": 404.15, + "askQty": 25, + "askPrice": 433.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24100, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24100.00", + "oi": 459, + "oiChg": 45, + "oiPctChg": 10.869565217391305, + "totTradedVol": 625, + "iv": 12.59, + "ltp": 614.85, + "change": -191.14999999999998, + "pChange": -23.715880893300245, + "totBuyQty": 1725, + "totSellQty": 1975, + "bidQty": 25, + "bidPrice": 611.5, + "askQty": 50, + "askPrice": 621.15 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24100.00", + "oi": 1402, + "oiChg": 460, + "oiPctChg": 48.832271762208066, + "totTradedVol": 2385, + "iv": 13.33, + "ltp": 425.8, + "change": 119.69999999999999, + "pChange": 39.104867690297276, + "totBuyQty": 2100, + "totSellQty": 1150, + "bidQty": 500, + "bidPrice": 438.55, + "askQty": 875, + "askPrice": 443.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24150, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24150.00", + "oi": 522, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 63, + "iv": 13.29, + "ltp": 632.7, + "change": -106.19999999999993, + "pChange": -14.372716199756386, + "totBuyQty": 1700, + "totSellQty": 1475, + "bidQty": 200, + "bidPrice": 562.95, + "askQty": 25, + "askPrice": 609.75 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24150.00", + "oi": 127, + "oiChg": -55, + "oiPctChg": -30.21978021978022, + "totTradedVol": 115, + "iv": 13.64, + "ltp": 443.55, + "change": 123.55000000000001, + "pChange": 38.609375, + "totBuyQty": 2650, + "totSellQty": 700, + "bidQty": 25, + "bidPrice": 445.35, + "askQty": 100, + "askPrice": 462.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24200, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24200.00", + "oi": 1246, + "oiChg": 75, + "oiPctChg": 6.4047822374039285, + "totTradedVol": 1978, + "iv": 12.46, + "ltp": 559.55, + "change": -182.05000000000007, + "pChange": -24.548274002157505, + "totBuyQty": 3350, + "totSellQty": 4400, + "bidQty": 25, + "bidPrice": 550.05, + "askQty": 25, + "askPrice": 564.6 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24200.00", + "oi": 4778, + "oiChg": 67, + "oiPctChg": 1.4222033538526853, + "totTradedVol": 2454, + "iv": 13.4, + "ltp": 471.75, + "change": 138, + "pChange": 41.34831460674157, + "totBuyQty": 5175, + "totSellQty": 1775, + "bidQty": 450, + "bidPrice": 475, + "askQty": 100, + "askPrice": 482.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24250, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24250.00", + "oi": 498, + "oiChg": 10, + "oiPctChg": 2.0491803278688523, + "totTradedVol": 90, + "iv": 13.81, + "ltp": 555, + "change": -148.20000000000005, + "pChange": -21.075085324232088, + "totBuyQty": 4550, + "totSellQty": 5225, + "bidQty": 1800, + "bidPrice": 528.2, + "askQty": 725, + "askPrice": 534.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24250.00", + "oi": 155, + "oiChg": -11, + "oiPctChg": -6.626506024096385, + "totTradedVol": 359, + "iv": 12.68, + "ltp": 497.15, + "change": 145.34999999999997, + "pChange": 41.31608868675383, + "totBuyQty": 3200, + "totSellQty": 4950, + "bidQty": 775, + "bidPrice": 498.05, + "askQty": 125, + "askPrice": 503.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24300, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24300.00", + "oi": 1341, + "oiChg": 304, + "oiPctChg": 29.315332690453232, + "totTradedVol": 1493, + "iv": 12.13, + "ltp": 511.35, + "change": -164, + "pChange": -24.28370474568742, + "totBuyQty": 3725, + "totSellQty": 3625, + "bidQty": 100, + "bidPrice": 504, + "askQty": 750, + "askPrice": 509.65 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24300.00", + "oi": 1787, + "oiChg": -52, + "oiPctChg": -2.8276237085372484, + "totTradedVol": 2297, + "iv": 13.43, + "ltp": 523.6, + "change": 151.20000000000005, + "pChange": 40.60150375939851, + "totBuyQty": 6750, + "totSellQty": 2400, + "bidQty": 725, + "bidPrice": 520.65, + "askQty": 200, + "askPrice": 525.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24350, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24350.00", + "oi": 266, + "oiChg": 185, + "oiPctChg": 228.39506172839506, + "totTradedVol": 235, + "iv": 12.28, + "ltp": 490.3, + "change": -146.99999999999994, + "pChange": -23.066059940373442, + "totBuyQty": 4325, + "totSellQty": 1425, + "bidQty": 25, + "bidPrice": 475.95, + "askQty": 800, + "askPrice": 482.45 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24350.00", + "oi": 86, + "oiChg": -5, + "oiPctChg": -5.4945054945054945, + "totTradedVol": 12, + "iv": 12.7, + "ltp": 500.7, + "change": 108.05000000000001, + "pChange": 27.518145931491155, + "totBuyQty": 1500, + "totSellQty": 800, + "bidQty": 300, + "bidPrice": 520.6, + "askQty": 300, + "askPrice": 559.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24400, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24400.00", + "oi": 1481, + "oiChg": 536, + "oiPctChg": 56.71957671957672, + "totTradedVol": 1186, + "iv": 12.1, + "ltp": 446.75, + "change": -164.29999999999995, + "pChange": -26.88814335979052, + "totBuyQty": 3775, + "totSellQty": 2800, + "bidQty": 150, + "bidPrice": 450, + "askQty": 50, + "askPrice": 457.65 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24400.00", + "oi": 3563, + "oiChg": 88, + "oiPctChg": 2.5323741007194243, + "totTradedVol": 747, + "iv": 13, + "ltp": 547.95, + "change": 142.95000000000005, + "pChange": 35.29629629629631, + "totBuyQty": 3100, + "totSellQty": 2725, + "bidQty": 325, + "bidPrice": 565.75, + "askQty": 25, + "askPrice": 570.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24450, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24450.00", + "oi": 126, + "oiChg": 6, + "oiPctChg": 5, + "totTradedVol": 27, + "iv": 12.97, + "ltp": 470.85, + "change": -124.44999999999993, + "pChange": -20.905425835713075, + "totBuyQty": 3325, + "totSellQty": 1475, + "bidQty": 900, + "bidPrice": 413.85, + "askQty": 25, + "askPrice": 445.85 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24450.00", + "oi": 29, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 600, + "totSellQty": 2325, + "bidQty": 300, + "bidPrice": 567.15, + "askQty": 300, + "askPrice": 605.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24500, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24500.00", + "oi": 30105, + "oiChg": 11937, + "oiPctChg": 65.70343461030383, + "totTradedVol": 32170, + "iv": 12.02, + "ltp": 406.15, + "change": -151.85000000000002, + "pChange": -27.213261648745522, + "totBuyQty": 10350, + "totSellQty": 11325, + "bidQty": 50, + "bidPrice": 405.75, + "askQty": 200, + "askPrice": 408.6 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24500.00", + "oi": 26525, + "oiChg": 7208, + "oiPctChg": 37.31428275612155, + "totTradedVol": 28793, + "iv": 13.26, + "ltp": 625.1, + "change": 178.85000000000002, + "pChange": 40.07843137254902, + "totBuyQty": 8050, + "totSellQty": 6750, + "bidQty": 200, + "bidPrice": 621.05, + "askQty": 600, + "askPrice": 623.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24550, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24550.00", + "oi": 138, + "oiChg": 4, + "oiPctChg": 2.985074626865672, + "totTradedVol": 14, + "iv": 15.77, + "ltp": 537.7, + "change": 0.8500000000000227, + "pChange": 0.15833100493620614, + "totBuyQty": 3350, + "totSellQty": 700, + "bidQty": 25, + "bidPrice": 372.85, + "askQty": 50, + "askPrice": 402.4 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24550.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 625, + "totSellQty": 2400, + "bidQty": 325, + "bidPrice": 622.15, + "askQty": 300, + "askPrice": 673.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24600, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24600.00", + "oi": 870, + "oiChg": 172, + "oiPctChg": 24.64183381088825, + "totTradedVol": 896, + "iv": 12.11, + "ltp": 365, + "change": -132.3, + "pChange": -26.603659762718685, + "totBuyQty": 3700, + "totSellQty": 3400, + "bidQty": 900, + "bidPrice": 353.2, + "askQty": 25, + "askPrice": 367.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24600.00", + "oi": 1157, + "oiChg": 76, + "oiPctChg": 7.030527289546716, + "totTradedVol": 337, + "iv": 12.83, + "ltp": 640, + "change": 154.64999999999998, + "pChange": 31.863603585041716, + "totBuyQty": 1825, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 661.55, + "askQty": 25, + "askPrice": 679.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24650, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24650.00", + "oi": 65, + "oiChg": 1, + "oiPctChg": 1.5625, + "totTradedVol": 9, + "iv": 12.79, + "ltp": 379, + "change": -94.80000000000001, + "pChange": -20.008442380751372, + "totBuyQty": 4275, + "totSellQty": 650, + "bidQty": 50, + "bidPrice": 324.55, + "askQty": 25, + "askPrice": 356.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24650.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 600, + "totSellQty": 1500, + "bidQty": 300, + "bidPrice": 686.1, + "askQty": 300, + "askPrice": 717.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24700, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24700.00", + "oi": 795, + "oiChg": 142, + "oiPctChg": 21.745788667687595, + "totTradedVol": 940, + "iv": 12.11, + "ltp": 328, + "change": -120.60000000000002, + "pChange": -26.883637984841734, + "totBuyQty": 14425, + "totSellQty": 2350, + "bidQty": 525, + "bidPrice": 322.05, + "askQty": 1175, + "askPrice": 326.5 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24700.00", + "oi": 627, + "oiChg": 332, + "oiPctChg": 112.54237288135593, + "totTradedVol": 569, + "iv": 12.36, + "ltp": 680.75, + "change": 145.70000000000005, + "pChange": 27.23109989720588, + "totBuyQty": 2150, + "totSellQty": 1450, + "bidQty": 250, + "bidPrice": 730.45, + "askQty": 250, + "askPrice": 735.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24750, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24750.00", + "oi": 19, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2425, + "totSellQty": 650, + "bidQty": 25, + "bidPrice": 286.7, + "askQty": 25, + "askPrice": 316.8 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24750.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1500, + "totSellQty": 1500, + "bidQty": 300, + "bidPrice": 744.35, + "askQty": 300, + "askPrice": 779.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24800, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24800.00", + "oi": 1750, + "oiChg": 324, + "oiPctChg": 22.720897615708274, + "totTradedVol": 1382, + "iv": 11.97, + "ltp": 290.55, + "change": -106.94999999999999, + "pChange": -26.905660377358487, + "totBuyQty": 20200, + "totSellQty": 2300, + "bidQty": 100, + "bidPrice": 287.35, + "askQty": 50, + "askPrice": 289.8 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24800.00", + "oi": 354, + "oiChg": 94, + "oiPctChg": 36.15384615384615, + "totTradedVol": 362, + "iv": 13.01, + "ltp": 795, + "change": 216, + "pChange": 37.30569948186528, + "totBuyQty": 1275, + "totSellQty": 800, + "bidQty": 250, + "bidPrice": 796.6, + "askQty": 250, + "askPrice": 801.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24850, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24850.00", + "oi": 11, + "oiChg": 1, + "oiPctChg": 10, + "totTradedVol": 15, + "iv": 12.36, + "ltp": 290.05, + "change": -48.599999999999966, + "pChange": -14.351099955706474, + "totBuyQty": 4200, + "totSellQty": 650, + "bidQty": 300, + "bidPrice": 261.95, + "askQty": 50, + "askPrice": 281.45 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24850.00", + "oi": 1, + "oiChg": 1, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 12.5, + "ltp": 780.35, + "change": -104.04999999999995, + "pChange": -11.765038444142917, + "totBuyQty": 1450, + "totSellQty": 1525, + "bidQty": 25, + "bidPrice": 811.55, + "askQty": 25, + "askPrice": 848.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24900, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24900.00", + "oi": 981, + "oiChg": 248, + "oiPctChg": 33.83356070941337, + "totTradedVol": 664, + "iv": 12.08, + "ltp": 253.15, + "change": -101.15, + "pChange": -28.54925204628846, + "totBuyQty": 23150, + "totSellQty": 3450, + "bidQty": 25, + "bidPrice": 252.45, + "askQty": 1800, + "askPrice": 255.85 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24900.00", + "oi": 124, + "oiChg": 8, + "oiPctChg": 6.896551724137931, + "totTradedVol": 9, + "iv": 5.76, + "ltp": 590.15, + "change": -45.55000000000007, + "pChange": -7.165329557967605, + "totBuyQty": 4100, + "totSellQty": 1525, + "bidQty": 25, + "bidPrice": 852.3, + "askQty": 25, + "askPrice": 877.75 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24950, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE24950.00", + "oi": 138, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9925, + "totSellQty": 700, + "bidQty": 25, + "bidPrice": 229.9, + "askQty": 50, + "askPrice": 261.55 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE24950.00", + "oi": 219, + "oiChg": 218, + "oiPctChg": 21800, + "totTradedVol": 296, + "iv": 13.21, + "ltp": 872.3, + "change": -110.85000000000002, + "pChange": -11.27498347149469, + "totBuyQty": 3175, + "totSellQty": 1550, + "bidQty": 50, + "bidPrice": 890.2, + "askQty": 50, + "askPrice": 897.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25000.00", + "oi": 25175, + "oiChg": 988, + "oiPctChg": 4.08483896307934, + "totTradedVol": 34500, + "iv": 11.84, + "ltp": 226.1, + "change": -83.4, + "pChange": -26.94668820678514, + "totBuyQty": 41200, + "totSellQty": 31625, + "bidQty": 425, + "bidPrice": 225.05, + "askQty": 25, + "askPrice": 226.1 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25000.00", + "oi": 9954, + "oiChg": 955, + "oiPctChg": 10.61229025447272, + "totTradedVol": 9137, + "iv": 12.91, + "ltp": 926.9, + "change": 235.25, + "pChange": 34.012867779946504, + "totBuyQty": 8375, + "totSellQty": 12375, + "bidQty": 200, + "bidPrice": 921.6, + "askQty": 50, + "askPrice": 926.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25050, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25050.00", + "oi": 409, + "oiChg": 273, + "oiPctChg": 200.73529411764707, + "totTradedVol": 497, + "iv": 11.74, + "ltp": 211.1, + "change": -80.79999999999998, + "pChange": -27.6807125727989, + "totBuyQty": 18250, + "totSellQty": 2925, + "bidQty": 200, + "bidPrice": 207.7, + "askQty": 1800, + "askPrice": 210.8 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25050.00", + "oi": 242, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 938.9, + "askQty": 25, + "askPrice": 987.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25100, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25100.00", + "oi": 951, + "oiChg": 341, + "oiPctChg": 55.90163934426229, + "totTradedVol": 906, + "iv": 11.9, + "ltp": 200, + "change": -72.69999999999999, + "pChange": -26.659332599926657, + "totBuyQty": 23550, + "totSellQty": 2450, + "bidQty": 1800, + "bidPrice": 195.4, + "askQty": 25, + "askPrice": 198 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25100.00", + "oi": 351, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2775, + "totSellQty": 50, + "bidQty": 25, + "bidPrice": 975.55, + "askQty": 25, + "askPrice": 1016.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25150, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25150.00", + "oi": 6, + "oiChg": 4, + "oiPctChg": 200, + "totTradedVol": 9, + "iv": 11.86, + "ltp": 186.05, + "change": -53.94999999999999, + "pChange": -22.47916666666666, + "totBuyQty": 11400, + "totSellQty": 650, + "bidQty": 300, + "bidPrice": 170.95, + "askQty": 25, + "askPrice": 190.25 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25150.00", + "oi": 2, + "oiChg": 1, + "oiPctChg": 100, + "totTradedVol": 2, + "iv": 10.15, + "ltp": 912, + "change": 36.700000000000045, + "pChange": 4.192848166342974, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1001.35, + "askQty": 25, + "askPrice": 1068.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25200, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25200.00", + "oi": 1089, + "oiChg": 49, + "oiPctChg": 4.711538461538462, + "totTradedVol": 1219, + "iv": 11.73, + "ltp": 170.2, + "change": -66.70000000000002, + "pChange": -28.155339805825246, + "totBuyQty": 29400, + "totSellQty": 3775, + "bidQty": 100, + "bidPrice": 169.6, + "askQty": 1800, + "askPrice": 172.35 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25200.00", + "oi": 86, + "oiChg": 40, + "oiPctChg": 86.95652173913044, + "totTradedVol": 224, + "iv": 12.51, + "ltp": 1024, + "change": 212.45000000000005, + "pChange": 26.17830078245334, + "totBuyQty": 2825, + "totSellQty": 2225, + "bidQty": 50, + "bidPrice": 1068.95, + "askQty": 75, + "askPrice": 1083.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25250, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25250.00", + "oi": 138, + "oiChg": 4, + "oiPctChg": 2.985074626865672, + "totTradedVol": 5, + "iv": 12.18, + "ltp": 172.6, + "change": -47.30000000000001, + "pChange": -21.50977717144157, + "totBuyQty": 11450, + "totSellQty": 725, + "bidQty": 25, + "bidPrice": 147.45, + "askQty": 25, + "askPrice": 170.85 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25250.00", + "oi": 9, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 9, + "iv": 0, + "ltp": 848.95, + "change": -92.14999999999998, + "pChange": -9.79173307831261, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1079.25, + "askQty": 25, + "askPrice": 1141.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25300, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25300.00", + "oi": 1073, + "oiChg": 14, + "oiPctChg": 1.3220018885741265, + "totTradedVol": 1441, + "iv": 11.86, + "ltp": 147.8, + "change": -57.849999999999994, + "pChange": -28.13031850230975, + "totBuyQty": 22300, + "totSellQty": 5700, + "bidQty": 100, + "bidPrice": 147.4, + "askQty": 25, + "askPrice": 149.75 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25300.00", + "oi": 31, + "oiChg": 2, + "oiPctChg": 6.896551724137931, + "totTradedVol": 16, + "iv": 14.01, + "ltp": 1146.85, + "change": 194.3499999999999, + "pChange": 20.404199475065607, + "totBuyQty": 4200, + "totSellQty": 1675, + "bidQty": 25, + "bidPrice": 1126.2, + "askQty": 50, + "askPrice": 1164.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25350, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25350.00", + "oi": 185, + "oiChg": 148, + "oiPctChg": 400, + "totTradedVol": 482, + "iv": 11.74, + "ltp": 138.35, + "change": -33.099999999999994, + "pChange": -19.305920093321667, + "totBuyQty": 14400, + "totSellQty": 2500, + "bidQty": 1800, + "bidPrice": 137.05, + "askQty": 1800, + "askPrice": 139.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25350.00", + "oi": 3, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 9.62, + "ltp": 1057.75, + "change": 81.95000000000005, + "pChange": 8.39823734371798, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1158, + "askQty": 25, + "askPrice": 1214.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25400, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25400.00", + "oi": 470, + "oiChg": 164, + "oiPctChg": 53.59477124183007, + "totTradedVol": 447, + "iv": 11.8, + "ltp": 127.25, + "change": -50.25, + "pChange": -28.30985915492958, + "totBuyQty": 19975, + "totSellQty": 3250, + "bidQty": 1800, + "bidPrice": 127.85, + "askQty": 25, + "askPrice": 129.5 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25400.00", + "oi": 26, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 9.48, + "ltp": 1096.35, + "change": 74.74999999999989, + "pChange": 7.316953797963967, + "totBuyQty": 2725, + "totSellQty": 2000, + "bidQty": 25, + "bidPrice": 1198.65, + "askQty": 25, + "askPrice": 1244.55 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25450, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25450.00", + "oi": 34, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 13200, + "totSellQty": 650, + "bidQty": 300, + "bidPrice": 114.55, + "askQty": 25, + "askPrice": 136.1 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25450.00", + "oi": 15, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 0, + "ltp": 974.95, + "change": -84.59999999999991, + "pChange": -7.984521730923497, + "totBuyQty": 2725, + "totSellQty": 50, + "bidQty": 25, + "bidPrice": 1223, + "askQty": 25, + "askPrice": 1288.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25500, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25500.00", + "oi": 16280, + "oiChg": 3612, + "oiPctChg": 28.512788127565518, + "totTradedVol": 28429, + "iv": 11.77, + "ltp": 111.9, + "change": -42.19999999999999, + "pChange": -27.384815055158978, + "totBuyQty": 31500, + "totSellQty": 31125, + "bidQty": 400, + "bidPrice": 111.75, + "askQty": 125, + "askPrice": 112.6 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25500.00", + "oi": 1182, + "oiChg": 101, + "oiPctChg": 9.343200740055504, + "totTradedVol": 507, + "iv": 12.66, + "ltp": 1260, + "change": 242.45000000000005, + "pChange": 23.826838975971704, + "totBuyQty": 7900, + "totSellQty": 1950, + "bidQty": 250, + "bidPrice": 1298.7, + "askQty": 125, + "askPrice": 1314.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25550, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25550.00", + "oi": 146, + "oiChg": 24, + "oiPctChg": 19.672131147540984, + "totTradedVol": 34, + "iv": 11.73, + "ltp": 103, + "change": -42.80000000000001, + "pChange": -29.355281207133068, + "totBuyQty": 14100, + "totSellQty": 875, + "bidQty": 300, + "bidPrice": 94.7, + "askQty": 25, + "askPrice": 119.65 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25550.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 0, + "ltp": 1048.7, + "change": -8.399999999999864, + "pChange": -0.7946268091949544, + "totBuyQty": 2725, + "totSellQty": 1450, + "bidQty": 25, + "bidPrice": 1322.15, + "askQty": 25, + "askPrice": 1395.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25600, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25600.00", + "oi": 137, + "oiChg": -52, + "oiPctChg": -27.513227513227513, + "totTradedVol": 194, + "iv": 11.69, + "ltp": 94.6, + "change": -37.45000000000002, + "pChange": -28.360469519121555, + "totBuyQty": 13500, + "totSellQty": 1350, + "bidQty": 25, + "bidPrice": 94.05, + "askQty": 100, + "askPrice": 98.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25600.00", + "oi": 72, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 3, + "iv": 0, + "ltp": 1060, + "change": -34.549999999999955, + "pChange": -3.1565483532045095, + "totBuyQty": 3175, + "totSellQty": 950, + "bidQty": 450, + "bidPrice": 1327.05, + "askQty": 25, + "askPrice": 1423.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25650, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25650.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 9675, + "totSellQty": 625, + "bidQty": 25, + "bidPrice": 82.6, + "askQty": 25, + "askPrice": 101.15 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25650.00", + "oi": 10, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 50, + "bidQty": 25, + "bidPrice": 1369.25, + "askQty": 25, + "askPrice": 1452.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25700, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25700.00", + "oi": 1492, + "oiChg": 31, + "oiPctChg": 2.1218343600273784, + "totTradedVol": 745, + "iv": 11.87, + "ltp": 85.5, + "change": -27.099999999999994, + "pChange": -24.06749555950266, + "totBuyQty": 11500, + "totSellQty": 1675, + "bidQty": 25, + "bidPrice": 81.8, + "askQty": 50, + "askPrice": 87.4 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25700.00", + "oi": 64, + "oiChg": 2, + "oiPctChg": 3.225806451612903, + "totTradedVol": 4, + "iv": 9.18, + "ltp": 1354.3, + "change": 396.4, + "pChange": 41.38219020774611, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1425.05, + "askQty": 25, + "askPrice": 1496.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25750, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25750.00", + "oi": 116, + "oiChg": 1, + "oiPctChg": 0.8695652173913043, + "totTradedVol": 7, + "iv": 12.26, + "ltp": 87.4, + "change": -8.25, + "pChange": -8.625196027182437, + "totBuyQty": 8725, + "totSellQty": 600, + "bidQty": 25, + "bidPrice": 67.4, + "askQty": 300, + "askPrice": 91.65 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25750.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1455.1, + "askQty": 25, + "askPrice": 1548.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25800, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25800.00", + "oi": 403, + "oiChg": 27, + "oiPctChg": 7.180851063829787, + "totTradedVol": 647, + "iv": 11.84, + "ltp": 70.1, + "change": -27.35000000000001, + "pChange": -28.065674704976917, + "totBuyQty": 9950, + "totSellQty": 1050, + "bidQty": 125, + "bidPrice": 70.15, + "askQty": 25, + "askPrice": 74.4 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25800.00", + "oi": 25, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3175, + "totSellQty": 950, + "bidQty": 450, + "bidPrice": 1499.55, + "askQty": 25, + "askPrice": 1598.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25850, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25850.00", + "oi": 65, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 10500, + "totSellQty": 400, + "bidQty": 300, + "bidPrice": 56.5, + "askQty": 50, + "askPrice": 74.75 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25850.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 50, + "bidQty": 25, + "bidPrice": 1541.4, + "askQty": 25, + "askPrice": 1644.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25900, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25900.00", + "oi": 304, + "oiChg": -40, + "oiPctChg": -11.627906976744185, + "totTradedVol": 192, + "iv": 11.99, + "ltp": 64.3, + "change": -19.549999999999997, + "pChange": -23.315444245676805, + "totBuyQty": 11850, + "totSellQty": 1950, + "bidQty": 100, + "bidPrice": 60.05, + "askQty": 25, + "askPrice": 64.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25900.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1600.4, + "askQty": 25, + "askPrice": 1692.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25950, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE25950.00", + "oi": 269, + "oiChg": 4, + "oiPctChg": 1.509433962264151, + "totTradedVol": 42, + "iv": 11.77, + "ltp": 58.75, + "change": -18, + "pChange": -23.452768729641694, + "totBuyQty": 10250, + "totSellQty": 1900, + "bidQty": 25, + "bidPrice": 55.25, + "askQty": 50, + "askPrice": 58.9 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE25950.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1630.1, + "askQty": 25, + "askPrice": 1741.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE26000.00", + "oi": 27174, + "oiChg": -875, + "oiPctChg": -3.119540803593711, + "totTradedVol": 33371, + "iv": 11.85, + "ltp": 52.15, + "change": -16.9, + "pChange": -24.475018102824038, + "totBuyQty": 53425, + "totSellQty": 35900, + "bidQty": 400, + "bidPrice": 52.15, + "askQty": 100, + "askPrice": 52.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE26000.00", + "oi": 824, + "oiChg": 207, + "oiPctChg": 33.54943273905997, + "totTradedVol": 539, + "iv": 12.57, + "ltp": 1712.8, + "change": 289.79999999999995, + "pChange": 20.36542515811665, + "totBuyQty": 4600, + "totSellQty": 1950, + "bidQty": 25, + "bidPrice": 1730, + "askQty": 25, + "askPrice": 1739.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26050, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE26050.00", + "oi": 282, + "oiChg": -28, + "oiPctChg": -9.03225806451613, + "totTradedVol": 44, + "iv": 11.95, + "ltp": 49.9, + "change": -7.350000000000001, + "pChange": -12.838427947598255, + "totBuyQty": 11850, + "totSellQty": 2925, + "bidQty": 300, + "bidPrice": 41.6, + "askQty": 25, + "askPrice": 56.25 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE26050.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1718.35, + "askQty": 25, + "askPrice": 1814.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26100, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE26100.00", + "oi": 214, + "oiChg": 5, + "oiPctChg": 2.3923444976076556, + "totTradedVol": 62, + "iv": 11.99, + "ltp": 39.65, + "change": -13.899999999999999, + "pChange": -25.957049486461248, + "totBuyQty": 13850, + "totSellQty": 4200, + "bidQty": 350, + "bidPrice": 46.4, + "askQty": 25, + "askPrice": 49 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE26100.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3175, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1776.95, + "askQty": 25, + "askPrice": 1859.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26150, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE26150.00", + "oi": 64, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8900, + "totSellQty": 2075, + "bidQty": 800, + "bidPrice": 32, + "askQty": 200, + "askPrice": 59.8 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE26150.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 50, + "bidQty": 25, + "bidPrice": 1828.55, + "askQty": 25, + "askPrice": 1912.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26200, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE26200.00", + "oi": 5182, + "oiChg": 3525, + "oiPctChg": 212.7338563669282, + "totTradedVol": 4940, + "iv": 12.27, + "ltp": 45.75, + "change": -4.299999999999997, + "pChange": -8.591408591408586, + "totBuyQty": 15425, + "totSellQty": 9200, + "bidQty": 75, + "bidPrice": 45.65, + "askQty": 25, + "askPrice": 46.45 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE26200.00", + "oi": 1, + "oiChg": 1, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 0, + "ltp": 1780, + "change": -4.4500000000000455, + "pChange": -0.24937655860349384, + "totBuyQty": 3175, + "totSellQty": 950, + "bidQty": 450, + "bidPrice": 1860.05, + "askQty": 25, + "askPrice": 1959.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26250, + "expiry": "30-Jan-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY30-01-2025CE26250.00", + "oi": 1393, + "oiChg": 214, + "oiPctChg": 18.150975402883798, + "totTradedVol": 817, + "iv": 12.32, + "ltp": 40.6, + "change": -8.149999999999999, + "pChange": -16.717948717948715, + "totBuyQty": 13825, + "totSellQty": 4350, + "bidQty": 200, + "bidPrice": 39.5, + "askQty": 125, + "askPrice": 41.95 + }, + "pe": { + "id": "OPTIDXNIFTY30-01-2025PE26250.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2725, + "totSellQty": 950, + "bidQty": 25, + "bidPrice": 1922, + "askQty": 25, + "askPrice": 2013.25 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 18000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE18000.00", + "oi": 293, + "oiChg": 22, + "oiPctChg": 8.118081180811808, + "totTradedVol": 46, + "iv": 26.05, + "ltp": 17.7, + "change": -4, + "pChange": -18.433179723502306, + "totBuyQty": 3700, + "totSellQty": 5500, + "bidQty": 1525, + "bidPrice": 17.55, + "askQty": 475, + "askPrice": 19.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE19000.00", + "oi": 224, + "oiChg": 146, + "oiPctChg": 187.17948717948718, + "totTradedVol": 220, + "iv": 23.02, + "ltp": 24.65, + "change": 1.75, + "pChange": 7.641921397379914, + "totBuyQty": 10400, + "totSellQty": 2450, + "bidQty": 100, + "bidPrice": 22.3, + "askQty": 225, + "askPrice": 24.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE20000.00", + "oi": 3923, + "oiChg": 93, + "oiPctChg": 2.4281984334203655, + "totTradedVol": 140, + "iv": 0, + "ltp": 4390.1, + "change": -290.59999999999945, + "pChange": -6.208473091631582, + "totBuyQty": 400, + "totSellQty": 1600, + "bidQty": 50, + "bidPrice": 4393.7, + "askQty": 200, + "askPrice": 4427.2 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE20000.00", + "oi": 13323, + "oiChg": 109, + "oiPctChg": 0.8248827001664901, + "totTradedVol": 1343, + "iv": 20.54, + "ltp": 36, + "change": 5.149999999999999, + "pChange": 16.693679092382492, + "totBuyQty": 39100, + "totSellQty": 11325, + "bidQty": 200, + "bidPrice": 35.35, + "askQty": 275, + "askPrice": 36 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE21000.00", + "oi": 606, + "oiChg": 4, + "oiPctChg": 0.6644518272425249, + "totTradedVol": 7, + "iv": 0, + "ltp": 3524.25, + "change": -239, + "pChange": -6.350893509599416, + "totBuyQty": 200, + "totSellQty": 500, + "bidQty": 25, + "bidPrice": 3447.05, + "askQty": 25, + "askPrice": 3498.9 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE21000.00", + "oi": 14339, + "oiChg": 748, + "oiPctChg": 5.5036421161062465, + "totTradedVol": 2545, + "iv": 18.6, + "ltp": 65.5, + "change": 14.700000000000003, + "pChange": 28.93700787401576, + "totBuyQty": 19875, + "totSellQty": 7225, + "bidQty": 200, + "bidPrice": 65.05, + "askQty": 175, + "askPrice": 65.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE22000.00", + "oi": 7295, + "oiChg": 45, + "oiPctChg": 0.6206896551724138, + "totTradedVol": 243, + "iv": 0, + "ltp": 2612.65, + "change": -242.9000000000001, + "pChange": -8.50624223004325, + "totBuyQty": 825, + "totSellQty": 2225, + "bidQty": 125, + "bidPrice": 2560.3, + "askQty": 100, + "askPrice": 2584.25 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE22000.00", + "oi": 29708, + "oiChg": 1132, + "oiPctChg": 3.961366181410974, + "totTradedVol": 5937, + "iv": 17.11, + "ltp": 128, + "change": 28.849999999999994, + "pChange": 29.097327281896106, + "totBuyQty": 28625, + "totSellQty": 8900, + "bidQty": 50, + "bidPrice": 127.4, + "askQty": 200, + "askPrice": 128.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE23000.00", + "oi": 6751, + "oiChg": 94, + "oiPctChg": 1.4120474688298033, + "totTradedVol": 518, + "iv": 10.41, + "ltp": 1751.9, + "change": -229.64999999999986, + "pChange": -11.589412328732552, + "totBuyQty": 575, + "totSellQty": 2050, + "bidQty": 75, + "bidPrice": 1737.6, + "askQty": 150, + "askPrice": 1750.3 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE23000.00", + "oi": 49415, + "oiChg": 2158, + "oiPctChg": 4.566519245826015, + "totTradedVol": 14002, + "iv": 15.87, + "ltp": 258.15, + "change": 58.74999999999997, + "pChange": 29.463390170511524, + "totBuyQty": 36400, + "totSellQty": 12325, + "bidQty": 500, + "bidPrice": 255.7, + "askQty": 225, + "askPrice": 259.15 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE24000.00", + "oi": 17657, + "oiChg": 88, + "oiPctChg": 0.5008822357561614, + "totTradedVol": 3844, + "iv": 11.64, + "ltp": 1030.45, + "change": -187.79999999999995, + "pChange": -15.415555099528008, + "totBuyQty": 6700, + "totSellQty": 2425, + "bidQty": 100, + "bidPrice": 1026.05, + "askQty": 200, + "askPrice": 1033.05 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE24000.00", + "oi": 38221, + "oiChg": 565, + "oiPctChg": 1.500424899086467, + "totTradedVol": 11763, + "iv": 14.65, + "ltp": 498.25, + "change": 108.10000000000002, + "pChange": 27.707292067153666, + "totBuyQty": 19900, + "totSellQty": 5325, + "bidQty": 200, + "bidPrice": 498.3, + "askQty": 75, + "askPrice": 500.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE25000.00", + "oi": 27740, + "oiChg": 593, + "oiPctChg": 2.184403433160202, + "totTradedVol": 7405, + "iv": 11.35, + "ltp": 494.45, + "change": -107.94999999999999, + "pChange": -17.919986719787513, + "totBuyQty": 32775, + "totSellQty": 9800, + "bidQty": 25, + "bidPrice": 490.1, + "askQty": 100, + "askPrice": 495.05 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE25000.00", + "oi": 28464, + "oiChg": -1151, + "oiPctChg": -3.8865439810906635, + "totTradedVol": 7030, + "iv": 13.93, + "ltp": 925.35, + "change": 183.25, + "pChange": 24.693437542110228, + "totBuyQty": 13275, + "totSellQty": 3775, + "bidQty": 25, + "bidPrice": 922, + "askQty": 50, + "askPrice": 924.9 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE26000.00", + "oi": 27787, + "oiChg": 3888, + "oiPctChg": 16.26846311561153, + "totTradedVol": 14202, + "iv": 11.03, + "ltp": 187.4, + "change": -57.599999999999994, + "pChange": -23.51020408163265, + "totBuyQty": 18875, + "totSellQty": 15725, + "bidQty": 400, + "bidPrice": 183.95, + "askQty": 225, + "askPrice": 187.3 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE26000.00", + "oi": 18537, + "oiChg": 139, + "oiPctChg": 0.7555169040113056, + "totTradedVol": 1513, + "iv": 14.2, + "ltp": 1588.1, + "change": 250.5, + "pChange": 18.72757177033493, + "totBuyQty": 1425, + "totSellQty": 1050, + "bidQty": 25, + "bidPrice": 1579.7, + "askQty": 100, + "askPrice": 1592.1 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE27000.00", + "oi": 25766, + "oiChg": 1095, + "oiPctChg": 4.438409468606866, + "totTradedVol": 7748, + "iv": 11.38, + "ltp": 66.05, + "change": -16.400000000000006, + "pChange": -19.890842935112197, + "totBuyQty": 40200, + "totSellQty": 8725, + "bidQty": 125, + "bidPrice": 66.15, + "askQty": 325, + "askPrice": 67.7 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE27000.00", + "oi": 7995, + "oiChg": 289, + "oiPctChg": 3.7503244225279, + "totTradedVol": 704, + "iv": 16.56, + "ltp": 2420.45, + "change": 276.2999999999997, + "pChange": 12.886225310729179, + "totBuyQty": 2225, + "totSellQty": 1975, + "bidQty": 75, + "bidPrice": 2416.8, + "askQty": 125, + "askPrice": 2443.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 28000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE28000.00", + "oi": 19990, + "oiChg": 733, + "oiPctChg": 3.806408059406969, + "totTradedVol": 1999, + "iv": 12.71, + "ltp": 32.45, + "change": -4.199999999999996, + "pChange": -11.459754433833549, + "totBuyQty": 19125, + "totSellQty": 6375, + "bidQty": 125, + "bidPrice": 32.45, + "askQty": 200, + "askPrice": 33 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE28000.00", + "oi": 5083, + "oiChg": 3, + "oiPctChg": 0.05905511811023622, + "totTradedVol": 235, + "iv": 16.77, + "ltp": 3274.25, + "change": 229, + "pChange": 7.519908053525983, + "totBuyQty": 825, + "totSellQty": 2425, + "bidQty": 25, + "bidPrice": 3327.6, + "askQty": 100, + "askPrice": 3367.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 29000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE29000.00", + "oi": 3670, + "oiChg": 13, + "oiPctChg": 0.3554826360404703, + "totTradedVol": 357, + "iv": 14.71, + "ltp": 24.6, + "change": 0.45000000000000284, + "pChange": 1.8633540372670927, + "totBuyQty": 16950, + "totSellQty": 5625, + "bidQty": 50, + "bidPrice": 23.55, + "askQty": 225, + "askPrice": 24.6 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE29000.00", + "oi": 797, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 275, + "totSellQty": 100, + "bidQty": 25, + "bidPrice": 3603.45, + "askQty": 50, + "askPrice": 4531.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 30000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE30000.00", + "oi": 7140, + "oiChg": 46, + "oiPctChg": 0.6484352974344516, + "totTradedVol": 201, + "iv": 16.42, + "ltp": 17.8, + "change": 0.3500000000000014, + "pChange": 2.005730659025796, + "totBuyQty": 18225, + "totSellQty": 15275, + "bidQty": 125, + "bidPrice": 17.5, + "askQty": 100, + "askPrice": 18.25 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE30000.00", + "oi": 70, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 50, + "totSellQty": 100, + "bidQty": 25, + "bidPrice": 4086.2, + "askQty": 25, + "askPrice": 5499.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 31000, + "expiry": "27-Mar-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY27-03-2025CE31000.00", + "oi": 1128, + "oiChg": 30, + "oiPctChg": 2.73224043715847, + "totTradedVol": 129, + "iv": 17.54, + "ltp": 11.2, + "change": -1.3000000000000007, + "pChange": -10.400000000000006, + "totBuyQty": 96125, + "totSellQty": 5300, + "bidQty": 125, + "bidPrice": 11.2, + "askQty": 1825, + "askPrice": 12 + }, + "pe": { + "id": "OPTIDXNIFTY27-03-2025PE31000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 75, + "totSellQty": 50, + "bidQty": 25, + "bidPrice": 5822.15, + "askQty": 25, + "askPrice": 6583.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 14000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE14000.00", + "oi": 121, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 1, + "iv": 34.88, + "ltp": 20.05, + "change": 0, + "pChange": 0, + "totBuyQty": 3600, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 3.6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 15000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE15000.00", + "oi": 69, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 31.19, + "ltp": 20.05, + "change": 0, + "pChange": 0, + "totBuyQty": 200, + "totSellQty": 0, + "bidQty": 200, + "bidPrice": 20.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE19000.00", + "oi": 24017, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1825, + "totSellQty": 125, + "bidQty": 775, + "bidPrice": 23.35, + "askQty": 125, + "askPrice": 55.3 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE20000.00", + "oi": 18397, + "oiChg": 36, + "oiPctChg": 0.19606775230107293, + "totTradedVol": 99, + "iv": 19.66, + "ltp": 75, + "change": 9.349999999999994, + "pChange": 14.242193450114232, + "totBuyQty": 2750, + "totSellQty": 3500, + "bidQty": 25, + "bidPrice": 70.4, + "askQty": 300, + "askPrice": 89.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE21000.00", + "oi": 1164, + "oiChg": 44, + "oiPctChg": 3.9285714285714284, + "totTradedVol": 135, + "iv": 18.14, + "ltp": 117.05, + "change": 11.25, + "pChange": 10.633270321361058, + "totBuyQty": 11000, + "totSellQty": 3625, + "bidQty": 50, + "bidPrice": 117.05, + "askQty": 25, + "askPrice": 119.8 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE22000.00", + "oi": 6750, + "oiChg": 363, + "oiPctChg": 5.683419445749178, + "totTradedVol": 792, + "iv": 16.81, + "ltp": 194, + "change": 28.55000000000001, + "pChange": 17.255968570565134, + "totBuyQty": 24850, + "totSellQty": 2800, + "bidQty": 50, + "bidPrice": 194.15, + "askQty": 100, + "askPrice": 197.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE23000.00", + "oi": 1232, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 101, + "iv": 0, + "ltp": 2140, + "change": -237.5, + "pChange": -9.989484752891693, + "totBuyQty": 1250, + "totSellQty": 1175, + "bidQty": 100, + "bidPrice": 2121.35, + "askQty": 100, + "askPrice": 2153.55 + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE23000.00", + "oi": 9299, + "oiChg": 660, + "oiPctChg": 7.639773121889108, + "totTradedVol": 1265, + "iv": 16.04, + "ltp": 341, + "change": 50.39999999999998, + "pChange": 17.34342739160357, + "totBuyQty": 4575, + "totSellQty": 1400, + "bidQty": 50, + "bidPrice": 339.35, + "askQty": 75, + "askPrice": 344.4 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE24000.00", + "oi": 2545, + "oiChg": 124, + "oiPctChg": 5.121850475010326, + "totTradedVol": 769, + "iv": 8.92, + "ltp": 1441.35, + "change": -191.4000000000001, + "pChange": -11.722553973357837, + "totBuyQty": 3150, + "totSellQty": 2125, + "bidQty": 100, + "bidPrice": 1430.85, + "askQty": 50, + "askPrice": 1445.4 + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE24000.00", + "oi": 7873, + "oiChg": 457, + "oiPctChg": 6.16235167206041, + "totTradedVol": 2516, + "iv": 15.44, + "ltp": 568, + "change": 84.39999999999998, + "pChange": 17.45244003308519, + "totBuyQty": 3575, + "totSellQty": 2150, + "bidQty": 25, + "bidPrice": 568.1, + "askQty": 50, + "askPrice": 577.5 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE25000.00", + "oi": 4454, + "oiChg": 67, + "oiPctChg": 1.527239571461135, + "totTradedVol": 877, + "iv": 9.85, + "ltp": 890, + "change": -126.60000000000002, + "pChange": -12.453275624631125, + "totBuyQty": 11825, + "totSellQty": 6575, + "bidQty": 25, + "bidPrice": 889, + "askQty": 100, + "askPrice": 896.8 + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE25000.00", + "oi": 4229, + "oiChg": -303, + "oiPctChg": -6.685789938217122, + "totTradedVol": 1315, + "iv": 15.1, + "ltp": 930, + "change": 139.85000000000002, + "pChange": 17.69917104347276, + "totBuyQty": 1525, + "totSellQty": 1400, + "bidQty": 25, + "bidPrice": 943.6, + "askQty": 100, + "askPrice": 962.2 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE26000.00", + "oi": 3196, + "oiChg": 102, + "oiPctChg": 3.2967032967032965, + "totTradedVol": 655, + "iv": 10.29, + "ltp": 493.3, + "change": -74.30000000000001, + "pChange": -13.090204369274138, + "totBuyQty": 9000, + "totSellQty": 3025, + "bidQty": 25, + "bidPrice": 481.55, + "askQty": 25, + "askPrice": 498.8 + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE26000.00", + "oi": 1712, + "oiChg": -103, + "oiPctChg": -5.674931129476584, + "totTradedVol": 265, + "iv": 15.7, + "ltp": 1480, + "change": 218.75, + "pChange": 17.34390485629336, + "totBuyQty": 1175, + "totSellQty": 975, + "bidQty": 125, + "bidPrice": 1467.25, + "askQty": 100, + "askPrice": 1507.6 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE27000.00", + "oi": 2346, + "oiChg": 129, + "oiPctChg": 5.818673883626523, + "totTradedVol": 419, + "iv": 10.47, + "ltp": 239.85, + "change": -38.79999999999998, + "pChange": -13.924277767809073, + "totBuyQty": 13725, + "totSellQty": 3725, + "bidQty": 75, + "bidPrice": 234.05, + "askQty": 100, + "askPrice": 239.55 + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE27000.00", + "oi": 560, + "oiChg": 107, + "oiPctChg": 23.620309050772626, + "totTradedVol": 212, + "iv": 17.08, + "ltp": 2198.5, + "change": 286.1500000000001, + "pChange": 14.963265092687013, + "totBuyQty": 250, + "totSellQty": 825, + "bidQty": 25, + "bidPrice": 2159.7, + "askQty": 75, + "askPrice": 2185.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 28000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE28000.00", + "oi": 1645, + "oiChg": -91, + "oiPctChg": -5.241935483870968, + "totTradedVol": 304, + "iv": 10.63, + "ltp": 105.7, + "change": -17.700000000000003, + "pChange": -14.34359805510535, + "totBuyQty": 9525, + "totSellQty": 3850, + "bidQty": 125, + "bidPrice": 105.5, + "askQty": 100, + "askPrice": 109.75 + }, + "pe": { + "id": "OPTIDXNIFTY26-06-2025PE28000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 100, + "totSellQty": 0, + "bidQty": 100, + "bidPrice": 2190.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 29000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE29000.00", + "oi": 1639, + "oiChg": -30, + "oiPctChg": -1.7974835230677053, + "totTradedVol": 98, + "iv": 11.71, + "ltp": 70, + "change": -8.950000000000003, + "pChange": -11.336288790373656, + "totBuyQty": 10825, + "totSellQty": 4275, + "bidQty": 100, + "bidPrice": 65.05, + "askQty": 225, + "askPrice": 70 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 30000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE30000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 15450, + "totSellQty": 1000, + "bidQty": 300, + "bidPrice": 22, + "askQty": 1000, + "askPrice": 60 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 31000, + "expiry": "26-Jun-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY26-06-2025CE31000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 8800, + "totSellQty": 0, + "bidQty": 1800, + "bidPrice": 4.2, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "25-Sep-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-09-2025PE19000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 29.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "25-Sep-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-09-2025PE20000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 49.6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "25-Sep-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-09-2025PE21000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 110.2, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "25-Sep-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-09-2025PE22000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 125.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "25-Sep-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-09-2025PE24000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 100, + "totSellQty": 0, + "bidQty": 100, + "bidPrice": 408, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "25-Sep-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY25-09-2025CE25000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 0, + "bidQty": 0, + "bidPrice": 0, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "25-Sep-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY25-09-2025CE26000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 50, + "totSellQty": 0, + "bidQty": 50, + "bidPrice": 0.1, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY25-09-2025PE26000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 100, + "totSellQty": 0, + "bidQty": 100, + "bidPrice": 1033, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27000, + "expiry": "25-Sep-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY25-09-2025CE27000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 200, + "bidPrice": 0.15, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 13000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE13000.00", + "oi": 9, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 750, + "totSellQty": 50, + "bidQty": 750, + "bidPrice": 0.05, + "askQty": 50, + "askPrice": 20.05 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 15000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE15000.00", + "oi": 47, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 24.8, + "ltp": 20.05, + "change": -0.75, + "pChange": -3.6057692307692304, + "totBuyQty": 450, + "totSellQty": 0, + "bidQty": 450, + "bidPrice": 20.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 16000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE16000.00", + "oi": 90, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 2, + "iv": 22.3, + "ltp": 20.2, + "change": -0.10000000000000142, + "pChange": -0.4926108374384306, + "totBuyQty": 775, + "totSellQty": 0, + "bidQty": 750, + "bidPrice": 20.2, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 16500, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE16500.00", + "oi": 104, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 950, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 20.65, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 17000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE17000.00", + "oi": 25, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 125, + "bidQty": 0, + "bidPrice": 0, + "askQty": 100, + "askPrice": 9000 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE17000.00", + "oi": 117, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2500, + "totSellQty": 25, + "bidQty": 100, + "bidPrice": 21.45, + "askQty": 25, + "askPrice": 35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 18000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE18000.00", + "oi": 266, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 75, + "totSellQty": 250, + "bidQty": 25, + "bidPrice": 6530.1, + "askQty": 25, + "askPrice": 6999.95 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE18000.00", + "oi": 119, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1300, + "totSellQty": 25, + "bidQty": 100, + "bidPrice": 25.4, + "askQty": 25, + "askPrice": 70 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE19000.00", + "oi": 129, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 400, + "totSellQty": 0, + "bidQty": 400, + "bidPrice": 5520, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE19000.00", + "oi": 407, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1625, + "totSellQty": 100, + "bidQty": 500, + "bidPrice": 37.15, + "askQty": 25, + "askPrice": 80 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19500, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE19500.00", + "oi": 67, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 75, + "totSellQty": 0, + "bidQty": 25, + "bidPrice": 5220, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE20000.00", + "oi": 191, + "oiChg": 9, + "oiPctChg": 4.945054945054945, + "totTradedVol": 23, + "iv": 0, + "ltp": 5280, + "change": -202.85000000000036, + "pChange": -3.699718212243639, + "totBuyQty": 150, + "totSellQty": 50, + "bidQty": 25, + "bidPrice": 5065, + "askQty": 25, + "askPrice": 5350.2 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE20000.00", + "oi": 1477, + "oiChg": 10, + "oiPctChg": 0.6816632583503749, + "totTradedVol": 145, + "iv": 19.76, + "ltp": 154, + "change": 13.199999999999989, + "pChange": 9.374999999999991, + "totBuyQty": 1950, + "totSellQty": 800, + "bidQty": 25, + "bidPrice": 148, + "askQty": 100, + "askPrice": 153.35 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE21000.00", + "oi": 17, + "oiChg": 2, + "oiPctChg": 13.333333333333334, + "totTradedVol": 4, + "iv": 0, + "ltp": 4388.25, + "change": 240.25, + "pChange": 5.791947926711669, + "totBuyQty": 375, + "totSellQty": 25, + "bidQty": 25, + "bidPrice": 4200.05, + "askQty": 25, + "askPrice": 4442.65 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE21000.00", + "oi": 1513, + "oiChg": 73, + "oiPctChg": 5.069444444444445, + "totTradedVol": 150, + "iv": 18.89, + "ltp": 224, + "change": 20.849999999999994, + "pChange": 10.263352202805805, + "totBuyQty": 5075, + "totSellQty": 2475, + "bidQty": 100, + "bidPrice": 222.5, + "askQty": 100, + "askPrice": 235.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE22000.00", + "oi": 209, + "oiChg": -1, + "oiPctChg": -0.47619047619047616, + "totTradedVol": 5, + "iv": 0, + "ltp": 3710, + "change": -138.55000000000018, + "pChange": -3.6000571643865915, + "totBuyQty": 75, + "totSellQty": 25, + "bidQty": 25, + "bidPrice": 3497.7, + "askQty": 25, + "askPrice": 3620 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE22000.00", + "oi": 9613, + "oiChg": 195, + "oiPctChg": 2.0705032915693353, + "totTradedVol": 404, + "iv": 18.38, + "ltp": 339.95, + "change": 33.099999999999966, + "pChange": 10.787029493237727, + "totBuyQty": 5300, + "totSellQty": 1325, + "bidQty": 100, + "bidPrice": 335.25, + "askQty": 25, + "askPrice": 340 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE23000.00", + "oi": 1716, + "oiChg": 63, + "oiPctChg": 3.8112522686025407, + "totTradedVol": 130, + "iv": 0, + "ltp": 2895.55, + "change": -234.39999999999964, + "pChange": -7.488937522963614, + "totBuyQty": 400, + "totSellQty": 400, + "bidQty": 25, + "bidPrice": 2887.35, + "askQty": 100, + "askPrice": 2920.95 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE23000.00", + "oi": 9165, + "oiChg": 35, + "oiPctChg": 0.3833515881708653, + "totTradedVol": 753, + "iv": 17.97, + "ltp": 510.85, + "change": 54.150000000000034, + "pChange": 11.856798773812137, + "totBuyQty": 6650, + "totSellQty": 2275, + "bidQty": 100, + "bidPrice": 507.4, + "askQty": 100, + "askPrice": 510.85 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE24000.00", + "oi": 2338, + "oiChg": 69, + "oiPctChg": 3.0409872190392244, + "totTradedVol": 316, + "iv": 0, + "ltp": 2255, + "change": -191.44999999999982, + "pChange": -7.825624885037497, + "totBuyQty": 1875, + "totSellQty": 2175, + "bidQty": 25, + "bidPrice": 2251, + "askQty": 75, + "askPrice": 2271 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE24000.00", + "oi": 15191, + "oiChg": 84, + "oiPctChg": 0.5560336267955253, + "totTradedVol": 1054, + "iv": 17.77, + "ltp": 744, + "change": 83.85000000000002, + "pChange": 12.701658713928657, + "totBuyQty": 5400, + "totSellQty": 5500, + "bidQty": 100, + "bidPrice": 740.6, + "askQty": 50, + "askPrice": 757.45 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE25000.00", + "oi": 3592, + "oiChg": -59, + "oiPctChg": -1.6159956176390031, + "totTradedVol": 408, + "iv": 7.09, + "ltp": 1673.4, + "change": -159.79999999999995, + "pChange": -8.71699759982544, + "totBuyQty": 2300, + "totSellQty": 1725, + "bidQty": 25, + "bidPrice": 1643.05, + "askQty": 25, + "askPrice": 1679.4 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE25000.00", + "oi": 9242, + "oiChg": -216, + "oiPctChg": -2.283780926200042, + "totTradedVol": 1045, + "iv": 17.26, + "ltp": 1042.1, + "change": 125.29999999999995, + "pChange": 13.667102966841183, + "totBuyQty": 2325, + "totSellQty": 3325, + "bidQty": 150, + "bidPrice": 1025, + "askQty": 150, + "askPrice": 1049 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE26000.00", + "oi": 3325, + "oiChg": 71, + "oiPctChg": 2.1819299323909034, + "totTradedVol": 586, + "iv": 8.35, + "ltp": 1138, + "change": -142.6500000000001, + "pChange": -11.138874790145636, + "totBuyQty": 800, + "totSellQty": 2850, + "bidQty": 50, + "bidPrice": 1122.75, + "askQty": 25, + "askPrice": 1138 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE26000.00", + "oi": 3990, + "oiChg": 55, + "oiPctChg": 1.3977128335451081, + "totTradedVol": 360, + "iv": 16.65, + "ltp": 1388.35, + "change": 145, + "pChange": 11.662042063779307, + "totBuyQty": 4100, + "totSellQty": 2150, + "bidQty": 100, + "bidPrice": 1359.95, + "askQty": 50, + "askPrice": 1400 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 27000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE27000.00", + "oi": 6285, + "oiChg": 76, + "oiPctChg": 1.224029634401675, + "totTradedVol": 354, + "iv": 9.13, + "ltp": 758.75, + "change": -101.14999999999998, + "pChange": -11.762995697174087, + "totBuyQty": 2675, + "totSellQty": 2350, + "bidQty": 50, + "bidPrice": 756.55, + "askQty": 100, + "askPrice": 778.15 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE27000.00", + "oi": 2379, + "oiChg": -34, + "oiPctChg": -1.4090343970161625, + "totTradedVol": 144, + "iv": 17.18, + "ltp": 1870.6, + "change": 172.5, + "pChange": 10.158412343207115, + "totBuyQty": 2050, + "totSellQty": 2350, + "bidQty": 25, + "bidPrice": 1872.45, + "askQty": 100, + "askPrice": 1898.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 28000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE28000.00", + "oi": 2931, + "oiChg": 146, + "oiPctChg": 5.242369838420108, + "totTradedVol": 417, + "iv": 9.73, + "ltp": 495, + "change": -72.95000000000005, + "pChange": -12.844440531736955, + "totBuyQty": 2250, + "totSellQty": 525, + "bidQty": 25, + "bidPrice": 490, + "askQty": 100, + "askPrice": 505 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE28000.00", + "oi": 3111, + "oiChg": 145, + "oiPctChg": 4.888739042481457, + "totTradedVol": 253, + "iv": 17.8, + "ltp": 2474.3, + "change": 173.35000000000036, + "pChange": 7.533844716312843, + "totBuyQty": 1200, + "totSellQty": 2450, + "bidQty": 100, + "bidPrice": 2447.3, + "askQty": 75, + "askPrice": 2529.95 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 29000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE29000.00", + "oi": 1148, + "oiChg": 55, + "oiPctChg": 5.032021957913998, + "totTradedVol": 87, + "iv": 10.07, + "ltp": 305.9, + "change": -24.100000000000023, + "pChange": -7.30303030303031, + "totBuyQty": 1175, + "totSellQty": 975, + "bidQty": 75, + "bidPrice": 288, + "askQty": 250, + "askPrice": 304.9 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE29000.00", + "oi": 38, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 100, + "totSellQty": 25, + "bidQty": 25, + "bidPrice": 3095.5, + "askQty": 25, + "askPrice": 3500 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 30000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE30000.00", + "oi": 583, + "oiChg": 9, + "oiPctChg": 1.5679442508710801, + "totTradedVol": 48, + "iv": 9.88, + "ltp": 158, + "change": -28.099999999999994, + "pChange": -15.099408919935517, + "totBuyQty": 1275, + "totSellQty": 1250, + "bidQty": 50, + "bidPrice": 158, + "askQty": 25, + "askPrice": 165 + }, + "pe": { + "id": "OPTIDXNIFTY24-12-2025PE30000.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 100, + "totSellQty": 0, + "bidQty": 100, + "bidPrice": 2962.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 31000, + "expiry": "24-Dec-2025", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY24-12-2025CE31000.00", + "oi": 262, + "oiChg": 34, + "oiPctChg": 14.912280701754385, + "totTradedVol": 76, + "iv": 10.87, + "ltp": 115, + "change": -23.75, + "pChange": -17.117117117117118, + "totBuyQty": 1300, + "totSellQty": 450, + "bidQty": 50, + "bidPrice": 118, + "askQty": 25, + "askPrice": 120 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 12000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE12000.00", + "oi": 23, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 100, + "totSellQty": 0, + "bidQty": 100, + "bidPrice": 20.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 14000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE14000.00", + "oi": 37, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 450, + "totSellQty": 0, + "bidQty": 450, + "bidPrice": 20.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 15000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE15000.00", + "oi": 34, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 700, + "totSellQty": 0, + "bidQty": 700, + "bidPrice": 20.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 16000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE16000.00", + "oi": 20, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 450, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 21.4, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 18000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE18000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 33.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE19000.00", + "oi": 7, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 550, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 52.9, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE20000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 550, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 100.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE21000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 550, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 196.65, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE22000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 550, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 353.6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE23000.00", + "oi": 16, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 650, + "totSellQty": 25, + "bidQty": 250, + "bidPrice": 503.05, + "askQty": 25, + "askPrice": 700 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY25-06-2026CE24000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 50, + "totSellQty": 0, + "bidQty": 25, + "bidPrice": 1855, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY25-06-2026PE24000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 600, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 561.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY25-06-2026CE25000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 25, + "totSellQty": 0, + "bidQty": 25, + "bidPrice": 1550, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY25-06-2026CE26000.00", + "oi": 25, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 24, + "iv": 0, + "ltp": 1490.25, + "change": -183.0999999999999, + "pChange": -10.94212209041742, + "totBuyQty": 550, + "totSellQty": 100, + "bidQty": 100, + "bidPrice": 1490.3, + "askQty": 25, + "askPrice": 1619.85 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 31000, + "expiry": "25-Jun-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY25-06-2026CE31000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 350, + "totSellQty": 0, + "bidQty": 300, + "bidPrice": 1, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 12000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE12000.00", + "oi": 32, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 500, + "totSellQty": 0, + "bidQty": 500, + "bidPrice": 20.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 13000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE13000.00", + "oi": 6, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 500, + "totSellQty": 0, + "bidQty": 500, + "bidPrice": 20.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 14000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE14000.00", + "oi": 47, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1275, + "totSellQty": 0, + "bidQty": 1275, + "bidPrice": 20.2, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 15000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE15000.00", + "oi": 86, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 975, + "totSellQty": 0, + "bidQty": 500, + "bidPrice": 21.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 16000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE16000.00", + "oi": 96, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1275, + "totSellQty": 0, + "bidQty": 500, + "bidPrice": 23.3, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 17000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE17000.00", + "oi": 120, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1400, + "totSellQty": 50, + "bidQty": 750, + "bidPrice": 29.05, + "askQty": 50, + "askPrice": 129.65 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 18000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE18000.00", + "oi": 211, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1050, + "totSellQty": 200, + "bidQty": 500, + "bidPrice": 41.6, + "askQty": 200, + "askPrice": 227 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE19000.00", + "oi": 97, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1700, + "totSellQty": 0, + "bidQty": 500, + "bidPrice": 66.15, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE20000.00", + "oi": 170, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1450, + "totSellQty": 250, + "bidQty": 300, + "bidPrice": 125.8, + "askQty": 250, + "askPrice": 550 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE21000.00", + "oi": 28, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1075, + "totSellQty": 0, + "bidQty": 525, + "bidPrice": 225.55, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE22000.00", + "oi": 8, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1075, + "totSellQty": 0, + "bidQty": 525, + "bidPrice": 377.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY31-12-2026CE23000.00", + "oi": 20, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 0, + "totSellQty": 50, + "bidQty": 0, + "bidPrice": 0, + "askQty": 50, + "askPrice": 6000 + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE23000.00", + "oi": 498, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2575, + "totSellQty": 100, + "bidQty": 250, + "bidPrice": 552.05, + "askQty": 50, + "askPrice": 750 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY31-12-2026CE24000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 50, + "totSellQty": 0, + "bidQty": 25, + "bidPrice": 2101, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE24000.00", + "oi": 183, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 3425, + "totSellQty": 100, + "bidQty": 250, + "bidPrice": 731.05, + "askQty": 100, + "askPrice": 1098.7 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY31-12-2026CE25000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 25, + "totSellQty": 0, + "bidQty": 25, + "bidPrice": 1850, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE25000.00", + "oi": 11, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 1800, + "totSellQty": 25, + "bidQty": 250, + "bidPrice": 810.05, + "askQty": 25, + "askPrice": 1750 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 26000, + "expiry": "31-Dec-2026", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": "OPTIDXNIFTY31-12-2026CE26000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 25, + "totSellQty": 0, + "bidQty": 25, + "bidPrice": 1650, + "askQty": 0, + "askPrice": 0 + }, + "pe": { + "id": "OPTIDXNIFTY31-12-2026PE26000.00", + "oi": 9, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 2275, + "totSellQty": 25, + "bidQty": 100, + "bidPrice": 920.05, + "askQty": 25, + "askPrice": 2828 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 18000, + "expiry": "24-Jun-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-06-2027PE18000.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 47.6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "24-Jun-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-06-2027PE19000.00", + "oi": 21, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 76.3, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "24-Jun-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-06-2027PE20000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 139.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "24-Jun-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-06-2027PE21000.00", + "oi": 8, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 236.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "24-Jun-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-06-2027PE22000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 378.3, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "24-Jun-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-06-2027PE23000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 574.95, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "24-Jun-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-06-2027PE24000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 835.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "24-Jun-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY24-06-2027PE25000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 571, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 15000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE15000.00", + "oi": 14, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 450, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 23, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 17000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE17000.00", + "oi": 568, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 350, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 36.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 18000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE18000.00", + "oi": 404, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 500, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 53.4, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE19000.00", + "oi": 31, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 85.85, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE20000.00", + "oi": 106, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 725, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 148.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE21000.00", + "oi": 2, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 241.85, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE22000.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 374.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE23000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 552.95, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE24000.00", + "oi": 6, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 785.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "30-Dec-2027", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY30-12-2027PE25000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 530, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "29-Jun-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY29-06-2028PE19000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 91.15, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "29-Jun-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY29-06-2028PE20000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 152.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "29-Jun-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY29-06-2028PE21000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 240.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "29-Jun-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY29-06-2028PE22000.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 362.55, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "29-Jun-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY29-06-2028PE23000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 525.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "29-Jun-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY29-06-2028PE24000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 733.75, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "29-Jun-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY29-06-2028PE25000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 350, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 993.55, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 18000, + "expiry": "28-Dec-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-12-2028PE18000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 100, + "totSellQty": 0, + "bidQty": 100, + "bidPrice": 13.3, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "28-Dec-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-12-2028PE19000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 94.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "28-Dec-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-12-2028PE20000.00", + "oi": 62, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 600, + "totSellQty": 525, + "bidQty": 600, + "bidPrice": 150.5, + "askQty": 500, + "askPrice": 650 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "28-Dec-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-12-2028PE21000.00", + "oi": 49, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 75, + "bidQty": 250, + "bidPrice": 235.15, + "askQty": 25, + "askPrice": 770 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "28-Dec-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-12-2028PE22000.00", + "oi": 5, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 375, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 347.8, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "28-Dec-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-12-2028PE23000.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 495.6, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "28-Dec-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-12-2028PE24000.00", + "oi": 20, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 750, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 683.5, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "28-Dec-2028", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-12-2028PE25000.00", + "oi": 4, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 3, + "iv": 21.89, + "ltp": 999, + "change": -312, + "pChange": -23.79862700228833, + "totBuyQty": 325, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 920.05, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 19000, + "expiry": "28-Jun-2029", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-06-2029PE19000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 94.8, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 20000, + "expiry": "28-Jun-2029", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-06-2029PE20000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 150.1, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 21000, + "expiry": "28-Jun-2029", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-06-2029PE21000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 227.25, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 22000, + "expiry": "28-Jun-2029", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-06-2029PE22000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 330.9, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 23000, + "expiry": "28-Jun-2029", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-06-2029PE23000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 465.3, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 24000, + "expiry": "28-Jun-2029", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-06-2029PE24000.00", + "oi": 1, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 250, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 634.7, + "askQty": 0, + "askPrice": 0 + } + }, + { + "ts": "2024-11-28 14:45:00+05:30", + "strike": 25000, + "expiry": "28-Jun-2029", + "underlying": "NIFTY", + "underlyingValue": 23924.85, + "ce": { + "id": null, + "oi": null, + "oiChg": null, + "oiPctChg": null, + "totTradedVol": null, + "iv": null, + "ltp": null, + "change": null, + "pChange": null, + "totBuyQty": null, + "totSellQty": null, + "bidQty": null, + "bidPrice": null, + "askQty": null, + "askPrice": null + }, + "pe": { + "id": "OPTIDXNIFTY28-06-2029PE25000.00", + "oi": 0, + "oiChg": 0, + "oiPctChg": 0, + "totTradedVol": 0, + "iv": 0, + "ltp": 0, + "change": 0, + "pChange": 0, + "totBuyQty": 350, + "totSellQty": 0, + "bidQty": 250, + "bidPrice": 842.7, + "askQty": 0, + "askPrice": 0 + } + } +] \ No newline at end of file diff --git a/nse/controllers/options/index.py b/nse/controllers/options/index.py new file mode 100644 index 0000000..81fd0a7 --- /dev/null +++ b/nse/controllers/options/index.py @@ -0,0 +1,315 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 28th Nov., 2024 + + OBJECTIVE: + + To provide a way to retrieve dates of important events like financial-results, stock-splits, fund-raising, etc. + from NSE's portal. + + NOTE: This method involves web scraping. It is good for proof-of-concept development, but it is recommended that + more professional data-sources be used when the product starts becoming mature. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.date_time import date_time + +# NSE-related utils: +from utils_v2.nse.controllers.base import AsyncNSEBase +from utils_v2.nse.models.api_call import NSEApiResponse + +# To make REST-ful API calls: +import httpx + +# To work with date and time: +import datetime + +# To work with datatypes: +from typing import Any, List + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEIndexOptionChain(AsyncNSEBase): + + # Index Names: + INDEX_NIFTY = "NIFTY" + INDEX_BANKNIFTY = "BANKNIFTY" + INDEX_FINNIFTY = "FINNIFTY" + INDEX_MIDCPNIFTY = "MIDCPNIFTY" + INDEX_NIFTYNXT50 = "NIFTYNXT50" + + def __init__( + self, + http_client: httpx.AsyncClient, + cookies_refresh_interval: int | float = 300, + debug = True, + debug_prefix = "NSE (IdxOC) | ", + debug_only_errors = True + ): + + # Pass on the initialization to the parent: + super().__init__( + base_url = r"https://www.nseindia.com/option-chain", + data_url = r"https://www.nseindia.com/api/option-chain-indices", + http_client = http_client, + cookies_refresh_interval = cookies_refresh_interval, + debug = debug, + debug_prefix = debug_prefix, + debug_only_errors = debug_only_errors + ) + + async def get_data( + self, + index_name: str, + return_raw: bool = False, + refresh_cookies: bool = True, + force_refresh_cookies: bool = False, + retry_count: int = 1, + backoff_seconds: int | float = 0.5, + backoff_multiplier: float = 1.1 + ) -> NSEApiResponse: + + """ + To get the data of the corporate event calendar. + :param index_name: The name of the index whose option chain is needed. Use one of the options created within the + scope of this class. + :param return_raw: Whether you want the raw JSON from NSE or you want it formatted. + :param refresh_cookies: Whether, or not, you would like to refresh the cookies. + :param force_refresh_cookies: If set to True, cookies will be refreshed even if not timed out. If set to False, + cookies will be refreshed only when the interval passed to the constructor has elapsed since the last + successful refresh. + :param retry_count: The no. of times to try to get the data from the API. + :param backoff_seconds: The delay between unsuccessful API calls. + :param backoff_multiplier: The multiplier to add to the delay to change delay. + :return: The raw or formatted event calendar data in the 'data' field of the response model. + """ + + # Make the API call: + api_response = await self.get( + params = {"symbol": index_name}, + refresh_cookies = refresh_cookies, + force_refresh_cookies = force_refresh_cookies, + retry_count = retry_count, + backoff_seconds = backoff_seconds, + backoff_multiplier = backoff_multiplier + ) + + # If the API call was successful: + if api_response.httpCode in [200]: + api_response.success = True + if return_raw: api_response.data = await api_response.get_json() + else: + try: api_response.data = self.format_data( + raw_json = await api_response.get_json(), + timestamp = date_time.get_current_utc_date_time(as_string = False), + raise_exception = True + ) + except Exception as exception: + api_response.exception = exception + api_response.success = False + + # Done here: + return api_response + + def format_data( + self, + raw_json: dict, + timestamp: datetime.datetime = None, + raise_exception: bool = False + ) -> List[dict] | None: + + """ + We format the data here to be able to retrieve it properly later. + :param raw_json: The raw data as scraped from NSE. + :param timestamp: The timestamp at which the data was scraped. This shall be useful for data retrieval from the + database, later. + :param raise_exception: If set to True, any exception will be propagated. If set to False, any exception will be + suppressed internally. + :return: The formatted data if successful, else None. + """ + + # Can't do anything if the chain itself is null: + if raw_json is None: return raw_json + + # Start by assuming failure: + formatted_chain = None + + # Ensure that we've got a proper timestamp: + if timestamp is None: timestamp = date_time.get_current_utc_date_time(as_string = False) + + try: + + # Start at the expiry-level: + expiry_dates = raw_json["records"]["expiryDates"] + semi_formatted_chain = {e: None for e in expiry_dates} + + # Iterate through the raw records and start plugging them into the formatted records: + for record in raw_json["records"]["data"]: + + # Extract some variables: + expiry_date = record["expiryDate"] + strike_price = record["strikePrice"] + + # Start building the needed structure: + if semi_formatted_chain.get(expiry_date) is None: semi_formatted_chain[expiry_date] = {} + if semi_formatted_chain[expiry_date].get(strike_price) is None: + semi_formatted_chain[expiry_date][strike_price] = { + "scrapeTs": timestamp, + "strike": record["strikePrice"], + "expiry": record["expiryDate"], + "expiryTs": self.parse_datetime_string( + dt_str = record["expiryDate"], + dt_formats = ["%d-%b-%Y"], + input_tz = date_time.TIMEZONE_IST, + output_tz = date_time.TIMEZONE_UTC + ), + "expiryTz": "Asia/Kolkata", + } + + # Add the CE/PE data: + for right in ["CE", "PE"]: + right_data = record.get(right, {}) + if right_data: + semi_formatted_chain[expiry_date][strike_price]["underlying"] = right_data["underlying"] + semi_formatted_chain[expiry_date][strike_price]["underlyingValue"] = right_data["underlyingValue"] + semi_formatted_chain[expiry_date][strike_price][right.lower()] = {} + semi_formatted_chain[expiry_date][strike_price][right.lower()] = { + "id": right_data.get("identifier"), + "oi": right_data.get("openInterest"), + "oiChg": right_data.get("changeinOpenInterest"), + "oiPctChg": right_data.get("pchangeinOpenInterest"), + "totTradedVol": right_data.get("totalTradedVolume"), + "iv": right_data.get("impliedVolatility"), + "ltp": right_data.get("lastPrice"), + "change": right_data.get("change"), + "pChange": right_data.get("pChange"), + "totBuyQty": right_data.get("totalBuyQuantity"), + "totSellQty": right_data.get("totalSellQuantity"), + "bidQty": right_data.get("bidQty"), + "bidPrice": right_data.get("bidprice"), + "askQty": right_data.get("askQty"), + "askPrice": right_data.get("askPrice") + } + + # Final formatting: + formatted_chain = [] + for expiry, _0 in semi_formatted_chain.items(): + if isinstance(_0, dict): + for strike_price, _1 in _0.items(): + _1["ce"] = _1.pop("ce") + _1["pe"] = _1.pop("pe") + formatted_chain.append(_1) + + # If something goes wrong: + except Exception as exception: + formatted_chain = None + if raise_exception: raise + + # Done here: + return formatted_chain + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + # Create an HTTP client: + test_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 2.5, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 2.5 # ....... Time to wait for receiving data. + ) + ) + + # Create an instance of the scraper, and refresh its cookies: + my_nse = NSEIndexOptionChain( + http_client = test_client, + debug_only_errors = False + ) + + # Get and show the data: + api_response = await my_nse.get_data( + index_name = NSEIndexOptionChain.INDEX_NIFTY, + return_raw = False, + retry_count = 3, + backoff_seconds = 1, + backoff_multiplier = 2.0 + ) + print("SUMMARY:", api_response.to_markdown(), "\n---\n\n") + if api_response.success: print("OPTION CHAIN:", json.to_string(api_response.data[:3], default = str)) + + asyncio.run(main()) diff --git a/nse/models/__init__.py b/nse/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nse/models/api_call.py b/nse/models/api_call.py new file mode 100644 index 0000000..5c9aa00 --- /dev/null +++ b/nse/models/api_call.py @@ -0,0 +1,132 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Wednesday, 30th Oct., 2024. + + OBJECTIVE: + + To provide a data model for describing the API response from Google's APIs. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, model_validator +from typing import Optional, Literal, Union, Dict, List, Any + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEApiResponse(BaseModel): + + action: str = Field(frozen = False, default = None) + + url: str | None = Field(frozen = True) + method: str | None = Field(frozen = True) + inputs: Any | None = Field(frozen = True) + response: Any = None + httpCode: int = None + + success: bool = False + message: str = None + data: Any = None + + exception: Any = None + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "forbid" + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_markdown(self): + if self.exception: message = "❌ *NSE API EXCEPTION:* ❌\n\n" + else: message = "*NSE API RESPONSE:*\n\n" + message += f"*ACTION:*\n`{self.action}`\n\n" + message += f"*URL:*\n`{self.url}`\n\n" + message += f"*METHOD:*\n`{self.method}`\n\n" + message += f"*RESPONSE:*\n`{self.response}`\n\n" + message += f"*SUCCESS:*\n`{self.success}`\n\n" + message += f"*MESSAGE:*\n`{self.message}`\n\n" + message += f"*EXCEPTION:*\n`{self.exception.__class__.__name__}: {str(self.exception)}`\n\n" + return message + + async def get_json(self): + try: return self.response.json() + except: return {} + + async def get_content(self): + try: return self.response.content + except: return b"" + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/nse/models/calendar.py b/nse/models/calendar.py new file mode 100644 index 0000000..2405e7f --- /dev/null +++ b/nse/models/calendar.py @@ -0,0 +1,396 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 9th Jan., 2025. + + OBJECTIVE: + + To provide data models for NSE's calendar events. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, AwareDatetime, computed_field +from typing import Optional, Literal, List + +# My utils: +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with date and time: +import datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEHoliday(BaseModel): + + scrapeTs: AwareDatetime = Field( + description = "The time (UTC) at which this this data was scraped.", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + ts: AwareDatetime = Field( + description = "The date which is to be recorded as a holiday.", + frozen = True + ) + + tz: str = Field( + description = "The timezone in which the date has to be interpreted.", + frozen = True, + default = "Asia/Kolkata" + ) + + event: str = Field( + description = "The name of the event/occasion.", + frozen = True + ) + + type: List[str] = Field( + description = "One or more types of holiday for this event.", + frozen = True, + examples = ["CBM", "CD", "CM", "CMOT", "COM", "FO", "IRD", "MF", "NDM", "NTRP", "SLBS"] + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "ignore" + + # ┏┓ ┏┓ ┓ ┏┓• ┓ ┓ + # ┣┫┓┏╋┏┓━━┃ ┏┓┏┳┓┏┓┓┏╋┏┓┏┫ ┣ ┓┏┓┃┏┫┏ + # ┛┗┗┻┗┗┛ ┗┛┗┛┛┗┗┣┛┗┻┗┗ ┗┻ ┻ ┗┗ ┗┗┻┛ + # ┛ + + @computed_field + def year(self) -> int: + return self.ts.year + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓┏ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗┛ + + @field_validator("ts", "scrapeTs", mode = "before") + def parse_date_time(cls, value): + if isinstance(value, datetime.datetime): + value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_json(self) -> dict: + return { + "event": self.event, + "ts": self.ts.timestamp(), + "tz": self.tz, + "type": self.type + } + + +# --------------------------------------------------------------------------------------------------------------------- + + +class NSECorporateEvent(BaseModel): + + scrapeTs: AwareDatetime = Field( + description = "The time (UTC) at which this this data was scraped.", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + kind: str | None = Field( + description = "The type of 'index'.", + frozen = True, + default = None + ) + + symbol: str = Field( + description = "The trading symbol of the listed entity.", + frozen = True + ) + + name: str = Field( + description = "The full name of the listed entity.", + frozen = True + ) + + ts: AwareDatetime = Field( + description = "The date (UTC) of the corporate event.", + frozen = True + ) + + tz: str = Field( + description = "The timezone in which the date has to be interpreted.", + frozen = True, + default = "Asia/Kolkata" + ) + + purpose: str = Field( + description = "The type of the event.", + frozen = True + ) + + description: str = Field( + description = "A brief description of the event.", + frozen = True + ) + + attachment: str | None = Field( + description = "Any file attachment with the event announcement.", + frozen = True, + default = None + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "ignore" + + # ┏┓ ┏┓ ┓ ┏┓• ┓ ┓ + # ┣┫┓┏╋┏┓━━┃ ┏┓┏┳┓┏┓┓┏╋┏┓┏┫ ┣ ┓┏┓┃┏┫┏ + # ┛┗┗┻┗┗┛ ┗┛┗┛┛┗┗┣┛┗┻┗┗ ┗┻ ┻ ┗┗ ┗┗┻┛ + # ┛ + + pass + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓┏ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗┛ + + @field_validator("ts", "scrapeTs", mode = "before") + def parse_date_time(cls, value): + if isinstance(value, datetime.datetime): + value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_json(self) -> dict: + return { + "symbol": self.symbol, + "name": self.name, + "kind": self.kind, + "purpose": self.purpose, + "description": self.description, + "attachment": self.attachment, + "ts": self.ts.timestamp(), + "tz": self.tz + } + + +# --------------------------------------------------------------------------------------------------------------------- + + +class NSECorporateAction(BaseModel): + + scrapeTs: AwareDatetime = Field( + description = "The time (UTC) at which this this data was scraped.", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + kind: str | None = Field( + description = "The type of 'index'.", + frozen = True, + default = None + ) + + symbol: str = Field( + description = "The trading symbol of the listed entity.", + frozen = True + ) + + name: str = Field( + description = "The full name of the listed entity.", + frozen = True + ) + + isin: str = Field( + description = "The ISIN code of the listed entity.", + frozen = True + ) + + series: str = Field( + description = "The series code of the listed entity.", + frozen = True + ) + + exTs: AwareDatetime | None = Field( + description = "The ex-date/ex-dividend-date (UTC) ", + frozen = True + ) + + recTs: AwareDatetime | None = Field( + description = "The record date (UTC).", + frozen = True + ) + + bcStartTs: AwareDatetime | None = Field( + description = "The book-closure start date (UTC).", + frozen = True + ) + + bcEndTs: AwareDatetime | None = Field( + description = "The book-closure end date (UTC).", + frozen = True + ) + + ndStartTs: AwareDatetime | None = Field( + description = "The notice-date (start) date (UTC).", + frozen = True + ) + + ndEndTs: AwareDatetime | None = Field( + description = "The notice-date (end) date (UTC).", + frozen = True + ) + + caBroadcastTs: AwareDatetime | None = Field( + description = "The corporate-action broadcast date (UTC).", + frozen = True + ) + + tz: str = Field( + description = "The timezone in which all dates have to be interpreted.", + frozen = True, + default = "Asia/Kolkata" + ) + + action: str = Field( + description = "The subject of the corporate action.", + frozen = True + ) + + faceVal: float | int = Field( + description = "The face-value of the share of the entity.", + frozen = True + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "ignore" + + # ┏┓ ┏┓ ┓ ┏┓• ┓ ┓ + # ┣┫┓┏╋┏┓━━┃ ┏┓┏┳┓┏┓┓┏╋┏┓┏┫ ┣ ┓┏┓┃┏┫┏ + # ┛┗┗┻┗┗┛ ┗┛┗┛┛┗┗┣┛┗┻┗┗ ┗┻ ┻ ┗┗ ┗┗┻┛ + # ┛ + + pass + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓┏ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗┛ + + @field_validator( + "scrapeTs", + "exTs", "recTs", + "bcStartTs", "bcEndTs", + "ndStartTs", "ndEndTs", + "caBroadcastTs", + mode = "before" + ) + def parse_date_time(cls, value): + if isinstance(value, datetime.datetime): + value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_json(self) -> dict: + return { + "symbol": self.symbol, + "name": self.name, + "isin": self.isin, + "series": self.series, + "kind": self.kind, + "action": self.action, + "faceVal": self.faceVal, + "exTs": self.exTs.timestamp() if isinstance(self.exTs, datetime.datetime) else self.exTs, + "recTs": self.recTs.timestamp()if isinstance(self.recTs, datetime.datetime) else self.recTs, + "bcStartTs": self.bcStartTs.timestamp()if isinstance(self.bcStartTs, datetime.datetime) else self.bcStartTs, + "bcEndTs": self.bcEndTs.timestamp()if isinstance(self.bcEndTs, datetime.datetime) else self.bcEndTs, + "ndStartTs": self.ndStartTs.timestamp()if isinstance(self.ndStartTs, datetime.datetime) else self.ndStartTs, + "ndEndTs": self.ndEndTs.timestamp()if isinstance(self.ndEndTs, datetime.datetime) else self.ndEndTs, + "caBroadcastTs": self.caBroadcastTs.timestamp()if isinstance(self.caBroadcastTs, datetime.datetime) else self.caBroadcastTs, + "tz": self.tz + } + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/nse/models/indices.py b/nse/models/indices.py new file mode 100644 index 0000000..fb13543 --- /dev/null +++ b/nse/models/indices.py @@ -0,0 +1,319 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 14th Jan., 2025. + + OBJECTIVE: + + To provide data model(s) for NSE's index information. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, AwareDatetime, computed_field +from typing import Optional, Literal, List + +# My utils: +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with date and time: +import datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEIndexInfo(BaseModel): + + scrapeTs: AwareDatetime = Field( + description = "The time (UTC) at which this this data was scraped.", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + tz: str = Field( + description = "The timezone in which the dates have to be interpreted.", + frozen = True, + default = "Asia/Kolkata" + ) + + symbol: str = Field( + description = "The symbol of this index.", + frozen = True + ) + + name: str = Field( + description = "The display name of this index.", + frozen = True + ) + + kind: str = Field( + description = "The category/type of this index.", + frozen = True + ) + + open: float | None = Field( + description = "The opening price of this index.", + frozen = True + ) + + high: float | None = Field( + description = "The highest price of this index.", + frozen = True + ) + + low: float | None = Field( + description = "The lowest price of this index.", + frozen = True + ) + + close: float | None = Field( + description = "The LTP of this index.", + frozen = True + ) + + prevClose: float | None = Field( + description = "The previous session's closing price of this index.", + frozen = True + ) + + yearHigh: float | None = Field( + description = "The year-high value of this symbol.", + frozen = True + ) + + yearLow: float | None = Field( + description = "The year-low value of this symbol.", + frozen = True + ) + + pChg: float | None = Field( + description = "The percent change since the last trading session.", + frozen = True + ) + + advances: int | None = Field( + description = "The no. of constituent symbols that are running positive.", + frozen = True + ) + + declines: int | None = Field( + description = "The no. of constituent symbols that are running negative.", + frozen = True + ) + + unchanged: int | None = Field( + description = "The no. of constituent symbols that are running flat.", + frozen = True + ) + + pChg30d: float | None = Field( + description = "The percent change in the last month.", + frozen = True + ) + + pChg365d: float | None = Field( + description = "The percent change in the last year.", + frozen = True + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "ignore" + + # ┏┓ ┏┓ ┓ ┏┓• ┓ ┓ + # ┣┫┓┏╋┏┓━━┃ ┏┓┏┳┓┏┓┓┏╋┏┓┏┫ ┣ ┓┏┓┃┏┫┏ + # ┛┗┗┻┗┗┛ ┗┛┗┛┛┗┗┣┛┗┻┗┗ ┗┻ ┻ ┗┗ ┗┗┻┛ + # ┛ + + @computed_field() + def chg(self) -> float: + return self.close - self.prevClose + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓┏ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗┛ + + @field_validator("scrapeTs", mode = "before") + def parse_date_time(cls, value): + if isinstance(value, datetime.datetime): + value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_json(self) -> dict: + model_json = self.model_dump() + model_json["scrapeTs"] = model_json["scrapeTs"].timestamp() + return model_json + + +# # --------------------------------------------------------------------------------------------------------------------- +# +# +# class NSEPreMarketData(BaseModel): +# +# scrapeTs: AwareDatetime = Field( +# description = "The time (UTC) at which this this data was scraped.", +# frozen = True, +# default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) +# ) +# +# ts: AwareDatetime = Field( +# description = "The time (UTC) at which this data was made available by NSE.", +# frozen = True +# ) +# +# tz: str = Field( +# description = "The timezone in which the dates have to be interpreted.", +# frozen = True, +# default = "Asia/Kolkata" +# ) +# +# key: str | None = Field( +# description = "The kind of list that was fetched.", +# frozen = True, +# default = None, +# examples = ["NIFTY", "BANKNIFTY", "SME", "FO", "OTHERS", "ALL"] +# ) +# +# advances: int = Field( +# description = "The no. of symbols that will be opening positive.", +# frozen = True +# ) +# +# declines: int = Field( +# description = "The no. of symbols that will be opening negative.", +# frozen = True +# ) +# +# unchanged: int = Field( +# description = "The no. of symbols that will be opening flat.", +# frozen = True +# ) +# +# totalMarketCap: float | int | None = Field( +# description = "The total market cap. of all of the listed symbols.", +# frozen = True +# ) +# +# totalTradedValue: float | int | None = Field( +# description = "The total value in Rupees that was traded in this pre-market session.", +# frozen = True +# ) +# +# totalTradedVolume: int | None = Field( +# description = "The total volume that was traded in the pre-market session.", +# frozen = True +# ) +# +# symbols: List[NSEPreMarketSymbol] = Field( +# description = "The actual symbol-wise data.", +# frozen = True +# ) +# +# # ┏┓ ┏• +# # ┃ ┏┓┏┓╋┓┏┓ +# # ┗┛┗┛┛┗┛┗┗┫ +# # ┛ +# +# class Config: +# extra = "ignore" +# +# # ┏┓ ┏┓ ┓ ┏┓• ┓ ┓ +# # ┣┫┓┏╋┏┓━━┃ ┏┓┏┳┓┏┓┓┏╋┏┓┏┫ ┣ ┓┏┓┃┏┫┏ +# # ┛┗┗┻┗┗┛ ┗┛┗┛┛┗┗┣┛┗┻┗┗ ┗┻ ┻ ┗┗ ┗┗┻┛ +# # ┛ +# +# @computed_field() +# def dateIst(self) -> str: +# return date_time.to_timezone(self.ts, timezone = date_time.TIMEZONE_IST).strftime("%Y%m%d") +# +# # ┓┏ ┓• ┓ • +# # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓┏ +# # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗┛ +# +# @field_validator("scrapeTs", "ts", mode = "before") +# def parse_date_time(cls, value): +# if isinstance(value, datetime.datetime): +# value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) +# return value +# +# # ┏┓ ┏┓ +# # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ +# # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ +# +# def to_json(self) -> dict: +# model_json = self.model_dump() +# model_json["scrapeTs"] = model_json["scrapeTs"].timestamp() +# for s in model_json["symbols"]: s["scrapeTs"].timestamp() +# return model_json + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/nse/models/ipo.py b/nse/models/ipo.py new file mode 100644 index 0000000..0fb0227 --- /dev/null +++ b/nse/models/ipo.py @@ -0,0 +1,208 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Thursday, 9th Jan., 2025. + + OBJECTIVE: + + To provide data models for NSE's calendar events. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, AwareDatetime, computed_field +from typing import Optional, Literal, List + +# My utils: +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with date and time: +import datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEIPO(BaseModel): + + scrapeTs: AwareDatetime = Field( + description = "The time (UTC) at which this this data was scraped.", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + issueStartTs: AwareDatetime = Field( + description = "The start date (UTC) of the issue.", + frozen = True + ) + + issueEndTs: AwareDatetime = Field( + description = "The end date (UTC) of the issue.", + frozen = True + ) + + listingTs: AwareDatetime | None = Field( + description = "The date when the company was listed on the exchange.", + frozen = True, + default = None + ) + + tz: str = Field( + description = "The timezone in which the dates have to be interpreted.", + frozen = True, + default = "Asia/Kolkata" + ) + + symbol: str = Field( + description = "The trading symbol of this listing.", + frozen = True + ) + + name: str = Field( + description = "The name of the parent company of this listing.", + frozen = True + ) + + status: Literal["Past", "Active", "Forthcoming"] | str = Field( + description = "Whether this IPO is active or has closed.", + frozen = True, + default = "Past" + ) + + kind: str | None = Field( + description = "The category under which this IPO falls.", + frozen = True, + default = None, + examples = ["SME", "EQ", "DEBT"] + ) + + upperBand: float | None = Field( + description = "The upper price of the price band.", + frozen = True, + default = None + ) + + lowerBand: float | None = Field( + description = "The lower price of the price band.", + frozen = True, + default = None + ) + + issuePrice: float | None = Field( + description = "The final price at which the shares were sold.", + frozen = True, + default = None + ) + + offerQty: int | None = Field( + description = "How many shares are being offered for sale by the parent.", + frozen = True, + default = None + ) + + bidQty: int | None = Field( + description = "How many shares investors are willing to buy.", + frozen = True, + default = None + ) + + bidFactor: float | None = Field( + description = "How many times over has the IPO been subscribed.", + frozen = True, + default = None + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "ignore" + + # ┏┓ ┏┓ ┓ ┏┓• ┓ ┓ + # ┣┫┓┏╋┏┓━━┃ ┏┓┏┳┓┏┓┓┏╋┏┓┏┫ ┣ ┓┏┓┃┏┫┏ + # ┛┗┗┻┗┗┛ ┗┛┗┛┛┗┗┣┛┗┻┗┗ ┗┻ ┻ ┗┗ ┗┗┻┛ + # ┛ + + pass + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓┏ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗┛ + + @field_validator("scrapeTs", "issueStartTs", "issueEndTs", mode = "before") + def parse_date_time(cls, value): + if isinstance(value, datetime.datetime): + value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_json(self) -> dict: + return self.model_dump() + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/nse/models/pre_market.py b/nse/models/pre_market.py new file mode 100644 index 0000000..bc80a5d --- /dev/null +++ b/nse/models/pre_market.py @@ -0,0 +1,300 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 13th Jan., 2025. + + OBJECTIVE: + + To provide data model(s) for NSE's pre-market data. This will be useful for catching gap-ups and gap-downs. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, AwareDatetime, computed_field +from typing import Optional, Literal, List + +# My utils: +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with date and time: +import datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NSEPreMarketSymbol(BaseModel): + + scrapeTs: AwareDatetime = Field( + description = "The time (UTC) at which this this data was scraped.", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + tz: str = Field( + description = "The timezone in which the dates have to be interpreted.", + frozen = True, + default = "Asia/Kolkata" + ) + + symbol: str = Field( + description = "The trading symbol of this listing.", + frozen = True + ) + + ffmc: float | None = Field( + description = "The free-floating market cap. of this symbol.", + frozen = True + ) + + trigger: str | None = Field( + description = "Any known trigger.", + frozen = True, + default = None + ) + + yearHigh: float | None = Field( + description = "The year-high value of this symbol.", + frozen = True + ) + + yearLow: float | None = Field( + description = "The year-low value of this symbol.", + frozen = True + ) + + prevClose: float | None = Field( + description = "The previous trading session's closing price of this symbol.", + frozen = True + ) + + preMarketPrice: float | None = Field( + description = "The pre-market decided price of this symbol.", + frozen = True + ) + + chg: float | None = Field( + description = "The absolute change between last closing price and the pre-market price.", + frozen = True + ) + + pChg: float | None = Field( + description = "The percent change between last closing price and the pre-market price.", + frozen = True + ) + + totalTradedVolume: int | None = Field( + description = "The total volume that was traded in the pre-market session.", + frozen = True + ) + + totalBuyVolume: int | None = Field( + description = "The total buying volume that was punched-in in the pre-market session.", + frozen = True + ) + + totalSellVolume: int | None = Field( + description = "The total selling volume that was punched-in in the pre-market session.", + frozen = True + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "ignore" + + # ┏┓ ┏┓ ┓ ┏┓• ┓ ┓ + # ┣┫┓┏╋┏┓━━┃ ┏┓┏┳┓┏┓┓┏╋┏┓┏┫ ┣ ┓┏┓┃┏┫┏ + # ┛┗┗┻┗┗┛ ┗┛┗┛┛┗┗┣┛┗┻┗┗ ┗┻ ┻ ┗┗ ┗┗┻┛ + # ┛ + + @computed_field() + def dateIst(self) -> str: + return date_time.to_timezone(self.scrapeTs, timezone = date_time.TIMEZONE_IST).strftime("%Y%m%d") + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓┏ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗┛ + + @field_validator("scrapeTs", mode = "before") + def parse_date_time(cls, value): + if isinstance(value, datetime.datetime): + value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_json(self) -> dict: + model_json = self.model_dump() + model_json["scrapeTs"] = model_json["scrapeTs"].timestamp() + return model_json + + +# --------------------------------------------------------------------------------------------------------------------- + + +class NSEPreMarketData(BaseModel): + + scrapeTs: AwareDatetime = Field( + description = "The time (UTC) at which this this data was scraped.", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + ts: AwareDatetime = Field( + description = "The time (UTC) at which this data was made available by NSE.", + frozen = True + ) + + tz: str = Field( + description = "The timezone in which the dates have to be interpreted.", + frozen = True, + default = "Asia/Kolkata" + ) + + key: str | None = Field( + description = "The kind of list that was fetched.", + frozen = True, + default = None, + examples = ["NIFTY", "BANKNIFTY", "SME", "FO", "OTHERS", "ALL"] + ) + + advances: int = Field( + description = "The no. of symbols that will be opening positive.", + frozen = True + ) + + declines: int = Field( + description = "The no. of symbols that will be opening negative.", + frozen = True + ) + + unchanged: int = Field( + description = "The no. of symbols that will be opening flat.", + frozen = True + ) + + totalMarketCap: float | int | None = Field( + description = "The total market cap. of all of the listed symbols.", + frozen = True + ) + + totalTradedValue: float | int | None = Field( + description = "The total value in Rupees that was traded in this pre-market session.", + frozen = True + ) + + totalTradedVolume: int | None = Field( + description = "The total volume that was traded in the pre-market session.", + frozen = True + ) + + symbols: List[NSEPreMarketSymbol] = Field( + description = "The actual symbol-wise data.", + frozen = True + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "ignore" + + # ┏┓ ┏┓ ┓ ┏┓• ┓ ┓ + # ┣┫┓┏╋┏┓━━┃ ┏┓┏┳┓┏┓┓┏╋┏┓┏┫ ┣ ┓┏┓┃┏┫┏ + # ┛┗┗┻┗┗┛ ┗┛┗┛┛┗┗┣┛┗┻┗┗ ┗┻ ┻ ┗┗ ┗┗┻┛ + # ┛ + + @computed_field() + def dateIst(self) -> str: + return date_time.to_timezone(self.ts, timezone = date_time.TIMEZONE_IST).strftime("%Y%m%d") + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓┏ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗┛ + + @field_validator("scrapeTs", "ts", mode = "before") + def parse_date_time(cls, value): + if isinstance(value, datetime.datetime): + value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_json(self) -> dict: + model_json = self.model_dump() + model_json["scrapeTs"] = model_json["scrapeTs"].timestamp() + for s in model_json["symbols"]: s["scrapeTs"].timestamp() + return model_json + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/payments/__init__.py b/payments/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/payments/safaricom/__init__.py b/payments/safaricom/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/payments/safaricom/controllers/__init__.py b/payments/safaricom/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/payments/safaricom/controllers/m_pesa_express.py b/payments/safaricom/controllers/m_pesa_express.py new file mode 100644 index 0000000..576ccf1 --- /dev/null +++ b/payments/safaricom/controllers/m_pesa_express.py @@ -0,0 +1,410 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Saturday, 7th Dec., 2024 + + OBJECTIVE: + + To make payments requests from M-PESA Express. + + REFERENCES: + + 1. Simulator & Docs: https://developer.safaricom.co.ke/APIs/MpesaExpressSimulate + 2. Postman Collection: https://api.postman.com/collections/4395533-1a8f1c81-0502-4f9d-8699-d45551834b7d?access_key=PMAT-01J8R72MBSHP5CJ4J9Q46TG6G9 + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# Data models: +from utils_v2.payments.safaricom.models.auth import MPesaExpressAuthorization +from utils_v2.payments.safaricom.models.api_call import MPesaExpressApiResponse + +# To make REST-ful requests: +import httpx + +# To work with datatypes: +from typing import Literal + +# To work with date and time: +import datetime + +# Misc: +import base64 + +# For debugging: +from icecream import IceCreamDebugger +import inspect + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class SafaricomMPesaExpress: + + def __init__( + self, + auth: MPesaExpressAuthorization, + http_client: httpx.AsyncClient = None, + debug = True, + debug_prefix = "M-Pesa Exp | ", + debug_only_errors = True + ): + + # Prepare the debugging utility: + self.__debug_prefix = debug_prefix + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + self.__debug_only_errors = debug_only_errors + + # Accept the input configuration: + self.__auth = auth + + # Accept/create an HTTP client to work with: + if http_client: self.__http_client = http_client + else: self.__http_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 5.0, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 120.0 # ..... Time to wait for receiving data. + ) + ) + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + def debug_only_errors(self): + self.__debug_only_errors = True + + def debug_everything(self): + self.__debug_only_errors = False + + # ┏┓┏┓┳ ┏┓ ┓┓• + # ┣┫┃┃┃ ┃ ┏┓┃┃┓┏┓┏┓ + # ┛┗┣┛┻ ┗┛┗┻┗┗┗┛┗┗┫ + # ┛ + + async def __get( + self, + url: str, + headers: dict = None, + params: dict = None + ) -> MPesaExpressApiResponse: + + """ + To call an API using the GET method. + :param url: The URL to call. + :param headers: The headers to pass. + :param params: The params to send in the query string itself. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = MPesaExpressApiResponse( + action = inspect.stack()[1].function, + url = url, + method = "GET" + ) + + try: + + # Make the API call: + response = await self.__http_client.get( + url = url, + headers = headers, + params = params + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = response.reason_phrase + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self.__printer(exception, api_response.url, api_response.method, headers, params) + + # Done here: + return api_response + + async def __post( + self, + url: str, + headers: dict = None, + json: dict = None, + data: dict = None, + params: dict = None, + content: str | bytes = None, + files: dict = None + ) -> MPesaExpressApiResponse: + + """ + To call an API using the POST method. + :param url: The URL to call. + :param headers: The headers to pass. + :param json: The params to send in the JSON body. + :param data: The params to send in the form-data in the body. + :param params: The params to send in the query string itself. + :param content: The raw content to be sent in the body (typically as an octet-stream). + :param files: Any file that you may want to send. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = MPesaExpressApiResponse( + action = inspect.stack()[1].function, + url = url, + method = "POST" + ) + + try: + + # Make the API call: + response = await self.__http_client.post( + url = url, + headers = headers, + json = json, + data = data, + params = params, + content = content, + files = files + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = response.reason_phrase + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self.__printer(exception, api_response.url, api_response.method, headers, json, data) + + # Done here: + return api_response + + # ┓┏ ┓ + # ┣┫┏┓┃┏┓┏┓┏┓┏ + # ┛┗┗ ┗┣┛┗ ┛ ┛ + # ┛ + + def generate_password( + self, + timestamp: str + ) -> str: + + """ + The password is a combination of the short code, the app's passkey, and the timestamp in base64 + encoded string. + DOCUMENTATION: + 1. https://developer.safaricom.co.ke/APIs/Authorization + :param timestamp: The time (YYYYMMDDHHmmss) at which the request is being made. + :return: The base-64 encoded string that has to be used as the password. + """ + + if not self.__debug_only_errors: + self.__printer("Generating Password") + + if timestamp is None: timestamp = "" + if self.__auth.appPasskey is None: self.__auth.appPasskey = "" + if self.__auth.businessShortCode is None: self.__auth.businessShortCode = "" + return base64.b64encode((self.__auth.businessShortCode + self.__auth.appPasskey + timestamp).encode()).decode() + + # ┏┓ + # ┃┃┏┓┓┏┏┳┓┏┓┏┓╋┏ + # ┣┛┗┻┗┫┛┗┗┗ ┛┗┗┛ + # ┛ + + async def request_payment( + self, + amount: float | int, + party_a: str, + type: Literal["CustomerPayBillOnline", "CustomerBuyGoodsOnline"], + reference: str, + description: str, + callback_url: str = None, + payer_no: str = None, + party_b: str = None, + ) -> MPesaExpressApiResponse: + + """ + To request a payment from a user. When this method is called, the user's phone will immediately receive a flash + message with the payment details and payment options. The user then gets to choose his action. + DOCUMENTATION: + 1. https://developer.safaricom.co.ke/APIs/MpesaExpressSimulate + :param amount: The amount in Kenyan Shillings that the user must pay. + :param party_a: The phone no. that will make the payment. Needs to be a valid Safaricom no. of the format + 2547xxxxxxxx and must be registered with M-Pesa. + :param type: "CustomerPayBillOnline" for PayBill nos. and "CustomerBuyGoodsOnline" for Till nos. + :param reference: A reference id from your system (not Safaricom's system) for you to identify this transaction. + This value will be displayed to the paying customer. Can be max. of 12 characters long. + :param description: A description about the payment. Can be max. of 13 characters long. + :param callback_url: The URL that will receive a webhook callback when the customer either pays or declines the + payment request. If not provided, the callback URL from the auth details will be used. + :param payer_no: The phone no. that shall receive the payment prompt. If not provided, the value of 'party_a' + will be copied here. + :param party_b: The organization that receives the funds. If not provided, the Business Short Code from the auth + details will be used. + :return: + """ + + # Prepare the inputs: + request_ts = datetime.datetime.now().strftime("%Y%m%d%H%M%S") + access_token = await self.__auth.get_access_token(http_client = self.__http_client, force_refresh = False) + input_headers = {"Authorization": f"Bearer {access_token}"} + input_json = { + "BusinessShortCode": self.__auth.businessShortCode, + "Password": self.generate_password(timestamp = request_ts), + "Timestamp": request_ts, + "TransactionType": type, + "PartyA": party_a, + "PhoneNumber": payer_no or party_a, + "Amount": str(int(amount)), + "PartyB": party_b or self.__auth.businessShortCode, + "CallBackURL": callback_url or self.__auth.callbackUrl, + "AccountReference": reference, + "TransactionDesc": description[:13] if len(description) > 13 else description + } + + # Make the API call: + api_response = await self.__post( + url = r"https://api.safaricom.co.ke/mpesa/stkpush/v1/processrequest", + headers = input_headers, + json = input_json + ) + + # If the call failed: + if api_response.httpCode not in [200]: + api_json = await api_response.get_json() + api_response.message = f"{api_json['errorCode']} -> {api_json['errorMessage']}" + + # If the call failed: + else: + api_json = await api_response.get_json() + success = True if str(api_json.get("ResponseCode")) == "0" else False + api_response.message = api_json.get("ResponseDescription", "N/A") + api_response.data = api_json + api_response.success = success + api_response.referenceId = str(api_json["CheckoutRequestID"]) + + # Done here: + return api_response + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + + m_pesa_auth = MPesaExpressAuthorization( + consumerKey = "kFiHZ3G1vCqxkQfHgMZzPvkPd5ilsJD3", + consumerSecret = "NIp2mp1V0cSEQ63G", + businessShortCode = "4092041", + appPasskey = "cf5c0f05298e63b4039c60e3fd12c2f72e1adac840d3dbd68c88a33b43dbef82", + callbackUrl = None + ) + + my_m_pesa = SafaricomMPesaExpress( + auth = m_pesa_auth + ) + + async def main(): + + # Make the request: + response = await my_m_pesa.request_payment( + amount = 1.00, + party_a = "254700123007", + type = "CustomerPayBillOnline", + reference = "TestTransactionTXN12345678", + description = "Some description about the payment reason...", + # callback_url = r"https://api.thecaoffice.com/converse/test/callback", + callback_url = r"https://v2.api.bicree.com/user/callback/test", + payer_no = "254700123007", + + ) + + # Show the response: + print("SUMMARY:", response.to_markdown(), "\n\n---\n\n") + if response.success: print("DATA:", json.to_string(response.data, default = str)) + else: print("JSON:", json.to_string(await response.get_json(), default = str)) + + asyncio.run(main()) diff --git a/payments/safaricom/models/__init__.py b/payments/safaricom/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/payments/safaricom/models/api_call.py b/payments/safaricom/models/api_call.py new file mode 100644 index 0000000..fb05830 --- /dev/null +++ b/payments/safaricom/models/api_call.py @@ -0,0 +1,135 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Saturday, 7th Dec., 2024. + + OBJECTIVE: + + To provide a data model for describing the API response from Safaricom's M-Pesa Express APIs. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, model_validator +from typing import Optional, Literal, Union, Dict, List, Any + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class MPesaExpressApiResponse(BaseModel): + + action: str = Field(frozen = True, default = None) + url: str = Field(frozen = True) + method: str = Field(frozen = True) + response: Any = None + httpCode: int = None + + success: bool = False + message: str = None + data: Any = None + referenceId: str | None = None + + exception: Any = None + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "forbid" + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_markdown(self): + if self.exception: message = "❌ *M-PESA API EXCEPTION:* ❌\n\n" + else: message = "*M-PESA API RESPONSE:*\n\n" + message += f"*ACTION:*\n`{self.action}`\n\n" + message += f"*URL:*\n`{self.url}`\n\n" + message += f"*METHOD:*\n`{self.method}`\n\n" + message += f"*RESPONSE:*\n`{self.response}`\n\n" + message += f"*SUCCESS:*\n`{self.success}`\n\n" + message += f"*MESSAGE:*\n`{self.message}`\n\n" + message += f"*EXCEPTION:*\n`{self.exception.__class__.__name__}: {str(self.exception)}`\n\n" + return message + + async def get_headers(self): + try: return self.response.headers + except: return {} + + async def get_json(self): + try: return self.response.json() + except: return {} + + async def get_content(self): + try: return self.response.content + except: return b"" + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/payments/safaricom/models/auth.py b/payments/safaricom/models/auth.py new file mode 100644 index 0000000..93787f5 --- /dev/null +++ b/payments/safaricom/models/auth.py @@ -0,0 +1,269 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Wednesday, 30th Oct., 2024. + + OBJECTIVE: + + To provide data model(s) for describing the data needed for M-Pesa Express transactions. + + REFERENCES: + + 1. Documentation: https://developer.safaricom.co.ke/APIs/Authorization + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, model_validator, AwareDatetime +from typing import Optional, Literal, Union, Dict, List, Any + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with date and time: +import datetime +import dateparser + +# To make API calls: +import httpx + +# For asynchronous activities: +import asyncio + +# Misc: +import base64 + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# M-Pesa URLs: +M_PESA_EXPRESS_AUTH_API_URL = r"https://api.safaricom.co.ke/oauth/v1/generate" + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class MPesaExpressAuthorization(BaseModel): + + # Pass the following values from outside. + # These will set the model up. + + consumerKey: str = Field( + description = "the app's consumer key given by safaricom; found in 'my apps'", + frozen = True + ) + + consumerSecret: str = Field( + description = "the app's consumer secret given by safaricom; found in 'my apps'", + frozen = True + ) + + businessShortCode: str = Field( + description = "your app's business short code; found in 'my apps'", + frozen = True + ) + + appPasskey: str = Field( + description = "your app's passkey; taken from human representative", + frozen = True + ) + + callbackUrl: str | None = Field( + description = "the url for m-pesa to inform you about a successful or failed payment", + frozen = True, + pattern = regex.REGEX_HTTPS_URL, + default = None + ) + + # Don't pass these values from outside, + # these will be set and used internally. + + accessToken: str | None = Field( + description = "the token received after authorization", + frozen = False, + default = None + ) + + expiresAt: AwareDatetime = Field( + description = "the time (utc) at which the token will expire", + frozen = False, + default = date_time.as_if_timezone( + date_time.parse_date_time(0), + timezone = date_time.TIMEZONE_UTC + ) + ) + + lastRefresh: datetime.datetime | None = Field( + description = "the time at which the token was last refreshed", + frozen = False, + default = date_time.as_if_timezone( + date_time.parse_date_time(0), + timezone = date_time.TIMEZONE_UTC + ) + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "forbid" + + # ┏┓ • + # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ + # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ + # ┛ + + @property + def expired(self) -> bool: + return True if date_time.get_current_utc_date_time() >= self.expiresAt else False + + @property + def ttl(self): + ttl = (self.expiresAt - date_time.get_current_utc_date_time()).total_seconds() + return max(0, ttl) + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + async def refresh( + self, + http_client: httpx.AsyncClient = None, + force_refresh: bool = False + ) -> bool: + + # Start by assuming failure: + token_refreshed = False + + # If the token is stale or a refresh is being forced: + if self.expired or force_refresh: + + # Prepare the inputs: + url = M_PESA_EXPRESS_AUTH_API_URL + key = base64.b64encode(f"{self.consumerKey}:{self.consumerSecret}".encode()).decode() + input_headers = {"Authorization": "Basic " + key} + input_params = {"grant_type": "client_credentials"} + + # Make the API call: + if http_client: + api_response = await http_client.get( + url = url, + headers = input_headers, + params = input_params + ) + else: + async with httpx.AsyncClient() as http_client: + api_response = await http_client.get( + url = url, + headers = input_headers, + params = input_params + ) + + # If the API call was successful: + if api_response.status_code in [200]: + api_json = api_response.json() + self.accessToken = api_json.get("access_token") + self.lastRefresh = date_time.get_current_utc_date_time() + self.expiresAt = self.lastRefresh + datetime.timedelta(seconds = int(0.95 * float(api_json.get("expires_in")))) + token_refreshed = True + + # Done here: + return token_refreshed + + async def get_access_token( + self, + http_client: httpx.AsyncClient = None, + force_refresh: bool = False + ) -> str | None: + + """ + If you just pick the 'accessToken' variable, you may get a stale token. Using this method will ensure that the + token is refreshed, if needed, before being handed to you. + :param http_client: A preset HTTP client to use. If not given, one will be created inside and used to make the + API call. Giving it from outside could save time in setting up a new client. You may start passing this when + you notice delays. + :param force_refresh: Use this to force a token refresh even if it hasn't expired yet. + :return: Either a valid access token or None if the refreshing fails. + """ + + await self.refresh(http_client = http_client, force_refresh = force_refresh) + return self.accessToken + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + async def main(): + + auth = MPesaExpressAuthorization( + consumerKey = "kFiHZ3G1vCqxkQfHgMZzPvkPd5ilsJD3", + consumerSecret = "NIp2mp1V0cSEQ63G", + businessShortCode = "4092041", + appPasskey = "cf5c0f05298e63b4039c60e3fd12c2f72e1adac840d3dbd68c88a33b43dbef82", + # callbackUrl = "https://www.something.otherthing.com/my/callback/path?with=params" + ) + + print("AUTH:", auth.model_dump_json(indent = 4)) + print("EXPIRED:", auth.expired) + print("TTL:", auth.ttl) + + print("\n\nRefreshing...\n\n") + await auth.get_access_token() + + print("AUTH:", auth.model_dump_json(indent = 4)) + print("EXPIRED:", auth.expired) + print("TTL:", auth.ttl) + + + asyncio.run(main()) diff --git a/pdf/__init__.py b/pdf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pdf/pdf_maker.py b/pdf/pdf_maker.py new file mode 100644 index 0000000..fb97cdd --- /dev/null +++ b/pdf/pdf_maker.py @@ -0,0 +1,1642 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Tuesday, 13th Aug., 2024 + + OBJECTIVE: + + To generate custom PDFs. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For conversion to PDF: +from PyPDF2 import PdfMerger, PdfReader, PdfWriter, Transformation + +# For barcode and QR code generation: +import xml.etree.ElementTree as ET +from barcode import Code128 +from barcode.writer import ImageWriter, SVGWriter +import segno +from PIL import Image, ExifTags, ImageFilter + +# System-level activities: +import os +import io +import inspect +import contextlib + +# For calculations: +import math + +# For PDF generation: +import fitz +from reportlab.pdfgen import canvas +from reportlab.lib.units import mm, cm, inch +from reportlab.lib.styles import ParagraphStyle +from reportlab.platypus import Paragraph +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.ttfonts import TTFont +from reportlab.lib.utils import ImageReader +from reportlab.graphics import renderSVG + +# My utils: +from utils_v2.string import json +from utils_v2.system import files +from utils_v2.string import regex + +# For debugging: +from icecream import IceCreamDebugger +import traceback + +# For random string generation: +import random +import string + +# To validate the font file: +from fontTools import ttLib + +# To make http calls: +import requests +import httpx + +# To work with base64 coding: +import base64 + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make async API calls: +max_connections = 5 +limits = httpx.Limits( + max_keepalive_connections = max_connections, + max_connections = max_connections, + keepalive_expiry = 3600 +) +http_client = httpx.AsyncClient( + limits = limits, + follow_redirects = False, + timeout = httpx.Timeout(None) +) + +# Headers for downloading files: +HEADERS_DOWNLOAD = { + "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:129.0) Gecko/20100101 Firefox/129.0", + "Accept": "*/*", + "Accept-Encoding": "gzip, deflate" +} + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class PDFMaker: + + def __init__( + self, + width, + height, + unit = "mm", + dpi = 72, + debug = True, + debug_prefix = "PDF (M) | ", + raise_exception = True, + **kwargs + ): + + """ + IMPORTANT: To keep things intuitively oriented (left-to-right, and top-to-bottom), the internal bottom-up + coordinates have been flipped mathematically. All measurements start from the top-left corner. Moreover, I have + ensured that all numbers follow the same units. So, if you set your unit to "inch", everything will be measured + in the same unit. I hope this creates maximum consistency for you. + A NOTE ON IMAGES: All images will be measured in pixels when operating on them directly (like cropping and + resizing), but will be measured in the 'unit' of the canvas when placing it in the PDF. + A NOTE OF FONT SIZES: Font sizes (and their line spacings) are measured in 'points'. As per the standard, there + are 72 'points' in one inch. While everything else in this utility uses the unit of measurement defined in the + 'unit' param, fonts need to be specified in 'points' to maintain compatibility with HTML rendering engines to + work with well-formatted paragraphs. + WARNING: I STRONGLY RECOMMEND NOT USING DPI AS A SETTING. THE PDF FORMAT ITSELF DOESN'T HAVE ANY PROVISION FOR + PIXEL DENSITY. THIS SETTING HAS BEEN MADE AVAILABLE FOR PLACEBO EFFECT WHEN CLIENTS ASK FOR VERY HIGH RESOLUTION + FILES WITHOUT WANTING TO UNDERSTAND ANY TECHNICALITY. USE WITH CAUTION. + :param width: [int|float] The width of the page (in the specified unit). + :param height: [int|float] The height of the page (in the specified unit). + :param unit: [str] The unit ("mm", "cm", "inch") to use. + :param dpi: [int|float] The pixel density. AVOID USING THIS. + :param debug: [bool] Whether, or not, you want to print debugging messages. Can be changed on the fly. + :param debug_prefix: [str] The prefix to show in debugging messages. + :param raise_exception: If set to True, any failure will immediately stop the PDF building process. If set to + False, the PDF building will continue by ignoring failed steps. Set to True by default for an all-or-nothing + output behaviour. + :param kwargs: Just a placeholder, does nothing for now (20240904). + """ + + # For debugging: + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + + # Note down the exception-handling choice: + self.__raise_exception = raise_exception + + # We pick the unit from the user's choice: + self.__unit = { + "mm": mm, + "cm": cm, + "inch": inch + }[unit] + + # To know the canvas size multipliers, we need a few parameters: + # 01. The DPI Factor is the multiplier to apply to achieve the target DPI considering a default DPI of 72, + # 02. The Unit Factor is the multiplier to apply to the unit to achieve a high-res result. + self.__dpi_factor = (dpi / 72.0) + self.__unit_factor = self.__unit * self.__dpi_factor + + # Now we create the canvas: + self.__pdf_in_ram = io.BytesIO() + self.__canvas_width = width * self.__unit_factor + self.__canvas_height = height * self.__unit_factor + self.__canvas = canvas.Canvas( + self.__pdf_in_ram, + pagesize = (self.__canvas_width, self.__canvas_height) + ) + + def enable_debug(self): + + """ + To enable the debugging text in the terminal. + :return: None. + """ + + self.__printer.enable() + + def disable_debug(self): + + """ + To disable the debugging text in the terminal. + :return: None. + """ + + self.__printer.disable() + + # ┏┓┓ ┓ ┳┳ •┓• • + # ┗┓┣┓┏┓┏┓┏┓┏┫ ┃┃╋┓┃┓╋┓┏┓┏ + # ┗┛┛┗┗┻┛ ┗ ┗┻ ┗┛┗┗┗┗┗┗┗ ┛ + + @staticmethod + async def download_from_url(url, follow_redirects = False): + + """ + Download a file from a URL. + :param url: The URL to download the file from. + :param follow_redirects: Whether, or not, to follow along with any redirects when downloading the file. + :return: The downloaded file or None. + """ + + file = io.BytesIO((await http_client.get( + url, + headers = HEADERS_DOWNLOAD, + follow_redirects = follow_redirects + )).content) + file.seek(0) + return file + + @staticmethod + def read_to_ram(file_path): + + """ + Reads a file into a BytesIO object in RAM. + NOTE: The method doesn't itself verify if the file is a PDF. + :param file_path: The path to the file on disk. + :return: The file in a BytesIO object. + """ + + with open(file_path, "rb") as file: + file_data = file.read() + file_in_ram = io.BytesIO(file_data) + file_in_ram.seek(0) + return file_in_ram + + def __parse_color(self, input_color): + + """ + The reportlab 'reportlab' needs the colour to be specified in an array of RGS values where each value is a + number in the range 0-1. + :param input_color: Either a hex string or an array of numbers. + :return: An array that can be used by 'reportlab'. + """ + + # Start by assuming failure: + processed_color = None + + # If the input color is a string, we convert from hex to an array of hex codes: + if isinstance(input_color, str): + input_color = input_color.lstrip("#") + color_tuple = ( + input_color[0:2].upper(), + input_color[2:4].upper(), + input_color[4:6].upper() + ) + input_color = color_tuple + + # If the input color is a list/tuple of hex-strings: + if isinstance(input_color, (list, tuple)): + try: + if all(isinstance(item, str) for item in input_color): + processed_color = [int(item, 16) / 255.0 for item in input_color] + elif all(isinstance(item, (float, int)) for item in input_color): + processed_color = [max(min(item, 255.0), 0.0) / 255.0 for item in input_color] + except: + if self.__raise_exception: raise + + # Done here: + return processed_color + + def __parse_x(self, *args): + + """ + To adjust the horizontal coordinates for the canvas. + :param args: As many horizontal coordinates as you would like to adjust. + :return: The adjusted coordinates. + """ + + if len(args) == 0: return None + parsed_x = [x * self.__unit_factor for x in args] + parsed_x = [x if x >= 0 else x + self.__canvas_width for x in parsed_x] + return tuple(parsed_x) if len(parsed_x) > 1 else parsed_x[0] + + def __parse_y(self, *args, flip = False): + + """ + To adjust the vertical coordinates for the canvas. + :param args: As many vertical coordinates as you would like to adjust. + :param flip: To convert from bottom-up system to top-down system. + :return: The adjusted coordinates. + """ + + if len(args) == 0: return None + parsed_y = [y * self.__unit_factor for y in args] + parsed_y = [y if y >= 0 else y + self.__canvas_height for y in parsed_y] + if flip: parsed_y = [self.__canvas_height - y for y in parsed_y] + return tuple(parsed_y) if len(parsed_y) > 1 else parsed_y[0] + + def __parse_font_size(self, *args): + + """ + Adjust the font size. + :param args: The font sizes to adjust + :return: The adjusted font-size. + """ + + if len(args) == 0: return None + parsed_font_sizes = args + return parsed_font_sizes if len(parsed_font_sizes) > 1 else parsed_font_sizes[0] + + @staticmethod + def _parse_coordinates_for_rotation( + original_x, + original_y, + angle + ): + + """ + Adjusts the x and y coordinates to compensate for the effect of a rotation operation. + :param original_x: The x coordinate before applying rotation. + :param original_y: The y coordinate before applying rotation. + :param angle: The angle (in degrees) by which the rotation will be applied. + :return: The adjusted x and y coordinates that compensate for the effect of the canvas's rotation. + """ + + # Get the angle in radians: + angle_radians = math.radians(angle) + angle_cos = math.cos(angle_radians) + angle_sin = math.sin(angle_radians) + + # Compute the inverse rotation: + adjusted_x = original_x * angle_cos + original_y * angle_sin + adjusted_y = -original_x * angle_sin + original_y * angle_cos + + # Done here: + return adjusted_x, adjusted_y + + # ┳ ┏┓ • + # ┃┏┓┏╋┏┓┏┓┏┏┓ ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ + # ┻┛┗┛┗┗┻┛┗┗┗ ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ + # ┛ + + @property + def canvas(self): + + """ + Use this to fetch just the canvas with all the inputs applied to it. + :return: The canvas (page) that is being used currently in the instance. + """ + + return self.__canvas + + @property + def unit_factor(self): + + """ + The scaling factor after taking into consideration the physical unit of measurement being use (e.g.: "mm"). + :return: The unit-factor. + """ + + return self.__unit_factor + + @property + def dpi_factor(self): + + """ + The scaling factor derived from comparing the default DPI of 72 and a custom DPI specified when creating the + instance. Since the PDF format doesn't have a native DPI configuration, this scaling factor will help in + adjusting the sizes of whatever you wish to add to the canvas. + :return: The DPI scaling factor. + """ + + return self.__dpi_factor + + @property + def shape(self): + + """ + an array of the dimensions (width, height) of the canvas. + :return: The width and height of the canvas. + """ + + return self.__canvas_width, self.__canvas_height + + # ┏┓ ┏┓ ┏┓•┓ + # ┃ ┏┓┏┓┓┏┏┓┏ ┣╋ ┣ ┓┃┏┓ + # ┗┛┗┻┛┗┗┛┗┻┛ ┗┻ ┻ ┗┗┗ + + def save(self, path: str = None): + + """ + Save the Canvas as a PDF either to RAM or a file on disk. + :param path: The path you want to save the PDF to on disk. If not specified, the PDF will be saved to RAM and + returned as a BytesIO object. + :return: A BytesIO object, or True/False if a path is supplied and the file gets saved. + """ + + # Save the changes to the file in RAM. + self.__canvas.save() + self.__pdf_in_ram.seek(0) + + # If the user has not specified a path, return the buffer: + if path is None: return self.__pdf_in_ram + + # In case a path was specified, + # We try to save the file in the specified path: + try: + with open(path, "wb") as file: file.write(self.__pdf_in_ram.getvalue()) + except Exception as exception: + self.__printer(exception) + if self.__raise_exception: raise + return False + + def next_page(self): + + """ + To start working on the next page. + The library that is being used doesn't support moving back and forth between pages in any random order, it, + instead, needs to go in a sequential fashion from one page to the next. + :return: None. + """ + + self.__canvas.showPage() + + # ┏┓ + # ┣ ┏┓┏┓╋┏ + # ┻ ┗┛┛┗┗┛ + + @staticmethod + async def register_font_from_url(name, url, follow_redirects = False): + + """ + Download a font from a URL and then register it for use. + :param name: The name you would later refer to the font by. + :param url: The URL to download the font from. + :param follow_redirects: Whether, or not, to follow along with any redirects when downloading the file. + :return: True if registered, else False. + """ + + try: return PDFMaker.register_font( + name, + await PDFMaker.download_from_url(url, follow_redirects = follow_redirects) + ) + except Exception as exception: + return False + + @staticmethod + def register_fonts_from_directory(directory): + + """ + Register all the fonts from a directory to be used later in the PDF. + :param directory: The directory that has the TTF files to register. + :return: A dict describing the fonts that were registered. + """ + + # List out all the files in the folder: + all_files = files.list_files(directory, full_path = True) + + # Keep only TTF files and make a name-to-path map: + font_map = { + os.path.split(file)[-1].split(".")[0].lower(): file + for file in all_files if file.lower().rstrip().endswith(".ttf") + } + + # Register the custom fonts: + registered_fonts = [] + for font_name, font_path in font_map.items(): + if PDFMaker.register_font(font_name, font_path): + registered_fonts.append({"name": font_name, "file": font_path}) + + # Done here: + return registered_fonts + + @staticmethod + def register_font(name, file): + + """ + Register one TTF font from either a BytesIO object or a path on the disk. + :param name: The name of the font as you would like to use when invoking it. + :param file: The font file (TTF format). + :return: True if registered, else False. + """ + + try: + + if isinstance(file, io.BytesIO): file.seek(0) + pdfmetrics.registerFont(TTFont(name, file)) + return True + + except Exception as exception: + return False + + @staticmethod + def get_font_height(font, size, count_ascent = True, count_descent = True): + + """ + Compute the height of the font for the given size. + :param font: [str] The name of the font (as registered). + :param size: [int|float] The size of the font (in points). + :param count_ascent: [bool] Whether, or not, you would like to consider the ascent of the font. + :param count_descent: [bool] Whether, or not, you would like to consider the descent of the font. + :return: The height of the font in points. + """ + + # Get font's information and compute the height: + ascent, descent = pdfmetrics.getAscentDescent(font, size) + if not count_ascent: ascent = 0.0 + if not count_descent: descent = 0.0 + height = ascent - descent + return height + + @staticmethod + def font_is_registered(font): + + """ + Checks if a particular font is available for use. + :param font: [str] The name of the font to check. + :return: True if registered, else False + """ + + return font in pdfmetrics.getRegisteredFontNames() + + @staticmethod + def get_first_registered_font(): + + """ + Returns the name of the first registered font. Useful for cases like those when your font fails to load and you + need a default to fall back on. + :return: The name of the first font that has been registered. + """ + + return pdfmetrics.getRegisteredFontNames()[0] + + @staticmethod + def list_registered_fonts(): + + """ + Returns the list of names of all the registered fonts. + :return: The list of names of the fonts that have been registered. + """ + + return pdfmetrics.getRegisteredFontNames() + + @staticmethod + def is_valid_ttf(file): + + """ + Checks if a font file is valid and usable or not. + :param file: [str|io.BytesIO] The file to check. + :return: True if valid, else False. + """ + + if isinstance(file, io.BytesIO): file.seek(0) + try: font = ttLib.TTFont(file)["head"].fontRevision + except Exception as exception: return False + return True + + # ┳ + # ┃┏┳┓┏┓┏┓┏┓┏ + # ┻┛┗┗┗┻┗┫┗ ┛ + # ┛ + + @staticmethod + def make_barcode_image( + data, + bar_width = 2, + bar_height = 125, + border = 10, + bar_color = "#000000", + background_color = "#FFFFFF", + dpi = 300, + format = "png", + as_pil = True + ): + + """ + Makes a barcode in Code128 format. + :param data: [str] The data to encode in the barcode. + :param bar_width: [int] The base bar-module width in pixels. + :param bar_height: [int] The bar-module height in pixels. + :param border: [int] The size of the border around all sides of the barcode in pixels. + :param bar_color: [str] The colour of the bars as a hex string. + :param background_color: [str] The colour of the background as a hex string. + :param dpi: [int] The pixel density to note in the image. Leave it to default for most use cases. + :param format: [str] The file format to save the image in. + :param as_pil: [bool] If True, a PIL object will be returned, else a PNG file will be returned in RAM (BytesIO). + :return: Either a PIL object or a PNG file in RAM. + """ + + # Create the barcode in RAM: + barcode_in_ram = io.BytesIO() + barcode_options = { + "module_width": (bar_width / dpi) * 25.4, + "module_height": (bar_height / dpi) * 25.4, + "quiet_zone": 0, + "foreground": bar_color, + "background": background_color, + "format": format, + "dpi": dpi + } + Code128(str(data), writer = ImageWriter()).write(barcode_in_ram, options = barcode_options) + barcode_in_ram.seek(0) + + # Remove the rasterized text at the bottom, and create a border of the desired size: + barcode_image = Image.open(barcode_in_ram, formats = [format]) + width, height = barcode_image.size + barcode_image = barcode_image.crop(( + 0, + int(dpi * 0.0393701), + width, + int(dpi * 0.0393701) + bar_height + )) + width, height = barcode_image.size + background_image = Image.new( + mode = "RGB", + size = (width + border + border, height + border + border), + color = background_color + ) + background_image.paste(barcode_image, (border, border)) + barcode_image = background_image + + # If the user has asked for a PIL object: + if as_pil: return barcode_image + + # Else, ave the PNG in ram: + barcode_in_ram = io.BytesIO() + barcode_image.save(barcode_in_ram, format = "png") + barcode_in_ram.seek(0) + + # Done: + return barcode_in_ram + + @staticmethod + def make_qr_image( + data, + scale = 5, + border = 2, + foreground_color = "#000000", + background_color = "#FFFFFF", + border_color = "#FFFFFF", + background_art = None, + format = "png", + as_pil = True + ): + + """ + Create a QR code. + :param data: [str] The data that you want to encode in the QR code. + :param scale: [int] The size (in pixels) for each tiny block in the QR code. + :param border: [int] The size (in multiples of scale) of the quiet zone. + :param foreground_color: [str] The color of the foreground, a.k.a. the dark color. + :param background_color: [str] The color of the background, a.k.a. the light color. + :param border_color: [str] The color of the quiet zone. + :param background_art: [io.BytesIO|PIL.Image] Any image that you would like to feed into the background instead + of a plain QR code. This can be an animated GIF image as well. + :param format: [str] The type of output file that you want. + :param as_pil: [bool] If True, a PIL object will be returned, else a PNG file will be returned in RAM (BytesIO). + :return: Either a PIL object or a PNG file in RAM. + """ + + qr_code = segno.make_qr(str(data)) + params = { + "scale": scale, + "border": border, + "dark": foreground_color, + "light": background_color, + "quiet_zone": border_color, + "kind": format + } + + qr_image = io.BytesIO() + + if background_art is not None: + if isinstance(background_art, Image.Image): + buffer = io.BytesIO() + background_art.save(buffer, format = format) + buffer.seek(0) + background_art = buffer + params["background"] = background_art + params["target"] = qr_image + qr_code.to_artistic(**params) + + else: + params["out"] = qr_image + qr_code.save(**params) + + qr_image.seek(0) + if as_pil: qr_image = Image.open(qr_image, formats = [format]) + return qr_image + + async def image_from_url(self, url, follow_redirects = False, as_pil = True, format = "png"): + + """ + Asynchronously downloads an image and returns it as a PIL object. + Use this instead of just passing the URL to 'draw_image' for better efficiency. + :param url: [str] The URL to download the image from. + :param follow_redirects: [bool] Whether, or not, to follow redirect URLs when downloading the file. + :param as_pil: [bool] If True, a PIL object will be returned, else a PNG file will be returned in RAM (BytesIO). + :param format: [str] The type of output file that you want. Not applicable for PIL objects. + :return: The image as a PIL object or as a file in RAM. + """ + + try: + + pil_image = Image.open(await PDFMaker.download_from_url(url, follow_redirects = follow_redirects)) + if as_pil: return pil_image + image_in_memory = io.BytesIO() + pil_image.save(image_in_memory, format = format) + image_in_memory.seek(0) + return image_in_memory + + except Exception as exception: + self.__printer(exception) + if self.__raise_exception: raise + + def image_from_base64(self, data, as_pil = True): + + """ + Converts a base64 string to an image. + :param data: [str] The base-64 representation of the image data. + :param as_pil: [bool] If True, a PIL object will be returned, else a PNG file will be returned in RAM (BytesIO). + :return: The image as a PIL object or as a file in RAM. + """ + + try: + + image = io.BytesIO(base64.b64decode(data)) + image.seek(0) + if not as_pil: return image + image = Image.open(image) + return image + + except Exception as exception: + if self.__raise_exception: raise + + @staticmethod + def crop_image_to_aspect_ratio(image, target_aspect_ratio, anchor = "c"): + + """ + Shaves off pixels from an image to achieve the target aspect ratio. + :param image: [PIL.Image] The image to work on, held in a PIL object. + :param target_aspect_ratio: [int|float] The aspect ratio you want to achieve. + :param anchor: [str] Which part of the image you want to retain. Imagine it like a compass - "nw", "n", "ne", + "e", "se", "s", "sw", "w", and "c". + :return: The adjusted image. + """ + + # Get the existing figures: + width, height = image.size + original_aspect_ratio = width / height + + # Compute the new dimensions: + if original_aspect_ratio > target_aspect_ratio: + scaling_factor = target_aspect_ratio / original_aspect_ratio + new_width, new_height = int(width * scaling_factor), height + else: + scaling_factor = original_aspect_ratio / target_aspect_ratio + new_width, new_height = width, int(height * scaling_factor) + + # Now we figure out the start and end points of cropping: + match anchor.strip().lower(): + case "nw": + start_x = 0 + start_y = 0 + case "n": + start_x = int(abs(new_width - width) / 2.0) + start_y = 0 + case "ne": + start_x = int(abs(new_width - width)) + start_y = 0 + case "e": + start_x = int(abs(new_width - width)) + start_y = int(abs(new_height - height) / 2.0) + case "se": + start_x = int(abs(new_width - width)) + start_y = int(abs(new_height - height)) + case "s": + start_x = int(abs(new_width - width) / 2.0) + start_y = int(abs(new_height - height)) + case "sw": + start_x = 0 + start_y = int(abs(new_height - height)) + case "w": + start_x = 0 + start_y = int(abs(new_height - height) / 2.0) + case _: + start_x = int(abs(new_width - width) / 2.0) + start_y = int(abs(new_height - height) / 2.0) + + end_x = start_x + new_width + end_y = start_y + new_height + + # And we finally crop and return the image: + return image.crop((start_x, start_y, end_x, end_y)) + + @staticmethod + def crop_image(image, start_x, start_y, end_x, end_y): + + """ + Crops an image. + :param image: [PIL.Image] The image to work on, held in a PIL object. + :param start_x: [int|float] The left coordinate (in the same unit as the dimension of the canvas). + :param start_y: [int|float] The top coordinate (in the same unit as the dimension of the canvas). + :param end_x: [int|float] The right coordinate (in the same unit as the dimension of the canvas). + :param end_y: [int|float] The bottom coordinate (in the same unit as the dimension of the canvas). + :return: The cropped image. + """ + + return image.crop((start_x, start_y, end_x, end_y)) + + @staticmethod + def resize_image_to_aspect_ratio(image, target_aspect_ratio): + + """ + Resizes the image (by stretching and squishing) till it fits the target aspect ratio. + :param image: [PIL.Image] The image to adjust. + :param target_aspect_ratio: [int|float] The aspect ratio that you want to achieve. + :return: The adjusted image. + """ + + # Get the existing figures: + width, height = image.size + original_aspect_ratio = width / height + + # Compute the new dimensions: + if original_aspect_ratio > target_aspect_ratio: + new_width, new_height = width, int(width / target_aspect_ratio) + else: + new_width, new_height = int(height * target_aspect_ratio), height + + # Resize and return the image: + return image.resize((new_width, new_height)) + + @staticmethod + def resize_image(image, width, height): + + """ + Resizes an image to the specified width and height. + :param image: [PIL.Image] The image as a PIL object. + :param width: [int|float] The new width. + :param height: [int|float] The new height. + :return: The resized image. + """ + + return image.resize((width, height)) + + @staticmethod + def fit_image_to_aspect_ratio( + image: Image, + target_aspect_ratio: float, + blur_strength = 0.01, + alpha: float = 0.8 + ): + + """ + Fits an image to any aspect ratio by adding a blurred background to it. + :param image: [PIL.Image] The image to adjust. + :param target_aspect_ratio: [int|float] The aspect ratio that you want to achieve. + :param blur_strength: How intense the blur must be. + :param alpha: The opacity of the blurred background. + :return: The adjusted image. + """ + + # Get the existing figures: + width, height = image.size + original_aspect_ratio = width / height + + # Compute the new dimensions: + if original_aspect_ratio > target_aspect_ratio: + new_width, new_height = width, int(width / target_aspect_ratio) + scaling_factor = new_height / height + paste_x = 0 + paste_y = int((new_height - height) / 2) + else: + new_width, new_height = int(height * target_aspect_ratio), height + scaling_factor = new_width / width + paste_x = int((new_width - width) / 2) + paste_y = 0 + + # Prepare the background image: + # bg_image = image.copy().resize((new_width, new_height)) + bg_image = image.copy().resize((int(width * scaling_factor), int(height * scaling_factor))) + bg_image = bg_image.filter(ImageFilter.GaussianBlur(radius = int((new_width + new_height) / 2) * blur_strength)) + bg_image = PDFMaker.crop_image_to_aspect_ratio(bg_image, target_aspect_ratio) + + # darken the background a little: + bg_image = Image.blend( + bg_image, + Image.new("RGB", bg_image.size, (0, 0, 0)), + alpha = 1.0 - alpha + ) + + # Paste the original image on top of the background: + bg_image.paste(image, (paste_x, paste_y)) + + # Resize and return the image: + return bg_image + + @staticmethod + def adjust_image_orientation_from_exif(image): + + """ + Rotates the image as per the instructions in the EXIF tags. + :param image: The PIL object that holds the image data. + :return: The adjusted image. + """ + + # Guard clause to return if the attribute is not even found: + if not hasattr(image, "getexif"): return image + + # Else we start extracting EXIF data: + exif = image.getexif() + if exif is None: return image + + # We look for the tag that indicates orientation: + # ORIENTATION CODES: + # 1: Normal (Landscape) + # 2: Flipped horizontally + # 3: Upside down (Reverse Landscape) + # 4: Flipped vertically + # 5: Rotated 90° clockwise and flipped horizontally + # 6: Rotated 90° clockwise (Portrait) + # 7: Rotated 90° counter-clockwise and flipped horizontally + # 8: Rotated 90° counter-clockwise (Reverse Portrait) + orientation = exif.get(274, 0) + if orientation == 1: pass + elif orientation == 2: image = image.transpose(Image.FLIP_LEFT_RIGHT) + elif orientation == 3: image = image.rotate(180, expand = True) + elif orientation == 4: image = image.rotate(180, expand = True).transpose(Image.FLIP_LEFT_RIGHT) + elif orientation == 5: image = image.rotate(270, expand = True).transpose(Image.FLIP_LEFT_RIGHT) + elif orientation == 6: image = image.rotate(270, expand = True) + elif orientation == 7: image = image.rotate(90, expand = True).transpose(Image.FLIP_LEFT_RIGHT) + elif orientation == 8: image = image.rotate(90, expand = True) + + # Done here: + return image + + # ┏┓┳┓┏ + # ┃┃┃┃╋ + # ┣┛┻┛┛ + + def draw_line( + self, + start_x, + start_y, + end_x, + end_y, + thickness = 1.0, + color = (0, 0, 0), + alpha = 1.0 + ): + + """ + Draw a line in the PDF page. + :param start_x: [int|float] The left coordinate. + :param start_y: [int|float] The top coordinate. + :param end_x: [int|float] The right coordinate. + :param end_y: [int|float] The bottom coordinate. + :param thickness: [int|float] The thickness of the line (in the same unit as the canvas's dimensions). + :param color: [str] The RGB color in an array. + :param alpha: [int|float] The opacity of the line. 1 is 100% and 0 is 0% + :return: True or False based on the success of the operation. + """ + + # Handle color: + color = self.__parse_color(color) + + # Adjust the dimensions: + thickness *= self.__unit_factor + start_x, end_x = self.__parse_x(start_x, end_x) + start_y, end_y = self.__parse_y(start_y, end_y, flip = True) + + try: + + self.__canvas.setLineWidth(thickness) + self.__canvas.setStrokeColorRGB(color[0], color[1], color[2], alpha) + self.__canvas.line( + start_x, + start_y, + end_x, + end_y + ) + return True + + # In case something goes wrong: + except Exception as exception: + self.__printer(exception) + if self.__raise_exception: raise + return False + + def draw_circle( + self, + x, + y, + radius, + fill_color = (255, 255, 255), + fill_alpha = 0.0, + stroke_color = (0, 0, 0), + stroke_alpha = 1.0, + thickness = 1.0 + ): + + """ + Draw a circle in the PDF page. + :param x: [int|float] The horizontal coordinate of the center of the circle. + :param y: [int|float] The vertical coordinate of the center of the circle. + :param radius: [int|float] The radius of the circle. + :param fill_color: [str] The color-array (0-255) or hex string to define the inner fill color of the rectangle. + :param fill_alpha: [int|float] The opacity of the inner fill color. + :param stroke_color: [str] The color-array (0-255) or hex string to define the outline color of the rectangle. + :param stroke_alpha: [int|float] The opacity of the outline color. + :param thickness: [int|float] The thickness of the line (in the same unit as the canvas's dimensions). + :return: True or False based on the success of the operation. + """ + + try: + + # Handle color: + fill_color = self.__parse_color(fill_color) + stroke_color = self.__parse_color(stroke_color) + + # Adjust the dimensions: + x = self.__parse_x(x) + y = self.__parse_y(y, flip = True) + thickness *= self.__unit_factor + radius *= self.__unit_factor + + # Draw the circle here: + self.__canvas.setLineWidth(thickness) + self.__canvas.setFillColorRGB(fill_color[0], fill_color[1], fill_color[2]) + self.__canvas.setFillAlpha(fill_alpha) + self.__canvas.setStrokeColorRGB(stroke_color[0], stroke_color[1], stroke_color[2]) + self.__canvas.setStrokeAlpha(stroke_alpha) + self.__canvas.circle(x, y, radius, stroke = 1, fill = 1) + + # In case something goes wrong: + except Exception as exception: + self.__printer(exception) + if self.__raise_exception: raise + return False + + def draw_rect( + self, + start_x, + start_y, + end_x, + end_y, + radius = 0.0, + fill_color = (255, 255, 255), + fill_alpha = 0.0, + stroke_color = (0, 0, 0), + stroke_alpha = 1.0, + thickness = 1.0, + ): + + """ + Draws a rectangle on the page. + :param start_x: [int|float] The left coordinate. + :param start_y: [int|float] The top coordinate. + :param end_x: [int|float] The right coordinate. + :param end_y: [int|float] The bottom coordinate. + :param radius: [int|float] The corner radius. + :param fill_color: [str] The color-array (0-255) or hex string to define the inner fill color of the rectangle. + :param fill_alpha: [int|float] The opacity of the inner fill color. + :param stroke_color: [str] The color-array (0-255) or hex string to define the outline color of the rectangle. + :param stroke_alpha: [int|float] The opacity of the outline color. + :param thickness: [int|float] The line thickness of the outline (in the same unit as the canvas's dimensions). + :return: True or False based on the success of the operation. + """ + + try: + + # Handle color: + fill_color = self.__parse_color(fill_color) + stroke_color = self.__parse_color(stroke_color) + + # Adjust the dimensions: + thickness *= self.__unit_factor + start_x, end_x = self.__parse_x(start_x, end_x) + start_y, end_y = self.__parse_y(start_y, end_y, flip = False) + + # Compute the width and height desired by the user: + width = end_x - start_x + height = end_y - start_y + + # Draw the rectangle here: + self.__canvas.setLineWidth(thickness) + self.__canvas.setFillColorRGB(fill_color[0], fill_color[1], fill_color[2]) + self.__canvas.setFillAlpha(fill_alpha) + self.__canvas.setStrokeColorRGB(stroke_color[0], stroke_color[1], stroke_color[2]) + self.__canvas.setStrokeAlpha(stroke_alpha) + self.__canvas.roundRect( + start_x, + self.__canvas_height - start_y - height, + width, + height, + radius * self.__unit_factor, + stroke = 1, + fill = 1 + ) + + return True + + # In case something goes wrong: + except Exception as exception: + self.__printer(exception) + if self.__raise_exception: raise + return False + + def make_paragraph_style( + self, + font_name = "Helvetica", + font_size = 12, + font_color = (0, 0, 0), + line_spacing = 12, + border_size = 0.0, + border_color = (255, 255, 255), + align = "left", + style_name = "CustomStyle" + ): + + """ + Creates a text style for using in a paragraph. + :param font_name: [str] The name of the font. Has to be registered. + :param font_size: [int|float] The size that you want the font to be printed in. + :param font_color: [str] The color-array (0-255) or hex string that you want the font to be printed in. + :param line_spacing: [int|float] The line spacing to apply. + :param border_size: [int|float] The thickness of the border. + :param border_color: [str] The color-array (0-255) or hex string of the color you wan the border to be in. + :param align: [str] Text alignment ("left", "center", or "right"). + :param style_name: [str] A name that you would like to give this style. + :return: The paragraph style. + """ + + # Make adjustments: + font_color = self.__parse_color(font_color) + font_size = self.__parse_font_size(font_size) + border_color = self.__parse_color(border_color) + border_size *= self.__unit_factor + + return ParagraphStyle( + name = style_name, + fontName = font_name, + fontSize = font_size, + textColor = (font_color[0], font_color[1], font_color[2]), + alignment = { + "left": 0, + "center": 1, + "right": 2 + }[align], + leading = line_spacing * font_size, + spaceBefore = 0, + spaceAfter = 0, + borderWidth = border_size, + borderColor = border_color + ) + + def write_paragraph( + self, + text, + start_x, + start_y, + end_x, + end_y, + alpha = 1.0, + style = None + ): + + """ + To write text into a bounding box in the PDF. + This can be either plaintext or an HTML string. + :param text: [str] The text to type in the bounding box. + :param start_x: [int|float] The left coordinate (in the same unit as used while setting up the canvas). + :param start_y: [int|float] The top coordinate (in the same unit as used while setting up the canvas). + :param end_x: [int|float] The right coordinate (in the same unit as used while setting up the canvas). + :param end_y: [int|float] The bottom coordinate (in the same unit as used while setting up the canvas). + :param alpha: [int|float] The opacity of the text. 1 is 100% and 0 is 0% + :param style: The paragraph-style generated by using "make_paragraph_style" method. Avoid using this if you are + passing in an HTML string. + :return: True or False based on the success of the operation. You will get a False even if the text flows out of + the bounding box (which will cause it to not render). + """ + + try: + + # Adjust the dimensions: + start_x, end_x = self.__parse_x(start_x, end_x) + start_y, end_y = self.__parse_y(start_y, end_y, flip = False) + + # Compute the width and height desired by the user: + width = end_x - start_x + height = end_y - start_y + + # Make the paragraph: + paragraph = Paragraph(text, style = style) + + # Wrap the paragraph to compute the needed dimensions: + needed_width, needed_height = paragraph.wrap(width, height) + + # Adjust the y coordinates (for top-down system): + start_y = self.__canvas_height - start_y - needed_height + + # Write the text to the canvas if the text fits. + # Return true in case of success, else false: + if width >= needed_width and height >= needed_height: + self.__canvas.setFillAlpha(alpha) + paragraph.drawOn(self.__canvas, start_x, start_y, _sW = 0) + return True + else: return False + + # In case something goes wrong: + except Exception as exception: + self.__printer(exception) + if self.__raise_exception: raise + return False + + def write_string( + self, + text, + x, + y, + font = "Helvetica", + size = 12, + color = (0, 0, 0), + alpha = 1.0, + align = "left", + angle = 0 + ): + + """ + Writes a string onto the canvas. + :param text: [str] The text to be written. + :param x: [int|float] The horizontal coordinate (of the baseline). + :param y: [int|float] The vertical coordinate (of the baseline). + :param font: [str] The name of the font to be used. + :param size: [int|float] The size of the font to be used (in points). + :param color: [str] The color-array (0-255) or hex string that you want the font to be printed in. + :param alpha: [int|float] The opacity of the text. 1 is 100% and 0 is 0% + :param align: [str] The alignment to use ("left", "center", "right"). + :param angle: The angle at which you want the text to be printed in. + :return: True or False based on the success of the operation. + """ + + try: + + # Handle the color + color = self.__parse_color(color) + + # Adjust the dimensions: + x = self.__parse_x(x) + y = self.__parse_y(y, flip = True) + size = self.__parse_font_size(size) + + # Adjust the canvas's values: + self.__canvas.setFont(font, size) + self.__canvas.setFillColorRGB(color[0], color[1], color[2]) + self.__canvas.setFillAlpha(alpha) + + # Handle angular adjustments: + self.__canvas.rotate(angle) + x, y = self._parse_coordinates_for_rotation( + original_x = x, + original_y = y, + angle = angle + ) + + # Adjust the font coordinates as per the angle: + text_width = self.__canvas.stringWidth(text, fontName = font, fontSize = size) + if align == "center": x -= text_width / 2 + elif align == "right": x -= text_width + + # Draw the string: + self.__canvas.drawString(x, y, text) + + # Reset angular adjustments: + self.__canvas.rotate(-angle) + + # Return with success if nothing broke till here: + return True + + # In case something goes wrong: + except Exception as exception: + self.__printer(exception) + if self.__raise_exception: raise + return False + + def draw_image( + self, + image, + start_x, + start_y, + end_x, + end_y, + crop = False, + crop_anchor = "c", + alpha = 1.0, + stroke_color = (0, 0, 0), + stroke_alpha = 0.0, + thickness = 1.0, + identifier: str = None, + format = "jpeg" + ): + + """ + Draw an image onto the PDF page in the specified bounding box. The image can be drawn in either "fit" mode where + the image is scaled down to fit in the bounding box, or in "fill" mode where the image is cropped to fill up the + space in the bounding box by matching their aspec ratios. + :param image: The image data as a PIL object or a valid URL or a file path. NOTE: If given as a URL, the image + will be downloaded synchronously. + :param start_x: [int|float] The left coordinate. + :param start_y: [int|float] The top coordinate. + :param end_x: [int|float] The right coordinate. + :param end_y: [int|float] The bottom coordinate. + :param crop: [bool] Set to True for "fill" mode, False for "fit" mode. + :param crop_anchor: [str] If cropping is to be performed, what should the anchor be for cropping. Refer to the + description in 'crop_image_to_aspect_ratio'. + :param alpha: [int|float] The opacity of the image. 1 is 100% and 0 is 0% + :param stroke_color: [str] The color-array (0-255) or hex string to define the outline color of the rectangle. + :param stroke_alpha: [int|float] The opacity of the outline color. + :param thickness: [int|float] The line thickness of the outline (in the same unit as the canvas's dimensions). + :param identifier: [str] A unique name for the image. + :param format: The file format of the image (when it will be embedded in the PDF). + :return: True or False based on the success of the operation. + """ + + try: + + # Cleaning: + format = format.strip().lower().split(".")[-1] + + # Handle color: + stroke_color = self.__parse_color(stroke_color) + + # The identifier can allow us to use the same image multiple times in a PDF file. + # If the identifier is not provided, we give the file a random identifier. + if identifier is None: identifier = "".join([random.choice(string.ascii_lowercase) for _ in range(8)]) + + # Adjust the dimensions: + start_x, end_x = self.__parse_x(start_x, end_x) + start_y, end_y = self.__parse_y(start_y, end_y, flip = True) + + # Compute the width and height desired by the user: + width = end_x - start_x + height = end_y - start_y + + # In case the image is passed as a URL, we try to download it and open it as a PIL object: + if isinstance(image, str): + if image.startswith("https://") or image.startswith("http://"): + image = Image.open(io.BytesIO(requests.get(image).content)) + else: image = Image.open(image) + + # The image can have orientation data in its EXIF tags. + # If so, we adjust for it so that reportlab can work with it properly: + image = self.adjust_image_orientation_from_exif(image) + + # If the image needs to be cropped, we compute the aspect ratio and get the image adjusted: + if crop: image = self.crop_image_to_aspect_ratio( + image, + abs(end_x - start_x) / abs(end_y - start_y), + anchor = crop_anchor + ) + + # Else we add a blurred background to the image: + else: image = self.fit_image_to_aspect_ratio( + image, + abs(end_x - start_x) / abs(end_y - start_y), + blur_strength = 0.1 + ) + + # We set the image opacity and outline settings here: + self.__canvas.setFillAlpha(alpha) + self.__canvas.setLineWidth(thickness * self.__unit_factor) + self.__canvas.setStrokeColorRGB(stroke_color[0], stroke_color[1], stroke_color[2]) + self.__canvas.setStrokeAlpha(stroke_alpha) + + # Draw the image onto the canvas: + if ( + image.mode == "P" or + format in ["jpeg", "jpg"] + ): + image = image.convert("RGB") + image_buffer = io.BytesIO() + image.save(image_buffer, format = format) + image_buffer.seek(0) + self.__canvas.drawImage( + ImageReader(image_buffer, ident = identifier), + start_x, + start_y, + width = width, + height = height, + preserveAspectRatio = True, + mask = "auto", + anchor = "c", + showBoundary = True + ) + + return True + + # In case something goes wrong: + except Exception as exception: + self.__printer(exception) + if self.__raise_exception: raise + return False + + # def draw_svg( + # self, + # svg, + # start_x, + # start_y, + # end_x, + # end_y + # ): + # + # renderSVG.draw(svg, sta) + + # ┏┓┳┓┏ ┏┳┓ ┓ + # ┃┃┃┃╋ ┃ ┏┓┏┓┃┏ + # ┣┛┻┛┛ ┻ ┗┛┗┛┗┛ + + @staticmethod + def make_thumbnails( + pdf_file, + pages = None, + scale = 1.0, + as_pil = True, + format = "png" + ): + + """ + Makes thumbnails of pages of the PDF and returns them + :param pdf_file: The PDF file whose pages must be converted to thumbnails. + :param pages: The list of page nos. to make thumbnails of. If not specified, all pages will be converted. + :param scale: The scaling multiplier, applied to both axes, to change the output size. + :param as_pil: If True, the output will be an array of PIL objects, else the output will be an array of + file-like BytesIO objects. + :param format: The file format of the output image. + :return: The array of thumbnails, either as PIL objects, or as BytesIO objects. + """ + + # Open the PDF, and ensure that we have the pages numbers: + if isinstance(pdf_file, io.BytesIO): + pdf_file.seek(0) + pdf_document = fitz.open(stream = pdf_file) + pdf_file.seek(0) + else: pdf_document = fitz.open(pdf_file) + if pages is None: pages = list(range(len(pdf_document))) + + # Iterate over the pages and make the thumbnails: + thumbnails = [] + for page_no in pages: + img = pdf_document.load_page(page_no).get_pixmap(matrix = fitz.Matrix(scale, scale)) + img = io.BytesIO(img.tobytes(format)) + if as_pil: img = Image.open(img, formats = [format]) + thumbnails.append(img) + + # Done here: + return thumbnails + + @staticmethod + def join_from_ram(pdf_files, raise_exception = True): + + """ + Joins a set of PDF files held in RAM (as BytesIO objects). + :param pdf_files: The list of PDF files (as BytesIO objects). + :param raise_exception: Set to True for an all-or-nothing process. + :return: The joined PDF file (as a BytesIo object). + """ + + try: + + # Create a file in RAM that will hold the merged PDF: + joined_pdf_in_ram = io.BytesIO() + + # Merge the files into one: + merger = PdfMerger() + for pdf_file in pdf_files: merger.append(pdf_file) + merger.write(joined_pdf_in_ram) + merger.close() + + # Done here: + joined_pdf_in_ram.seek(0) + return joined_pdf_in_ram + + # In case something goes wrong: + except Exception as exception: + if raise_exception: raise + return None + + @staticmethod + def grid_from_ram( + pdf_files, + input_width, + input_height, + output_width, + output_height, + cutting_width, + cutting_height, + unit = "mm", + dpi = 72 + ): + + """ + Lays out a set of input PDFs into a larger pdf in a grid. + NOTE: The 'unit' and 'dpi' choice will be used for both (input and output). + WARNING: I STRONGLY RECOMMEND NOT USING DPI AS A SETTING. THE PDF FORMAT ITSELF DOESN'T HAVE ANY PROVISION FOR + PIXEL DENSITY. THIS SETTING HAS BEEN MADE AVAILABLE FOR PLACEBO EFFECT WHEN CLIENTS ASK FOR VERY HIGH RESOLUTION + FILES WITHOUT WANTING TO UNDERSTAND ANY TECHNICALITY. USE WITH CAUTION. + :param pdf_files: The list of PDF files (as BytesIO objects) to lay onto the larger canvas. + :param input_width: The width of the input PDFs. + :param input_height: The height of the input PDFs + :param output_width: The width of the large PDF on which the smaller PDFs will be laid out. + :param output_height: The height of the large PDF on which the smaller PDFs will be laid out. + :param cutting_width: The horizontal buffer to leave between the grid. + :param cutting_height: The vertical buffer to leave between the grid. + :param unit: The unit to use (common to the input and output PDFs). + :param dpi: The pixel density to consider (common to the input and output PDFs). + :return: The PDF grid. + """ + + # Create the base PDF: + base_canvas = PDFMaker( + width = output_width, + height = output_height, + unit = unit, + dpi = dpi + ) + base_canvas.draw_line(0, 1, 1, 0, alpha = 0.0) + base_pdf = base_canvas.save() + + # Adjust all units to match the pixel density adjustments: + input_width *= base_canvas.unit_factor + input_height *= base_canvas.unit_factor + output_width *= base_canvas.unit_factor + output_height *= base_canvas.unit_factor + cutting_width *= base_canvas.unit_factor + cutting_height *= base_canvas.unit_factor + + # Calculate how many input pdfs will fit and the page count needed: + per_row = math.floor((output_width - cutting_width) / (input_width + cutting_width)) + per_column = math.floor((output_height - cutting_height) / (input_height + cutting_height)) + per_page = per_row * per_column + output_page_count = math.ceil(len(pdf_files) / per_page) + + # Calculate the starting point on the page from where the pasting will start: + page_start_x = (output_width - (per_row * (input_width + cutting_width)) + cutting_width) / 2.0 + page_start_y = (output_height - (per_column * (input_height + cutting_height)) + cutting_height) / 2.0 + + # We make a writer object to write pages to the output file, + # and we make a list that will hold the individual output pages: + grid_pdf = PdfWriter() + + # We create each needed page: + for page_number in range(output_page_count): + + # Open the base PDF and create a page here: + grid_page = PdfReader(base_pdf).pages[0] + + # Shortlist the input pdfs to be pasted on this page: + starting_offset = page_number * per_page + ending_offset = starting_offset + per_page + ending_offset = min(ending_offset, len(pdf_files)) + pdf_files_for_page = pdf_files[starting_offset:ending_offset] + + # We paste all the input PDFs one-by-one: + for index, input_pdf in enumerate(pdf_files_for_page): + + # Compute the coordinates to paste on: + row_number = math.floor(index / per_row) + column_number = index if index < per_row else index % per_row + paste_x = page_start_x + (column_number * input_width) + (column_number * cutting_width) + paste_y = page_start_y + (row_number * input_height) + (row_number * cutting_height) + + # The default system for the reportlab is bottom-up, + # we convert to top-down for intuitive operations: + paste_y = base_canvas.shape[1] - paste_y - input_height + + # Open th smaller PDF and paste it on those coordinates: + input_page = PdfReader(input_pdf).pages[0] + input_page.add_transformation(Transformation().translate( + tx = paste_x, + ty = paste_y + ), expand = True) + grid_page.merge_page(input_page) + + # Add the grid page to the grid PDF: + grid_pdf.add_page(grid_page) + + # Join and return the result: + grid_pdf_in_ram = io.BytesIO() + grid_pdf.write(grid_pdf_in_ram) + return grid_pdf_in_ram + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + + async def main(): + + my_pdf = PDFMaker(width = 210, height = 297) + # my_image = await my_pdf.image_from_url(r"https://images.pexels.com/photos/28973930/pexels-photo-28973930/free-photo-of-historic-saigon-central-post-office-architecture.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1") + # my_image = await my_pdf.image_from_url(r"") + # my_image = await my_pdf.image_from_url(r"") + my_image = await my_pdf.image_from_url(r"https://images.pexels.com/photos/18317748/pexels-photo-18317748/free-photo-of-peoples-committee-of-ho-chi-minh.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1") + # my_image.show() + blurred_image = PDFMaker.fit_image_to_aspect_ratio(my_image, 1.49) + blurred_image.show() + + asyncio.run(main()) diff --git a/queue/__init__.py b/queue/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/queue/kafka/__init__.py b/queue/kafka/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/queue/kafka/controllers/__init__.py b/queue/kafka/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/queue/kafka/controllers/async_kafka.py b/queue/kafka/controllers/async_kafka.py new file mode 100644 index 0000000..1a87e8f --- /dev/null +++ b/queue/kafka/controllers/async_kafka.py @@ -0,0 +1,523 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Saturday, 13th Jul, 2024 + + OBJECTIVE: + + To be able to work with keys + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# To use Kafka: +from aiokafka import AIOKafkaProducer +from aiokafka import AIOKafkaConsumer + +# For working with JSON strings: +from utils_v2.string import json +from utils_v2.serialization.json_serializer import JSONSerializer + +# Data models: +from utils_v2.queue.kafka.models.message import ConsumedKafkaMessage + +# For debugging: +from icecream import IceCreamDebugger + +# For SSL security: +import ssl + +# For asynchronous activities: +import asyncio + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def get_ssl_context( + ca_file, + cert_file, + key_file +): + + """ + Generate the SSL context to use with the Kafka instances. + :param ca_file: The Certificate Authority file as a path to a local file. + :param cert_file: The Certificate file as a path to a local file. + :param key_file: The Key file as a path to a local file. + :return: The SSL context instance as a path to a local file. + """ + + ssl_context = ssl.create_default_context() + ssl_context.load_verify_locations(ca_file) + ssl_context.load_cert_chain(certfile = cert_file, keyfile = key_file) + return ssl_context + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class ProducerKafka: + + def __init__( + self, + topic, + serializer = None, + debug = True, + debug_prefix = "Kafka (P) | ", + **kwargs + ): + + """ + Create a Kafka Producer. + :param topic: The topic to produce on. + :param serializer: The serializer to use. + :param debug: Whether, or not, you want to print the debug strings. + :param debug_prefix: The prefix to use while debugging. + :param kwargs: Any configuration parameters for the Kafka instances. + """ + + # Initialize the debugger: + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + + # initialize the Kafka producer: + self.__topic = topic + self.__kwargs = kwargs + self.__producer = None + self.__connected = False + self.__serializer = serializer or JSONSerializer() + + # For establishing connection: + self.__exclusive_semaphore = asyncio.Semaphore(1) + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + async def connect(self): + + """ + Connects to the Kafka server if not connected. + :return: True or False based on the success of the operation. + """ + + async with self.__exclusive_semaphore: + if not self.__connected: + try: + self.__producer = AIOKafkaProducer(**self.__kwargs) + await self.__producer.start() + self.__connected = True + except Exception as exception: self.__printer(exception) + return self.__connected + + async def ensure_connection(self): + + """ + Connects to the Kafka server if not connected. + :return: True or False based on the success of the operation. + """ + + if not self.__connected: await self.connect() + return self.__connected + + async def close(self): + + """ + Terminates the connection. + :return: None. + """ + + if self.__connected: + try: + await self.__producer.stop() + self.__printer("Producer closed!") + self.__connected = False + except Exception as exception: self.__printer(exception) + + async def produce(self, value, key = None, topic = None, encoding = "utf-8"): + + """ + Sends one message to the Kafka server on the topic that has been set for this instance. + :param value: The message to send. + :param key: The key to use when you want the messages to follow an order. + :param topic: A custom topic for this message, else the topic defined during the creation of this instance will + be used by default. + :param encoding: The encoding format. + :return: True or False based on the success of the operation. + """ + + # Ensure connectivity to the server. + # If not connected, return with failure immediately. + if not await self.ensure_connection(): return False + + try: + + # Send the message: + await self.__producer.send_and_wait( + topic = topic or self.__topic, + value = self.__serializer.serialize(data = value, encoding = encoding), + key = key + ) + + # Return with success if no exception occurred: + return True + + # Return with failure if something went wrong: + except Exception as exception: + self.__printer(exception, self.__topic, type(value), value) + return False + + +# --------------------------------------------------------------------------------------------------------------------- + + +class ConsumerKafka: + + def __init__( + self, + topic, + serializer = None, + debug = True, + debug_prefix = "Kafka (C) | ", + **kwargs + ): + + """ + Create a Kafka Consumer. + :param topic: The topic to consumer on. + :param serializer: The serializer to use. + :param debug: Whether, or not, you want to print the debug strings. + :param debug_prefix: The prefix to use while debugging. + :param kwargs: Any configuration parameters for the Kafka instances. + """ + + # Initialize the debugger: + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + + # initialize the Kafka producer: + self.__topic = topic + self.__kwargs = kwargs + self.__consumer = None + self.__connected = False + self.__serializer = serializer or JSONSerializer() + + # For establishing connection: + self.__exclusive_semaphore = asyncio.Semaphore(1) + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + async def connect(self): + + """ + Connects to the Kafka server if not connected. + :return: True or False based on the success of the operation. + """ + + async with self.__exclusive_semaphore: + if not self.__connected: + try: + self.__consumer = AIOKafkaConsumer(self.__topic, **self.__kwargs) + await self.__consumer.start() + self.__connected = True + except Exception as exception: self.__printer(exception) + return self.__connected + + async def ensure_connection(self): + + """ + Connects to the Kafka server if not connected. + :return: True or False based on the success of the operation. + """ + + if not self.__connected: await self.connect() + return self.__connected + + async def close(self): + + """ + Terminates the connection. + :return: None. + """ + + if self.__connected: + try: + await self.__consumer.stop() + self.__printer("Consumer closed!") + self.__connected = False + except Exception as exception: self.__printer(exception) + + async def consume(self, count = 1, timeout = 0.05, encoding = "utf-8"): + + """ + Get messages from the Kafka server. + :param count: The number of messages to get from the Kafka server. + :param timeout: The time in seconds to wait for retrieval. + :param encoding: The encoding to use. + :return: The messages that were received. If no messages are available, an empty list will be returned. + """ + + # Ensure connectivity to the server. + # If not connected, return with failure immediately. + if not await self.ensure_connection(): return [] + + # Make a variable that will hold the final results: + messages = [] + + try: + + # Read some messages: + results = await self.__consumer.getmany( + max_records = max(1, count), + timeout_ms = int(timeout * 1_000) + ) + + # Format the received messages: + if results: + for topic_partition, records in results.items(): + for record in records: + messages.append(ConsumedKafkaMessage.from_aiokafka( + message = record, + deserializer = lambda x: self.__serializer.deserialize(x, encoding = encoding) + )) + + # Debugging print if something went wrong: + except Exception as exception: self.__printer(exception) + + # Done here: + return messages + + +# --------------------------------------------------------------------------------------------------------------------- + + +class BidirectionalKafka: + + # The 'roles' that the instance can take. + # The master talks on the channel (topic) that the slave listens on and vice versa. + # Master-Slave is only for deciding who talks on which channel and who listens on which. + # In a two-party system, one must be the master, the other must be the slave. + # There are no extra privileges that the master enjoys. The naming convention was borrowed from common protocols + # used in electronics (like I2C). + ROLE_MASTER = 1 + ROLE_SLAVE = 0 + + def __init__( + self, + role, + topic, + ack_topic: str = None, + group: str = None, + serializer = None, + debug = True, + debug_prefix = "Kafka (B) | ", + **kwargs + ): + + """ + Creates a walkie-talkie type setup to use Kafka in a bidirectional manner. Fo more information on all the + individual methods, please read through the doc-strings of the component classes 'ProducerKafka', and + 'ConsumerKafka'. + :param role: Select from "ROLE_MASTER" and "ROLE_SLAVE". Between the two parties that are talking, one will be + the master and the other will be the slave. The channel that the master uses to speak will the one the slave + uses to listen, and vice versa. + :param topic: The topic to communicate on. Will be the same between the master and the slave. + :param ack_topic: Explicitly provide this for the second channel, or it will be created from the name of the + topic itself. Will be the same between the master and the slave. + :param group: The group to assign the instance to. + :param debug: Whether, or not, you want to print the debug strings. + :param debug_prefix: The prefix to use while debugging. + :param kwargs: Any configuration parameters for the Kafka instances. + """ + + # Not down the basic variables: + self.__role = role + self.__topic = topic + self.__ack_topic = ack_topic or topic + "Ack" + self.__group = group + + # In case the current instance is the master, + # it will talk on "topic", and listen on "ack_topic": + if self.__role == self.ROLE_MASTER: + self.__producer_kwargs = kwargs.copy() + self.__producer = ProducerKafka( + topic = self.__topic, + serializer = serializer, + debug = debug, + debug_prefix = debug_prefix.strip() + " (P) | ", + **self.__producer_kwargs + ) + self.__consumer_kwargs = kwargs.copy() + self.__consumer_kwargs["group_id"] = self.__group + self.__consumer = ConsumerKafka( + topic = self.__ack_topic, + group = group, + serializer = serializer, + debug = debug, + debug_prefix = debug_prefix.strip() + " (C) | ", + **self.__consumer_kwargs + ) + + # On the other hand, if the current instance is a slave, + # It will listen on "topic", and talk on "ack_topic": + else: + self.__producer_kwargs = kwargs.copy() + self.__producer = ProducerKafka( + topic = self.__ack_topic, + serializer = serializer, + debug = debug, + debug_prefix = debug_prefix.strip() + " (P) | ", + **self.__producer_kwargs + ) + self.__consumer_kwargs = kwargs.copy() + self.__consumer_kwargs["group_id"] = self.__group + self.__consumer = ConsumerKafka( + topic = self.__topic, + group = group, + serializer = serializer, + debug = debug, + debug_prefix = debug_prefix.strip() + " (C) | ", + **self.__consumer_kwargs + ) + + def enable_debug(self): + self.__producer.enable_debug() + self.__consumer.enable_debug() + + def disable_debug(self): + self.__producer.disable_debug() + self.__consumer.disable_debug() + + async def ensure_connection(self): + await self.__producer.ensure_connection() + await self.__consumer.ensure_connection() + + async def close(self): + await self.__producer.close() + await self.__consumer.close() + + async def produce(self, message, encoding = "utf-8"): + return await self.__producer.produce(message, encoding = encoding) + + async def consume(self, count = 1, timeout = 0.05, encoding = "utf-8"): + return await self.__consumer.consume(count = count, timeout = timeout, encoding = encoding) + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + import time + # from data_models.kafka_message import KafkaMessage + + ssl_ctx = get_ssl_context( + ca_file = r"/home/developer/PycharmProjects/utils/cred/kafka/cert_authority.pem", + cert_file = r"/home/developer/PycharmProjects/utils/cred/kafka/fullchain.pem", + key_file = r"/home/developer/PycharmProjects/utils/cred/kafka/privkey.pem" + ) + + async def consumer_test(): + + consumer = ConsumerKafka( + topic = "tick-listners", + # group_id = "assessImg", + group_id = "updateMedia", + bootstrap_servers = "wtt.ditscentre.in:9092", + security_protocol = "SSL", + ssl_context = ssl_ctx + ) + await consumer.connect() + await asyncio.sleep(1.5) + print("READY!") + + while True: + messages = await consumer.consume(count = 1) + for message in messages: print(message) + await asyncio.sleep(1.0) + + async def producer_test(): + + producer = ProducerKafka( + topic = "tick-listners", + bootstrap_servers = "del.ditscentre.in:9092", + security_protocol = "SSL", + ssl_context = ssl_ctx + ) + await producer.connect() + print("READY!") + + while True: + success = await producer.produce({"name": "Bhopli", "color": "orange"}) + print("PRODUCED:", success) + await asyncio.sleep(0.25) + + await producer.close() + + + asyncio.run(consumer_test()) diff --git a/queue/kafka/controllers/kafka.py b/queue/kafka/controllers/kafka.py new file mode 100644 index 0000000..9647d52 --- /dev/null +++ b/queue/kafka/controllers/kafka.py @@ -0,0 +1,586 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Friday, 20th Dec., 2024 + + OBJECTIVE: + + To work with Kafka in a synchronous way. This is a translation of the wrapper originally made for asynchronous + operation. + + REFERENCES: + + 01. https://docs.confluent.io/platform/current/clients/confluent-kafka-python/html/index.html# + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# To use Kafka: +from confluent_kafka import Producer +from confluent_kafka import Consumer + +# For working with JSON strings: +from utils_v2.string import json +from utils_v2.serialization.json_serializer import JSONSerializer + +# Data models: +from utils_v2.queue.kafka.models.message import ConsumedKafkaMessage + +# For debugging: +from icecream import IceCreamDebugger + +# To work with datatypes: +from typing import List, Literal + +# To work with date and time: +import time + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class ProducerKafka: + + def __init__( + self, + config: dict, + topic: str, + serializer = None, + debug: bool = True, + debug_prefix = "Kafka (P) | " + ): + + """ + Create a Kafka Producer. + :param config: The configuration as expected by Confluent-Kafka library. + :param topic: The topic to produce on. + :param serializer: The serializer to use. + :param debug: Whether, or not, you want to print the debug strings. + :param debug_prefix: The prefix to use while debugging. + """ + + # Initialize the debugger: + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + + # initialize the Kafka producer: + self.__topic = topic + self.__config = config + self.__producer = None + self.__connected = False + self.__serializer = serializer or JSONSerializer() + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + @staticmethod + def create_config( + bootstrap_servers: str | List[str], + security_protocol: Literal["PLAINTEXT", "SSL"] = "PLAINTEXT", + ca_file: str | None = None, + cert_file: str | None = None, + key_file: str | None = None, + client_id: str | int | None = None, + acks: int = 0, + retries: int = 1, + linger_ms: int = 0, + misc_json: dict = None + ): + + """ + Creates the config required for Confluent-Kafka's library. + :param bootstrap_servers: The addresses of the Kafka brokers. + :param security_protocol: What sort of security protocol to use. + :param ca_file: Needed for 'SSL' security protocol. + :param cert_file: Needed for 'SSL' security protocol. + :param key_file: Needed for 'SSL' security protocol. + :param client_id: An identifier for one producer. Useful for debugging later. + :param acks: The no. of acknowledgements needed by the producer to consider the message as delivered. '0' means + fire-and-forget, 'all' or '-1' means that every in-sync replica must acknowledge. It could be any no. + :param retries: The no. of times the producer mut try to send the message in case of a failure. + :param linger_ms: The time in milliseconds to wait before sending a batch of messages to the broker. + :param misc_json: Any other custom configuration that is specific to the Confluent Kafka library. + :return: The dictionary that needs to be passed as the 'conf' param when creating the producer. + """ + + # Start with the bare minimum: + if not isinstance(bootstrap_servers, list): bootstrap_servers = [bootstrap_servers] + config = { + "bootstrap.servers": ",".join(bootstrap_servers), + "security.protocol": security_protocol, + "acks": acks, + "retries": retries, + "linger.ms": linger_ms + } + + # Add the SSL security details: + if security_protocol == "SSL": + config["ssl.ca.location"] = ca_file + config["ssl.certificate.location"] = cert_file + config["ssl.key.location"] = key_file + + # Add an identifier for debugging: + if client_id: config["client.id"] = client_id + + # Add the elements of the misc. JSON: + if misc_json: + for k, v in misc_json.items(): + config[k] = v + + # Done here: + return config + + @property + def client(self) -> Producer: + return self.__producer + + def connect(self) -> bool: + + """ + Connects to the Kafka server if not connected. + :return: True or False based on the success of the operation. + """ + + if not self.__connected: + try: + self.__producer = Producer(self.__config) + self.__connected = True + except Exception as exception: self.__printer(exception) + return self.__connected + + def ensure_connection(self): + + """ + Connects to the Kafka server if not connected. + :return: True or False based on the success of the operation. + """ + + if not self.__connected: self.connect() + return self.__connected + + def flush(self, timeout: float = None): + + """ + Flushes the buffer entirely. + :param timeout: The timeout value in seconds. + :return: None + """ + + start_time = time.time() + self.__producer.flush(timeout = timeout) + message = f"Producer flushed in {time.time() - start_time:.5f} second(s)." + self.__printer(message) + + def close(self): + + """ + Terminates the connection. + :return: None. + """ + + if self.__connected: + try: + self.flush() + self.__printer("Producer closed!") + self.__connected = False + except Exception as exception: self.__printer(exception) + return not self.__connected + + def produce( + self, + value, + key = None, + topic = None, + encoding = "utf-8", + callback = None, + poll_immediately: bool = False + ) -> bool: + + """ + Sends one message to the Kafka server on the topic that has been set for this instance. + :param value: The message to send. + :param key: The key to use when you want the messages to follow an order. + :param topic: A custom topic for this message, else the topic defined during the creation of this instance will + be used by default. + :param encoding: The encoding format. + :param callback: The function to call for delivery reports. + :param poll_immediately: Whether, or not, you would like to run 'poll' method immediately after the produce + method. + :return: True or False based on the success of the operation. + """ + + # Ensure connectivity to the server. + # If not connected, return with failure immediately. + if not self.ensure_connection(): return False + + try: + + # Send the message: + self.__producer.produce( + topic = topic or self.__topic, + value = self.__serializer.serialize(data = value, encoding = encoding), + key = key, + callback = callback + ) + if poll_immediately: self.__producer.poll(0) + + # Return with success if no exception occurred: + return True + + # Return with failure if something went wrong: + except Exception as exception: + self.__printer(exception, self.__topic, type(value), value) + return False + + +# --------------------------------------------------------------------------------------------------------------------- + + +class ConsumerKafka: + + def __init__( + self, + config: dict, + topic: str, + serializer = None, + debug = True, + debug_prefix = "Kafka (C) | ", + **kwargs + ): + + """ + Create a Kafka Consumer. + :param topic: the topic to consume on. + :param serializer: The serializer to use. + :param debug: Whether, or not, you want to print the debug strings. + :param debug_prefix: The prefix to use while debugging. + :param kwargs: Any configuration parameters for the Kafka instances. + """ + + # Initialize the debugger: + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + + # initialize the Kafka consumer: + self.__config = config + self.__topic = topic + self.__kwargs = kwargs + self.__consumer = None + self.__connected = False + self.__serializer = serializer or JSONSerializer() + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + @staticmethod + def create_config( + bootstrap_servers: str | List[str], + group_id: str = "default", + auto_offset_reset: Literal["latest", "earliest"] = "latest", + security_protocol: Literal["PLAINTEXT", "SSL"] = "PLAINTEXT", + ca_file: str | None = None, + cert_file: str | None = None, + key_file: str | None = None, + client_id: str | int | None = None, + misc_json: dict = None + ): + + """ + Creates the config required for Confluent-Kafka's library. + :param bootstrap_servers: The addresses of the Kafka brokers. + :param group_id: When a set of consumers are working on one topic in a group such that you want only one of them + to read a particular message. + :param auto_offset_reset: Use this to influence the behaviour of how the Kafka consumer will read messages when + it first connects to the broker. It could either want to read the earliest (oldest) messages or the latest + (newest) messages from the queue. + :param security_protocol: What sort of security protocol to use. + :param ca_file: Needed for 'SSL' security protocol. + :param cert_file: Needed for 'SSL' security protocol. + :param key_file: Needed for 'SSL' security protocol. + :param client_id: An identifier for one producer. Useful for debugging later. + :param misc_json: Any other custom configuration that is specific to the Confluent Kafka library. + :return: The dictionary that needs to be passed as the 'conf' param when creating the producer. + """ + + # Start with the bare minimum: + if not isinstance(bootstrap_servers, list): bootstrap_servers = [bootstrap_servers] + config = { + "bootstrap.servers": ",".join(bootstrap_servers), + "security.protocol": security_protocol + } + + # Add the SSL security details: + if security_protocol == "SSL": + config["ssl.ca.location"] = ca_file + config["ssl.certificate.location"] = cert_file + config["ssl.key.location"] = key_file + + # Add an identifier for debugging: + if client_id: config["client.id"] = client_id + + # Consumer-specific: + config["group.id"] = group_id + config["auto.offset.reset"] = auto_offset_reset + + # Add the elements of the misc. JSON: + if misc_json: + for k, v in misc_json.items(): + config[k] = v + + # Done here: + return config + + @property + def client(self) -> Consumer: + return self.__consumer + + def connect(self): + + """ + Connects to the Kafka server if not connected. + :return: True or False based on the success of the operation. + """ + + if not self.__connected: + try: + if not isinstance(self.__topic, list): self.__topic = [self.__topic] + self.__consumer = Consumer(self.__config) + self.__consumer.subscribe(self.__topic) + self.__connected = True + except Exception as exception: self.__printer(exception) + return self.__connected + + def ensure_connection(self): + + """ + Connects to the Kafka server if not connected. + :return: True or False based on the success of the operation. + """ + + if not self.__connected: self.connect() + return self.__connected + + def close(self): + + """ + Terminates the connection. + :return: None. + """ + + if self.__connected: + try: + self.__consumer.close() + self.__printer("Consumer closed!") + self.__connected = False + except Exception as exception: self.__printer(exception) + + def __consume_one( + self, + timeout = 0.05, + encoding = "utf-8" + ) -> dict | None: + + """ + Here we consume exactly one message from the broker. If we need multiple messages (a batch of messages), we call + this method as many times as needed. + :param timeout: The time in seconds to wait for retrieval. + :param encoding: The encoding to use. + :return: A dict that holds the details of the message. Null if no message was fetched. + """ + + message = self.__consumer.poll(timeout = timeout) + if message is None or message.error(): return None + else: return ConsumedKafkaMessage.from_confluent_kafka( + message = message, + deserializer = lambda x: self.__serializer.deserialize(x, encoding = encoding) + ) + # message_value = message.value() + # if message_value is not None: message_value = self.__serializer.deserialize(message_value, encoding = encoding) + # return { + # "topic": message.topic(), + # "partition": message.partition(), + # "offset": message.offset(), + # "key": message.key().decode("utf-8") if message.key() else None, + # "value": message_value, + # "timestamp": message.timestamp()[1], + # "headers": message.headers() + # } + + def consume(self, count = 1, timeout = 0.05, encoding = "utf-8"): + + """ + Get messages from the Kafka broker. + :param count: The number of messages to get from the Kafka server. + :param timeout: The time in seconds to wait for retrieval. + :param encoding: The encoding to use. + :return: The messages that were received. If no messages are available, an empty list will be returned. + """ + + # Make some variables: + start_time = time.time() + messages = [] + + # Ensure connectivity to the server. + # If not connected, return with failure immediately. + if not self.ensure_connection(): return messages + + # Get into an indefinite loop. + while True: + + # If timed-out, break out of the loop: + elapsed_time = time.time() - start_time + if elapsed_time > timeout: break + + # Get the next message: + message = self.__consume_one( + timeout = timeout - elapsed_time, + encoding = encoding + ) + + # If a message was fetched in the timeout, append it to the list of messages. + # Break out of the loop if you have reached the needed no. of messages: + if message: + messages.append(message) + if len(messages) >= count: break + + # Done here: + return messages + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import datetime + import time + + def producer_test( + count: int = 10, + interval: float = 1.0 + ): + + # Create and connect the producer: + producer = ProducerKafka( + topic = "kft_file_upload", + config = ProducerKafka.create_config( + bootstrap_servers = "del.ditscentre.in:9092", + security_protocol = "SSL", + ca_file = r"../../creds/kafka/cert_authority.pem", + cert_file = r"../../creds/kafka/fullchain.pem", + key_file = r"../../creds/kafka/privkey.pem", + client_id = 123 + ) + ) + producer.connect() + print("PRODUCER READY!") + + # Send the message a number of times: + for message_no in range(count): + my_message = { + "ts": datetime.datetime.now().timestamp(), + "msgNo": message_no, + "payload": { + "name": "Bhopli", + "color": "orange", + "age": "just a baby", + } + } + success = producer.produce(my_message) + print("PRODUCED:", success) + time.sleep(interval) + + # Ensure a graceful close: + producer.close() + + def consumer_test(): + + # Create and connect the producer: + consumer = ConsumerKafka( + topic = "tick-listners", + config = ConsumerKafka.create_config( + bootstrap_servers = "del.ditscentre.in:9092", + group_id = "test-group", + security_protocol = "SSL", + ca_file = r"../../../../creds/kafka/cert_authority.pem", + cert_file = r"../../../../creds/kafka/fullchain.pem", + key_file = r"../../../../creds/kafka/privkey.pem", + ) + ) + consumer.connect() + print("CONSUMER READY!") + + for _ in range(500): + messages = consumer.consume(count = 3, timeout = 2.5) + print(json.to_string(messages, default = str)) + + consumer.close() + + # Run the test code: + # producer_test(count = 5) + consumer_test() diff --git a/queue/kafka/models/__init__.py b/queue/kafka/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/queue/kafka/models/message.py b/queue/kafka/models/message.py new file mode 100644 index 0000000..80e7029 --- /dev/null +++ b/queue/kafka/models/message.py @@ -0,0 +1,257 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 30th Dec., 2024. + + OBJECTIVE: + + To provide a standardized structure for Kafka messages. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, model_validator, AwareDatetime +from typing import Optional, Literal, Union, Dict, List, Any + +# Related to Google: +from google.auth.transport.requests import Request +from google.oauth2.credentials import Credentials + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with date and time: +import datetime +import dateparser + +# To make API calls: +import httpx + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class ConsumedKafkaMessage(BaseModel): + + topic: str = Field( + description = "the topic on which this message was received", + frozen = True + ) + + partition: int = Field( + description = "the partition in which this message was received", + frozen = True + ) + + offset: int = Field( + description = "the message's no. in the partition", + frozen = True + ) + + headers: List[Any] = Field( + description = "the headers received with the message", + frozen = True + ) + + key: Any = Field( + description = "the key with which this message is associated; important for partition management", + frozen = True + ) + + value: Any = Field( + description = "the actual payload of the message", + frozen = True + ) + + ts: AwareDatetime | None = Field( + description = "the time (utc) at which this message was sent to the queue", + frozen = True + ) + + tsType: Literal[ + "createTime", # ...... The time at which the producer produced the message. + "logAppendTime", # ... The time at which the message was received by the broker. + None # ............... Unknown. + ] = Field( + description = "to understand the source of the timestamp", + frozen = True + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "ignore" + populate_by_name = True + + # ┓┏ ┓• ┓ • + # ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓ + # ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗ + + @field_validator("ts", mode = "before") + def parse_dates(cls, value): + if value is None: return None + if not isinstance(value, datetime.datetime): + parsed = date_time.parse_date_time( + value, + date_formats = ["%Y-%m-%d %H:%M:%S"], + timezone = None + ) + value = parsed if isinstance(parsed, datetime.datetime) else dateparser.parse(value) + if isinstance(value, datetime.datetime): value = date_time.to_timezone(value, date_time.TIMEZONE_UTC) + return value + + # ┏┓ • + # ┃┃┏┓┏┓┏┓┏┓┏┓╋┓┏┓┏ + # ┣┛┛ ┗┛┣┛┗ ┛ ┗┗┗ ┛ + # ┛ + + pass + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + @staticmethod + def from_aiokafka( + message, + deserializer = None + ): + + """ + To populate this model directly from the output of the 'aiokafka' library. + :param message: The raw message from the library. + :param deserializer: The function to use to deserialize the contents of the message. + :return: The standardized Kafka consumed message. + """ + + # Extract the key and value: + key = message.key + value = message.value + if deserializer: + if key: key = deserializer(key) + if value: value = deserializer(value) + + # Build and return the model: + return ConsumedKafkaMessage( + topic = message.topic, + partition = message.partition, + offset = message.offset, + headers = message.headers or [], + key = key, + value = value, + ts = message.timestamp / 1000.0 if message.timestamp else None, + tsType = { + 0: "createTime", + 1: "logAppendTime" + }.get(message.timestamp_type) + ) + + @staticmethod + def from_confluent_kafka( + message, + deserializer = None + ): + + """ + To populate this model directly from the output of the 'aiokafka' library. + :param message: The raw message from the library. + :param deserializer: The function to use to deserialize the contents of the message. + :return: The standardized Kafka consumed message. + """ + + # If the message was null or an error: + if message is None or message.error(): return None + + # Figure out the timestamp: + raw_ts = message.timestamp() + ts_type = raw_ts[0] if raw_ts else None + ts = raw_ts[1] / 1_000.0 if raw_ts else None + + # Extract the key and value: + key = message.key() + value = message.value() + if deserializer: + if key: key = deserializer(key) + if value: value = deserializer(value) + + # Build and return the model: + return ConsumedKafkaMessage( + topic = message.topic(), + partition = message.partition(), + offset = message.offset(), + headers = message.headers() or [], + key = key, + value = value, + ts = ts, + tsType = { + 1: "createTime", + 2: "logAppendTime" + }.get(ts_type) + ) + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/rate_limit/__init__.py b/rate_limit/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rate_limit/async_token_bucket.py b/rate_limit/async_token_bucket.py new file mode 100644 index 0000000..4fb85e7 --- /dev/null +++ b/rate_limit/async_token_bucket.py @@ -0,0 +1,212 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Wednesday, 15th May, 2024 + + OBJECTIVE: + + To provide a rate-limiting mechanism using the simple token bucket algorithm. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For date and time keeping: +import datetime +import time + +# For asynchronous activities: +import asyncio + +# For mathematical operations: +import math + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class TokenBucket: + + """ + MODES: "add" - Add 'rate_limit' no. of tokens to the bucket every interval. + "reset" - Reset the token count to 'rate_limit' every interval + """ + + MODE_RESET = 0 + MODE_ADD = 1 + + ONE_YEAR = 3_15_36_000.0 + ONE_MONTH = 26_78_400.0 + ONE_WEEK = 6_04_800.0 + ONE_DAY = 86_400.0 + ONE_HOUR = 3_600.0 + ONE_MINUTE = 60.0 + ONE_SECOND = 1.0 + + def __init__(self, rate_limit, seconds = 1.0, mode = "reset", sleep = 0.1, in_sequence = False): + + """ + Initialize the rate controller. + :param rate_limit: The no. of operations allowed per unit of time. + :param seconds: The time period in seconds in which the tokens get reset or added. + :param mode: To select what happens when the period is over. 'reset' mode means that the remaining tokens from + the previous period are discarded and the counter is set back to the rate limit, and 'add' mode means that + new tokens are added on top of the exiting ones that were unused in the previous period. + :param sleep: The delay to add before checking back to see if tokens are available. Keep it longer for longer + periods (which is adjusted by the 'seconds' parameter). + :param in_sequence: Whether, or not, you want to maintain the sequence in which the requests were made + (experimental). + """ + + if rate_limit is not None: + rate_limit = int(rate_limit) + self.__semaphore = asyncio.Semaphore(1 if in_sequence else rate_limit) + mode = mode.lower() + if mode not in [self.MODE_RESET, self.MODE_ADD]: mode = self.MODE_RESET + self.__mode = mode + self.__rate_limit = rate_limit + self.__token_count = rate_limit + self.__last_token_generation_time = time.time() + self.__sleep = sleep + self.__seconds = seconds + + async def has_turn(self): + + """ + Just to check if a token is available. + Should be used only if you don't want to wait for turn in case it is unavailable. + :return: True if the token is available, False if not. + """ + + # If the user doesn't want any rate-limits, we return immediately. + # Otherwise, we check if the user has any tokens available: + if self.__rate_limit is None: return True + if self.__token_count > 0: return True + else: return False + + async def get_turn(self, timeout = None): + + """ + To wait till either you get your turn or the wait gets timed-out. + :param timeout: The time (in seconds) to wait to get a turn before exiting with failure. + :return: True if a turn was received, else False if timed-out. + """ + + # If the user doesn't want any rate-limits, we return immediately: + if self.__rate_limit is None: return + + # Start by making variables: + got_turn = False + wait_start = time.time() + + # Otherwise, we wait for the semaphore: + async with self.__semaphore: + + # Wait till you get your turn or the attempt gets timed-out: + while True: + + # If the timeout has been exceeded: + if ( + timeout is not None and + time.time() - wait_start >= timeout + ): break + + # If it is time to generate new tokens: + time_delta = time.time() - self.__last_token_generation_time + if time_delta >= self.__seconds: + if self.__mode == self.MODE_RESET: self.__token_count = self.__rate_limit + else: self.__token_count += int(self.__rate_limit * math.floor(time_delta / self.__seconds)) + self.__last_token_generation_time = time.time() + + # If a token is available (or not): + if self.__token_count > 0: + self.__token_count -= 1 + got_turn = True + break + else: await asyncio.sleep(self.__sleep) + + # Done here: + return got_turn + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import random + + async def single_test(rate_controller, count): + has_turn = await rate_controller.has_turn() + got_turn = await rate_controller.get_turn() + print(f"TURN: {count:.<5} {'Y' if has_turn else '-'} / {'Y' if got_turn else '-'} ({datetime.datetime.now()})") + if got_turn: await asyncio.sleep(random.random()) + + async def multi_test(max_count): + rate_controller = TokenBucket( + rate_limit = 10, + seconds = 1, + in_sequence = False, + sleep = 0.025, + mode = "reset", + timeout = 3 + ) + tasks = [single_test(rate_controller, count + 1) for count in range(max_count)] + await asyncio.gather(*tasks) + + + start_time = time.time() + asyncio.run(multi_test(100)) + print(f"FINISHED IN {time.time() - start_time} SECONDS!") diff --git a/rest/__init__.py b/rest/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rest/controllers/__init__.py b/rest/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rest/controllers/async_base.py b/rest/controllers/async_base.py new file mode 100644 index 0000000..560c203 --- /dev/null +++ b/rest/controllers/async_base.py @@ -0,0 +1,350 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 16th Dec., 2024 + + OBJECTIVE: + + To provide a class to make REST-ful API calls and have a structured approach for the inputs and outputs. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# The base model: +from utils_v2.rest.models.api_call import ApiResponse + +# My utils: +from utils_v2.date_time import date_time + +# To make API calls: +import httpx + +# To work with date and time: +import datetime + +# For working with datatypes: +from typing import Literal, List + +# For debugging: +from icecream import IceCreamDebugger +import inspect + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncRestBase: + + def __init__( + self, + http_client: httpx.AsyncClient = None, + debug = True, + debug_prefix = "GMail | ", + debug_only_errors = True + ): + + """ + To initialize the base class. + :param http_client: An asynchronous HTTP client to make API calls. + :param debug: Whether, or not, you would like to show debugging messages on the terminal. + :param debug_prefix: The prefix string to identify the debugging messages. + :param debug_only_errors: Whether you would like to show all debugging messages or just error messages. + """ + + # Prepare the debugging utility: + self._debug_prefix = debug_prefix + self._printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self._printer.disable() + self._debug_only_errors = debug_only_errors + + # Accept/create an HTTP client to work with: + if http_client: self._http_client = http_client + else: self._http_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 5.0, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 120.0 # ..... Time to wait for receiving data. + ) + ) + + def enable_debug(self): + self._printer.enable() + + def disable_debug(self): + self._printer.disable() + + def debug_only_errors(self): + self._debug_only_errors = True + + def debug_everything(self): + self._debug_only_errors = False + + # ┏┓┏┓┳ ┏┓ ┓┓• + # ┣┫┃┃┃ ┃ ┏┓┃┃┓┏┓┏┓ + # ┛┗┣┛┻ ┗┛┗┻┗┗┗┛┗┗┫ + # ┛ + + async def get( + self, + url: str, + headers: dict = None, + params: dict = None + ) -> ApiResponse: + + """ + To call an API using the GET method. + :param url: The URL to call. + :param headers: The headers to pass. + :param params: The params to send in the query string itself. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = ApiResponse( + action = inspect.stack()[1].function, + url = url, + method = "GET" + ) + + try: + + # Make the API call: + response = await self._http_client.get( + url = url, + headers = headers, + params = params + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = response.reason_phrase + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self._printer(exception, api_response.url, api_response.method, headers, params) + + # Done here: + return api_response + + async def post( + self, + url: str, + headers: dict = None, + json: dict = None, + data: dict = None, + content: str | bytes = None + ) -> ApiResponse: + + """ + To call an API using the POST method. + :param url: The URL to call. + :param headers: The headers to pass. + :param json: The params to send in the JSON body. + :param data: The params to send in the form-data in the body. + :param content: The raw content to be sent in the body (typically as an octet-stream). + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = ApiResponse( + action = inspect.stack()[1].function, + url = url, + method = "POST" + ) + + try: + + # Make the API call: + response = await self._http_client.post( + url = url, + headers = headers, + json = json, + data = data, + content = content + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = response.reason_phrase + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self._printer(exception, api_response.url, api_response.method, headers, json, data) + + # Done here: + return api_response + + async def put( + self, + url: str, + headers: dict = None, + json: dict = None, + data: dict = None + ) -> ApiResponse: + + """ + To call an API using the PUT method. + :param url: The URL to call. + :param headers: The headers to pass. + :param json: The params to send in the JSON body. + :param data: The params to send in the form-data in the body. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = ApiResponse( + action = inspect.stack()[1].function, + url = url, + method = "PUT" + ) + + try: + + # Make the API call: + response = await self._http_client.put( + url = url, + headers = headers, + json = json, + data = data + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = response.reason_phrase + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self._printer(exception, api_response.url, api_response.method, headers, json, data) + + # Done here: + return api_response + + async def delete( + self, + url: str, + headers: dict = None + ) -> ApiResponse: + + """ + To call an API using the DELETE method. + :param url: The URL to call. + :param headers: The headers to pass. + :return: A structured response that includes the raw response, the exception (if any), and so on. + """ + + # Prepare the structure of the response: + api_response = ApiResponse( + action = inspect.stack()[1].function, + url = url, + method = "DELETE" + ) + + try: + + # Make the API call: + response = await self._http_client.delete( + url = url, + headers = headers + ) + + # Note down the results: + api_response.response = response + api_response.httpCode = response.status_code + api_response.message = response.reason_phrase + + # If something goes wrong: + except Exception as exception: + api_response.exception = exception + api_response.message = str(exception) + self._printer(exception, api_response.url, api_response.method, headers) + + # Done here: + return api_response + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/rest/models/__init__.py b/rest/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rest/models/api_call.py b/rest/models/api_call.py new file mode 100644 index 0000000..954f30f --- /dev/null +++ b/rest/models/api_call.py @@ -0,0 +1,134 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 16th Dec., 2024. + + OBJECTIVE: + + To provide a data model for giving a general structure to API responses. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, model_validator +from typing import Optional, Literal, Union, Dict, List, Any + +# My utils: +from utils_v2.string import json +from utils_v2.string import regex + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class ApiResponse(BaseModel): + + action: str = Field( + description = "to know what was being done; initially intended to just hold the name of the calling function", + frozen = True, + default = None + ) + + url: str = Field(frozen = True) + method: str = Field(frozen = True) + response: Any = None + httpCode: int = None + + success: bool = False + message: str = None + data: Any = None + + exception: Any = None + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "forbid" + + # ┏┓ ┏┓ + # ┃ ┓┏┏╋┏┓┏┳┓ ┣ ┓┏┏┓┏┏ + # ┗┛┗┻┛┗┗┛┛┗┗ ┻ ┗┻┛┗┗┛ + + def to_markdown(self): + if self.exception: message = "❌ *API EXCEPTION:* ❌\n\n" + else: message = "*API RESPONSE:*\n\n" + message += f"*ACTION:*\n`{self.action}`\n\n" + message += f"*URL:*\n`{self.url}`\n\n" + message += f"*METHOD:*\n`{self.method}`\n\n" + message += f"*RESPONSE:*\n`{self.response}`\n\n" + message += f"*MESSAGE:*\n`{self.message}`\n\n" + message += f"*EXCEPTION:*\n`{self.exception.__class__.__name__}: {str(self.exception)}`\n\n" + return message + + async def get_json(self): + try: return self.response.json() + except: return {} + + async def get_content(self): + try: return self.response.content + except: return b"" + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/security/__init__.py b/security/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/security/__pycache__/__init__.cpython-310.pyc b/security/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe851c94262a70428cdb31d396a8e0f4f40cc680 GIT binary patch literal 167 zcmd1j<>g`k0+q$t=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vDKO;XkRX-)Q zEHx*;Ahk$8pfWilu_!m7C_gJTxujS>u^=-(Gp{7IC@(QbzqBMXr#QaMNWVBWxwI&= jq*6Z~D4AIjAFo$Xd5gm)H$SB`C)EyQM==wSU||3N@;ND7 literal 0 HcmV?d00001 diff --git a/security/__pycache__/sanitizers.cpython-310.pyc b/security/__pycache__/sanitizers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5492a0d1ba05b862d0ca0f63bcfb786975fcbc7b GIT binary patch literal 1929 zcmZux-EJF27~R=juh(vxmQW$MpbQcMjN)|_0TLmq2x$;4l@sCslIyUV?2O}0_OCOu zX>Hk8$!#xqgGOBC0eA>rVJ^7gidTpP;+tK^aoVmm<8O9m&U|~$cP71gvu?oi(eFnG zf7~&Qzx81Lv0(5GG%R;?DPl8nx=yjD z+O1NDxqXvXse5X7YqUn|r$)EVZqOS?CSR!;)a(?ku|OPT81*`aXZ@$$@3(eV%YlCJ z!yp#}65(y!Nz;Tfei)XM57u`#=hp2GaxN$tF5{Iiq(tfmf_5#7PV>Rh1D?{&gid#;tl325|?~Tb6Ul_b6^7^ z@i5KtGm;c=F#*anX2D}FG`B>&j?0l(}TSo;f$U1@x&ZXIVr7c8<6W<8y=G zg1?K$tpQNcqU@MOX~uYKdl(D|kGFYx$O0)^Bn$m8(a*<5}la* zju!hAMh}b=G%?5EuVT)Gxi3Rl31wlO!R+2UJ#%7BY-x|}6C{x|`{ps?&9R+WvZCLO z%`qBVCuq%h`hmu2R7QUm(s!nx0pcYT(@+2fIv(Ojovn7W@J3OqP+U+1L7GPt%Ba*# zo2Z?3etg^v6HOX83xgUYI1+CtESd&+%o16aLlg=yD2F41qND)xl2SU|e64z>c~Y?J z)y8t+HEJ*Y(*afm+=)~FXo9Kr!kPe`@cDLoba$?-mi=C{=k zZI81y)z_H5uPiZyT)_DQ z<&Z36301c)E$WpwU}=7*94LoFd8aXKl)SLx3|xEG_vex;G%n SentSMSMessageModel: + + """ + Sends one SMS through Nimbus IT's system. The text of the message must match the template that had been + submitted. A mismatch may cause the message to fail at best, and raise troubles in the real-world with + government bodies at worst. Be careful. + :param template_id: The id of the SMS template as registered on Nimbus's portal. + :param recipient_number: The phone number of the recipient. You can send an array of numbers, too, BUT IT IS + STRONGLY RECOMMENDED TO NOT DO THAT TO AVOID BEING BLOCKED BY DLT. + :param message: The message to send to the recipient. Should match the template that is being sent. + :param message_type: Choose between 'AsyncNimbusSMS.MESSAGE_TYPE_REGULAR' (default) and + 'AsyncNimbusSMS.MESSAGE_TYPE_UNICODE' based on the type of characters being sent. Both are class variables. + :param flash: to choose between a regular inbox SMS, or a flash SMS. + :return: The dict of all the details of the message that was sent including whether, or not, it was successfully + sent. Other details depend on the service provider (Nimbus IT in this case). + """ + + # Construct the basic structure of the response of this method: + summary = SentSMSMessageModel( + sender = {"senderId": self.__sender_id}, + recipient = {"recipientNo": recipient_number}, + text = message, + length = len(message), + isFlash = True if flash else False, + metadata = {"templateId": template_id} + ) + + try: + + # Pre-process the recipient's number: + if not isinstance(recipient_number, (list, set, tuple)): recipient_number = [recipient_number] + + # Call the API: + response = await self.__http_client.get( + url = r"http://nimbusit.net/api/pushsms", + params = { + "user": self.__user_id, + "authkey": self.__api_key, + "sender": self.__sender_id, + "mobile": ",".join([str(num) for num in recipient_number]), + "text": message, + "entityid": self.__entity_id, + "templateid": template_id, + "type": message_type, + "flash": flash + } + ) + + # For a successful API call: + if response.status_code == 200: + response_json = response.json() + summary.rawResponse = response_json + summary.success = True if response_json.get("STATUS", "ERROR").lower() in ["ok"] else False + if summary.success: summary.messageId = response_json.get("RESPONSE", {}).get("UID") + else: summary.message = response_json.get("RESPONSE", {}).get("INFO") + + # For any other code that indicates some form of failure: + else: summary.rawResponse = response.content.decode() + + except Exception as exception: + self.__printer(exception) + + return summary + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + + async def main(): + + client = AsyncNimbusSMS( + entity_id = "1701172465456946915", + sender_id = "TCAOFF", + user_id = "210844", + api_key = "92UnZwiiY7zps" + ) + + response = await client.send_sms( + template_id = "1707172474709021546", + recipient_number = "987039115511", + message = "OTP for The CA Office registration request is 583920. Please enter this to verify your identity and proceed with the registration request. - TCAOFF" + ) + print("SMS API RESPONSE:", response) + + my_balance = await client.get_balance() + print("REMAINING BALANCE:", my_balance) + + + asyncio.run(main()) diff --git a/sms/india/nimbus/models/__init__.py b/sms/india/nimbus/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sms/india/nimbus/models/response.py b/sms/india/nimbus/models/response.py new file mode 100644 index 0000000..d25c383 --- /dev/null +++ b/sms/india/nimbus/models/response.py @@ -0,0 +1,150 @@ +""" + + AUTHOR: + + Bhushan C Thakkar + + DATE: + + Monday, 20th Jan., 2025. + + OBJECTIVE: + + To give a structure to how Nimbus's API will respond. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For system-level activities: +import os +import io + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, PastDatetime, AwareDatetime +from typing import Optional, Literal, Union, Any + +# My utils: +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with MongoDB: +from bson.objectid import ObjectId + +# To work with date and time: +import datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class NimbusWhatsappSendMessageResponse(BaseModel): + + ts: AwareDatetime = Field( + description = "The time (UTC) at which this message was sent by the sender.", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + success: bool = Field( + description = "Whether, or not, the request was successful.", + frozen = True, + default = False + ) + + statusCode: str | int = Field( + description = "The response code as defined by Nimbus.", + frozen = True, + alias = "statuscode" + ) + + statusMessage: str = Field( + description = "A message about any error, or a general acknowledgement message.", + frozen = True, + alias = "msg" + ) + + requestId: str | int | None = Field( + description = "How Nimbus identifies your message.", + frozen = True, + default = None + ) + + messageCount: int = Field( + description = "The no. of messages sent.", + frozen = True, + default = 0 + ) + + messageCost: float | int | None = Field( + description = "The cost (in INR) of messages sent.", + frozen = True, + default = None + ) + + balance: float | None = Field( + description = "The balance remaining in the account.", + frozen = True, + default = None + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "allow" + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + pass diff --git a/sms/kenya/__init__.py b/sms/kenya/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sms/kenya/savvy_bulk_sms/__init__.py b/sms/kenya/savvy_bulk_sms/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sms/kenya/savvy_bulk_sms/controllers/__init__.py b/sms/kenya/savvy_bulk_sms/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sms/kenya/savvy_bulk_sms/controllers/async_savvy_bulk_sms.py b/sms/kenya/savvy_bulk_sms/controllers/async_savvy_bulk_sms.py new file mode 100644 index 0000000..16b9f17 --- /dev/null +++ b/sms/kenya/savvy_bulk_sms/controllers/async_savvy_bulk_sms.py @@ -0,0 +1,230 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Wednesday, 4th Dec., 2024 + + OBJECTIVE: + + To be able to send SMSs from Savvy Bulk SMS's API. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + + WEB-PORTAL: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# To make API Calls: +import httpx + +# Data models: +from utils_v2.sms.models.sms_message import SentSMSMessageModel + +# For debugging: +from icecream import IceCreamDebugger + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** CLASSES *** +# ***** **** +# ***************************************************************************************************************** + + +class AsyncSavvyBulkSMS: + + def __init__( + self, + api_key: str, + partner_id: str, + short_code: str, + http_client: httpx.AsyncClient = None, + debug = True, + debug_prefix = "Savvy SMS | ", + debug_only_errors = True + ): + + """ + Sets up an instance of an SMS sender that sends messages through Savvy Bulk SMS's API. + :param api_key: The API key received from Savvy Bulk SMS. + :param partner_id: Your id with Savvy Bulk SMS. + :param short_code: Your short code with Savvy Bulk SMS. + :param http_client: An instance of 'httpx' library's AsyncClient. If not given, one will be instantiated + internally. It is recommended that, for multi-auth use cases, you provide a common HTTP client from outside. + :param debug: Whether, or not, you would like to show debugging messages (can be changed on the fly). + :param debug_prefix: The prefix text to show with the debug string. + :param debug_only_errors: Whether you would like to show all debugging messages or just error messages. + """ + + # Create the debugging tools: + self.__printer = IceCreamDebugger(prefix = debug_prefix, includeContext = True) + if not debug: self.__printer.disable() + self.__debug_only_errors = debug_only_errors + + # Accept/create an HTTP client to work with: + if http_client: self.__http_client = http_client + else: self.__http_client = httpx.AsyncClient( + limits = httpx.Limits( + max_connections = 100, # ............ Maximum number of connections allowed in the pool. + max_keepalive_connections = 50, # ... Maximum number of connections that can be kept alive. + ), + timeout = httpx.Timeout( + pool = 120.0, # .... Time to wait for a free connection from the pool. + connect = 2.5, # ... Time to wait for establishing a connection to the server. + write = 10.0, # .... Time to wait for sending data. + read = 2.5 # ....... Time to wait for receiving data. + ) + ) + + # Capture the input config: + self.__api_key = api_key + self.__partner_id = partner_id + self.__short_code = short_code + + def enable_debug(self): + self.__printer.enable() + + def disable_debug(self): + self.__printer.disable() + + def debug_only_errors(self): + self.__debug_only_errors = True + + def debug_everything(self): + self.__debug_only_errors = False + + async def send_sms( + self, + recipient_number, + message + ) -> SentSMSMessageModel: + + """ + Send one SMS from Savvy Bulk SMS's API. + :param recipient_number: The mobile no. of the target recipient. + :param message: The message to send to the target recipient. + :return: + """ + + # Construct the basic structure of the response of this method: + summary = SentSMSMessageModel( + sender = { + "partnerId": self.__partner_id, + "shortCode": self.__short_code + }, + recipient = { + "recipientNo": recipient_number + }, + text = message, + length = len(message), + isFlash = False, + metadata = None + ) + + try: + + # Call the API: + api_response = await self.__http_client.get( + url = r"https://sms.savvybulksms.com/api/services/sendsms/", + params = { + "apikey": self.__api_key, + "partnerID": self.__partner_id, + "message": message, + "shortcode": self.__short_code, + "mobile": recipient_number, + } + ) + + # For a successful API call: + if api_response.status_code in [200]: + api_json = api_response.json() + summary.rawResponse = api_json + first_response = api_json.get("responses", [{}])[0] + first_desc = first_response.get("response-description", "N/A").lower().strip() + summary.success = True if first_desc == "success" else False + if summary.success: summary.messageId = first_response.get("messageid") + else: summary.message = first_response.get("response-description") + + # For any other code that indicates some form of failure: + else: summary.rawResponse = api_response.content.decode() + + # If something goes wrong along the way: + except Exception as exception: + self.__printer(exception) + + # Done here: + return summary + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + import asyncio + + async def main(): + + sender = AsyncSavvyBulkSMS( + api_key = "19250bdd74050f7cec980c71e75f851a", + partner_id = "7462", + short_code = "HTL TV-NET" + ) + + response = await sender.send_sms( + recipient_number = "254748877373 123", + message = "Test 123" + ) + print("SMS API RESPONSE:", response) + + + asyncio.run(main()) diff --git a/sms/models/__init__.py b/sms/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sms/models/sms_message.py b/sms/models/sms_message.py new file mode 100644 index 0000000..44c5a18 --- /dev/null +++ b/sms/models/sms_message.py @@ -0,0 +1,157 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Monday, 9th Dec., 2024. + + OBJECTIVE: + + To define how messages will be stored in the database. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# For making data behaviour_models: +from pydantic import BaseModel, Field, field_validator, PastDatetime, AwareDatetime +from typing import Optional, Literal, Union, Any + +# My utils: +from utils_v2.string import regex +from utils_v2.date_time import date_time + +# To work with MongoDB: +from bson.objectid import ObjectId + +# To work with date and time: +import datetime + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +class SentSMSMessageModel(BaseModel): + + ts: AwareDatetime = Field( + description = "the time (utc) at which this message was sent by the sender", + frozen = True, + default_factory = lambda: date_time.get_current_utc_date_time(as_string = False) + ) + + sender: dict = Field( + description = "the sender of this message", + frozen = True + ) + + recipient: dict = Field( + description = "the recipient of this message", + frozen = True + ) + + text: str = Field( + description = "the actual text that was sent", + frozen = True + ) + + length: int = Field( + description = "the no. of chars in this message", + frozen = True + ) + + isFlash: bool = Field( + description = "to know whether this message is a flash message or a regular message", + frozen = True + ) + + success: bool = Field( + description = "to know whether this message was sent successfully or not", + default = False + ) + + message: str | None = Field( + description = "a brief message about what happened; useful when something goes wrong", + default = None + ) + + metadata: dict | None = Field( + description = "any extra data about this message", + frozen = True + ) + + rawResponse: Any | None = Field( + description = "the raw response from the third-party client", + default = None + ) + + messageId: int | str | None = Field( + description = "how the client recognizes this message", + frozen = False, + default = None + ) + + # ┏┓ ┏• + # ┃ ┏┓┏┓╋┓┏┓ + # ┗┛┗┛┛┗┛┗┗┫ + # ┛ + + class Config: + extra = "allow" + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/string/__init__.py b/string/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/string/__pycache__/__init__.cpython-310.pyc b/string/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce213c863af984eb1ce12aaf53daa3bf46bfacd9 GIT binary patch literal 165 zcmd1j<>g`k0+q$t=^*+sh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6v5KO;XkRX-)Q zEHx*;Ahk$8pfWilu_!m7C_gJTxujS>u^=-(Gp{7IC@(QbzqBMXr#QaMNWZwGC^Iiz hKOQKRSrQ+wS5SG2!zMRBr8Fni4rD_y6OdqG005LaD0u(? literal 0 HcmV?d00001 diff --git a/string/__pycache__/json.cpython-310.pyc b/string/__pycache__/json.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ddf7d691549370c4dc395c9679340bc4ae835db6 GIT binary patch literal 3542 zcmeHJ&u`<#6(%W4qGau^^BZW2#k2^pAmEj{P7owU5Ja)%uD6M7NJ_SG5A0YovS?Er zVPWk+j^+2Dt|z!QpV`@x7V%z4yHlH*VA& zxZe5p{Pe@$I?g}wqj;6z;}dw)-=Ja6vBO;ECGN4y-81jH#7a+G*ID*`?3;Q2*f;O; zaT(s_q%x@vVTJ z{ldcUg=DPtRPD4{v)QaUdshv|LL{m=6qD9;uE!!>z9LlJq-wf!z~RI0XNT>*qOxwQ zU9W!+&^q1RZC-lKX6WW+vxXt~czt=$!%*0TN8N-*JJ;^QdE#EV3%Bot?&Y;{*d8AW z#ucIDLI1Ezl$LRNiaVynE-fCC3o2uJl5mp5=inK_;-PMuzjvlo(h0$3N9d3pG8pq0 zH8Epi`Ge$uUTWp+1pBceD;s*bkDBvxA}CYvSz8;*H|*++)$be`zz(18wZ>w?TZ~`u zL`=DC9nFVhDkn!$objPnEjo>(IMrOHG-+izPE>TU-LiXb8Q)Lm`Nl|!Nn{5Nyw+F0l@d(`lw{r2Z6iF=Sk-t+=Kq zcV{t!ARh?{nZUK4<4b`A)iH!-5p>2!G)tDhjcX98djbz6H)^03|O9(4Z*0Ng+5lfy4Nz23oI zr%yW2`-&V6?st0RsNHLS-Wfoz^XJ{p(O_-$&Ju$=%l#LVtGG|eizpH?GVx`jW1Zy~ zUsg}(J$1L9x;v0@)un~J{>V*PUU>_sSfO|M598q;fVd_` zWLQJ@*2jv(5K=h1_TSI4B&x89Hl>hb5cHVkMlmK1^jWOVG2Eyf9rFaUg8=&0)~9pL z)xjYVC&*_n0sUtfRbqt*gS;L?d@D`UAVCi;A4>cD|7%k!;%Ys z0q2p&<*SMYHr3u)39!742requW#&CuAzHELnuXJME;n@bECBAUFrSqlmt5x|oMZZq zYwoWcRt1a$`Y+_%BA?-UcSr|nJVyjp7%i~?gbARBWa*diQf zFyIuO@E2muo>6gfCS$GP{9r<-!0rAEtSn!Je7h`XdUW>#!w-U1LwMRt;YOxqcggXMc~ z-!As!_da%MoIDv7;4}91?oR)VAp8ND&QA|8cj2-A3`XivU}_U3zOU%rp_=lf|iAEhVqC+I+afS$~sq=WfEI+P!x!}(!) zDu0Te&Yz}d@@MGT{8{=|{w?};{%tx%N9g%4#QZxzU7#0%ItSFd^gW12sWKZ2E zHqYld!-swx&}}-ywC?wwVc1Rj0&iY+1HuH*Bo2E3Bq? zZ_lJwQkhhGDV6OQ@2pHJwq3Up@%Y}}p0an%Dpw4nYAI!-7O(Hy6+`!bN+#Q3&lJ_F z`x9S(lwMm;E_e2pjwhqhZvZ|*+7*>%NKu-jn+00fE5u65RB`fdz!WDHP8JX5rd!R& zk8uo}R&g;=h!^4$n`*3?jOAxyw_?Sqf+A1(0NqG|Gi=FcKKe(zu z#o}0VllO1^XF5+mo>=@qnZ!32Wsiih2V{W;)aAQZ#;!hoe{w=DO&zofn}uTHC%5lR zD~q2O3Wa#AC@Tjyr(0vq(~tSe5Ty_+9?VW(n*rI7Co2^}Wo`ikGli+e0zH_SzSb&O zlZ6RnfRq;kx zY@lHdK-;Xg#Y|vfI=~tp1M>nVsDc@`Ik`PUxvO&9mN==36sJ@O8P~ zYR1||Sl}R@1I%7;-Sx%A;1^8)`h2UIpYT>`1!lz8H37B&>v}{iJ6sSEWu-~K|#fq}U`Pe7EnrccSUMO4I8No7n7`t?+IWb=6dBT#z6+ zXp2>-yjRiu-hv)<#wfhXAX^YT42V@-J@{H)Ctkz}8bXt*VeCR9v#Uv2wOGkwx~17L z-~@S8VK91gniwY04SSmG8x4qM5YTW^hw;lF0=AAFw(jbf8g@yoRud#ytr~j-NK&rA zJj)R1f*J7DVic!3s*L*0O}@y`PA95qLKL0A#g@BP`{-i(vsB2Es^ii?$!c|b-`gkE zB73Y__4+qqGleo1!6yU+!YK=nH3r3w;0VRRmS_u(_*}HbhF}gjq7Go8!iezm&}W!! zh~Hoza>$kJ{W^2QmTkTaxgll7jqqu`6wDK#@NFtyF={MM*;7`<<%@6Z<2uwfOydbF z+g4nyYb8y`@UK?m5cI27>FHb?x&u_jy_j9!ccZs)6(FeB?>xbA;-JTb<~htDl-pIK ztX8c%Kmlf$qYGSFh#yrvgn4ZOgH;LolnUt29P}o z#V$O2I2Q$3aziF_qpSDQ>zUM2GMjRHme+I1wKcaF2MQpNdtku;-fpkIXYOD(1l?XA zIpz>_?Dl#Xv5vgim9W20@zppGX<$$s6wikTMJa5a2SJyAh=AbGKM-JGV_|EZkQ1ij z3kke~WDQ^n37#N40yvN*_18yj9^t>OnPB!jKf~SWKp{i>e`ECjveD-bSK0HVV7e;t zY=OI^w4pPiZG&s_UF{xdc#hCBZ&@p1=0>_KD^N5S9^R!KW)8&4Co+QN#&DJc{`7DB?&EkC4N7 zgufVxLV(H$4ZV;6fnjwLOx%w;^{QG1gsJ*|2l)J8!ed1{_V_^Ta{gU@8TDTkW!fhX zJfUE$@%?;FrL3!$*F_qPgPn2euvgX{t=jU^kwNk4>}e1(OvdNVjm!50p4II!^SB7u z?Mwcb!Wkl)@710LCrfk|hx5ntph8yLsK&hxrZ>%X4O83EAVB!GKr{=M29uFsO*z2L zK>!EF+fcaEJ!%EL{w}e!Qd)bc3 zdhV84(}YzmMphu*@I68sdAXJEVz0+ys#&hQJl^MGh(CfhlYs1(@K|`;M!-@Ohq91d+S!j5F;p4aIF3Qxw%h(0tpbb`dttNR2T95-NFHTfw37>)%m zvG>ANm%Ds}vSSkbe;>+Bgo=3?i|zopzt zZO9Cmb=TOf z(CzXlZ@iJr!!>x}!8odoC&+m4 zqVZ`m4yq{n?(4=|ojJmrC~!;^NP4j2SutJ`9S=PZLhV!o&T!pHE>92K{v8Ay;#lr& z=etMDlb`h5D8E`MJ+Tb^h>g0vw!!6pLOVr+mxeLl9S#qGol1WPTb%%*+gB>p0A8h% z9BwYabq;NS`QQZ%f;dJV>|@5sg)wqt0Y%vcTmZqJM71sWV@NIUHpjlV*$mlfo|;h> z$Szzlf_Z3O!yf=#S>*GULy(qTaeGT8YLrVQI1KDtt_107#qCk+b*59klI~z8buaZv zDfJ+^x>j0UcKbd4VP?%8^2qzS+(x#90$+C{naw_0&n&x9Pa&OrkP7M^X2HOaKkL;k zt*3LzrCcff@WF?vOwa=Vd~;8D8uzlf)pYRMjbu8|S>5<}zJtDgNUvm<0(CHU_mtPo zgXB^vxx5Spn|06lqEs%kx>S0UTD^Ba7rZW;OJ;IG`&4?FUk&iHJU`WNJb8HqI_AS2 z*TJvBDn=1EC4O7yN;=$Ax;@|^8&%tl)WPrD9gyM~30_jUeYb0Xhbp@R8GvAAppb+< wG9V6!ePQVYK5r214{#WQ_y7O^ literal 0 HcmV?d00001 diff --git a/string/fuzzy.py b/string/fuzzy.py new file mode 100644 index 0000000..50cc3b7 --- /dev/null +++ b/string/fuzzy.py @@ -0,0 +1,245 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Saturday, 18th May, 2024. + + OBJECTIVE: + + To provide a quick set of functions to work with fuzzy logic. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# To apply fuzzy logic: +from thefuzz import fuzz, process + +# To work with datatypes: +from typing import List + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def get_best_match( + target: str, + choices: list[str], + threshold: float = 0.70, + partial: bool = False +) -> str | None: + + """ + Given a list of options, this finds the best match to the target string as long as it fits within the similarity + threshold. + :param target: The string whose closest match needs to be found. + :param choices: The list of options to match the target against. + :param threshold: The absolute lowest similarity value to consider a match. Ranges from 0 to 1. + :param partial: If partial string matches are allowed. + :return: The string from the list of choices that is the closes match if it fits within the threshold, or None. + """ + + # The input needs to be a string: + if not isinstance(target, str): return None + + # Pick a scoring mechanism based on whether, or not, partial matches are allowed: + if partial: scorer = fuzz.partial_token_sort_ratio + else: scorer = fuzz.ratio + + # Find the best match: + result = process.extractOne( + target, + choices, + score_cutoff = threshold * 100, + scorer = scorer + ) + + # Done here: + return result[0] if result else None + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_match_score( + target: str, + choice: str, + partial: bool = False +) -> float: + + """ + Given a target and a choice to be considered, what is the similarity score of the choice to the target. + :param target: The string whose closest match needs to be found. + :param choice: The string that you want to test the target against. + :param partial: If partial string matches are allowed. + :return: The similarity score between the target and the choice (option) in the range from 0 to 1. + """ + + # The input needs to be a string: + if not isinstance(target, str): return 0.0 + + # Pick a scoring mechanism based on whether, or not, partial matches are allowed: + if partial: scorer = fuzz.partial_token_sort_ratio + else: scorer = fuzz.ratio + + # Find the best match with not threshold cut-off: + result = process.extractOne( + target, + choices = [choice], + score_cutoff = 0.0, + scorer = scorer + ) + + # Done here: + return result[1] / 100.0 if result else 0.0 + + +# --------------------------------------------------------------------------------------------------------------------- + + +def rank( + target: str, + choices: List[str], + partial: bool = False +) -> List[dict] | None: + + """ + To rank the similarity of all the options against the target. + :param target: The string against which all options need to be matched. + :param choices: The list of strings that need to be ranked for similarity with the target. + :param partial: If partial string matches are allowed. + :return: A list of all the choices with their similarity scores sorted from most to least similar. + """ + + # The input needs to be a string: + if not isinstance(target, str): return None + + # Pick a scoring mechanism based on whether, or not, partial matches are allowed: + if partial: scorer = fuzz.partial_token_sort_ratio + else: scorer = fuzz.ratio + + # Match the target against all the options: + result = process.extract( + target, + choices, + limit = len(choices), + scorer = scorer + ) + + # Done here: + result = [{"choice": r[0], "score": r[1] / 100.0} for r in result] + return result + + +# --------------------------------------------------------------------------------------------------------------------- + + +def match( + targets: List[str], + choices: List[str], + threshold: float = 0.7, + partial: bool = False, + allow_null: bool = False +) -> dict | None: + + """ + Find the best matches for each target from the list of choices such that each choice is used not more than once. + USE CASE: When you have a set of columns in a spreadsheet (choices) and you need to match them against a set of + expected values (targets). In such a case, if you absolutely need a match for every expected column + (target), you must set 'allow_null' to False. This could be useful in cases like bank statements. + :param targets: The list of string whose best matches must be found. + :param choices: The set of option strings that must be paired to the targets. + :param threshold: The absolute lowest similarity value to consider a match. Ranges from 0 to 1. + :param partial: If partial string matches are allowed. + :param allow_null: If set to False, each target must have a match and even one non-match will void the whole process + and return None. If set to True targets need not have matches. + :return: A dictionary of the best match for each target from the list of choices such that each choice is used just + once. + """ + + # Start with basic variables: + all_rankings = [] + all_matches = {target: None for target in targets} + + # Match every choice against every target: + for target in targets: + rankings_for_target = rank(target, choices, partial = partial) or [] + for r in rankings_for_target: r["target"] = target + all_rankings += rankings_for_target + + # Sort everything based entirely on the final scores of similarity + # from most to least similar (descending order): + all_rankings = sorted(all_rankings, key = lambda x: x["score"], reverse = True) + + # Now pick the target of the absolute best match, + # and keep eliminating the best match for each target: + while len(all_rankings) > 0: + top_ranking = all_rankings[0] + if top_ranking["score"] > threshold: + all_matches[top_ranking["target"]] = top_ranking["choice"] + elif not allow_null: + all_matches = None + break + all_rankings = [r for r in all_rankings if r["choice"] != top_ranking["choice"]] + + # Done here: + return all_matches + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/string/help.py b/string/help.py new file mode 100644 index 0000000..85dcc97 --- /dev/null +++ b/string/help.py @@ -0,0 +1,177 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Saturday, 24th Aug., 2024 + + OBJECTIVE: + + To provide an overview of any function or class in a string. + The generated overview can then either be shown on the terminal, or transmitted over some other medium for + collaborative work. + + REFERENCES: + + N/A + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# System-level activities: +import io +import inspect + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def get_help_for_class(cls, skip_methods = None): + + """ + Returns the help documentation to use this class. + :param cls: The class whose help string is desired. + :param skip_methods: A list of methods to NOT include in the help text. + :return: This help documentation. + """ + + separator = "\n\n" + ("=" * 120) + "\n\n" + if skip_methods is None: skip_methods = [] + elif not isinstance(skip_methods, list): skip_methods = [skip_methods] + + # Get class name and docstring: + class_name = cls.__name__ + docstring = inspect.getdoc(cls) or "" + help_string = "HELP FOR:\n\n" + help_string += class_name + "\n\n" + help_string += "This document has upto 120 chars per line.\n" + help_string += "Best viewed with monospaced font :)" + help_string += docstring + separator + + # Get all methods and their docstrings. + # Then note the documentation of the methods while ignoring the blacklisted ones: + members = inspect.getmembers(cls, predicate = inspect.isfunction) + func_help = [] + for name, method in members: + + # Ignore if asked, or extract the details: + if name in skip_methods or name.startswith(f"_{class_name}__"): continue + else: func_help.append(get_help_for_function(method)) + + # Put all the things together: + func_help = separator.join(func_help) + help_string += func_help + + # Done here: + return help_string + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_help_for_function(func): + + """ + Get the help string for one function. + It could be a standalone function, or a method of a class. + :param func: The function (or method) whose help string is needed. + :return: The help string of the function. + """ + + # Get the name and documentation: + func_name = func.__name__ + async_indicator = " (async)" if inspect.iscoroutinefunction(func) else "" + func_doc = inspect.getdoc(func) or "" + + # Create the decorated header: + func_decorator = "-" * (len(func_name) + 2) + func_head = "." + func_decorator + f".\n| {func_name} |{async_indicator}\n`" + func_decorator + "`\n\n" + + # Add the 'args' and 'kwargs': + func_args = [] + for name, param in inspect.signature(func).parameters.items(): + default = param.default + if isinstance(default, str): default = f"\"{default}\"" + if default == inspect.Parameter.empty: func_args.append(f"{name}") + else: func_args.append(f"{name}: {type(default).__name__} = {default}") + if len(func_args) > 0: func_args = f"{func_name} (\n\t" + "\n\t".join(func_args) + "\n):\n\n" + else: func_args = f"{func_name} ():\n\n" + + # Get the params and return value part from the doc: + params_start = func_doc.find(":param") + return_start = func_doc.find(":return") + func_params = "\n" + func_doc[params_start:return_start] if params_start >= 0 else "" + func_return = "\n" + func_doc[return_start:] if return_start >= 0 else "" + + # Isolate the documentation part: + if params_start >= 0: func_doc = func_doc[:params_start] + elif return_start >= 0: func_doc = func_doc[:return_start] + + # Done here: + return func_head + func_args + func_doc + func_params + func_return + + +# --------------------------------------------------------------------------------------------------------------------- + + +def get_help(entity, skip_methods = None): + + """ + Get the help documentation for anything from its docstring. + :param entity: The entity you want to get help for. + :param skip_methods: A list of methods to ignore if inspecting a class. Not valid for standalone functions. + :return: The help string. + """ + + if inspect.isclass(entity): return get_help_for_class(entity, skip_methods = skip_methods) + else: return get_help_for_function(entity) + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/string/json.py b/string/json.py new file mode 100644 index 0000000..67d39f7 --- /dev/null +++ b/string/json.py @@ -0,0 +1,202 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Create: Saturday, 18th May, 2022 + Update: Thursday, 22nd Aug. 2024 + + OBJECTIVE: + + To provide an easy way to work with '.json' data and files. + + REFERENCES: + + 1) https://www.w3schools.com/python/python_json.asp + + DOWNLOADS: + + N/A + +""" + + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# System-level activities: +import io + +# To work with the JSON standard: +import json + +# To work with files: +from utils_v2.system import files + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def from_string(json_data): + + """ + Decodes a JSON string to a pythonic variable like a dict. + :param json_data: The JSON string to decode. + :return: The decoded pythonic variable. + """ + + python_data = json.loads(json_data) + return python_data + + +# --------------------------------------------------------------------------------------------------------------------- + + +def to_string( + python_data, + indent = 4, + default = None, + separators = None, + no_space = False +): + + """ + Converts the given pythonic data to a JSON string. + :param python_data: The input data like a dict. + :param indent: The tab-width for pretty presentation. + :param default: The function to use on something that cannot be directly parsed into a JSON string. + :param separators: Custom separators to use. + :param no_space: If you want a dense JSON string that saves memory by not using spaces or tabs or line-breaks. Not + good for human readability, very good for saving memory. WARNING: THIS OVERRIDES EVERY OTHER PARAMETER EXCEPT + 'default'. + :return: The JSON string representation of the input pythonic data. + """ + + if no_space: + json_data = json.dumps( + python_data, + default = default, + separators = (',', ':') + ) + + else: + json_data = json.dumps( + python_data, + indent = indent, + default = default, + separators = separators + ) + + return json_data + + +# --------------------------------------------------------------------------------------------------------------------- + + +def from_file(file): + + """ + Reads a JSON file and returns it as a pythonic variable like a dict. + :param file: The path to the file on the disk or a file held in RAM as a BytesIO object. + :return: The decoded pythonic variable. + """ + + if isinstance(file, io.BytesIO): + file.seek(0) + json_data = file.getvalue() + else: json_data = files.read_file(file) + python_data = from_string(json_data) + return python_data + + +# --------------------------------------------------------------------------------------------------------------------- + + +def to_file( + file, + python_data, + indent = 4, + default = None, + separators = None, + no_space = False +): + + """ + + :param file: Either a path to a file on disk, or a buffer in RAM in the form of a BytesIO object. + :param python_data: The pythonic data to be converted to the JSON string. + :param indent: The tab-width for pretty presentation. + :param default: The function to use on something that cannot be directly parsed into a JSON string. + :param separators: Custom separators to use. + :param no_space: If you want a dense JSON string that saves memory by not using spaces or tabs or line-breaks. Not + good for human readability, very good for saving memory. WARNING: THIS OVERRIDES EVERY OTHER PARAMETER EXCEPT + 'default'. + :return: True/False if a path was given, else the same BytesIO object with the written JSON data. + """ + + json_data = to_string( + python_data, + indent = indent, + default = default, + separators = separators, + no_space = no_space + ) + + if isinstance(file, io.BytesIO): + file.write(json_data.encode("utf-8")) + file.seek(0) + return file + + else: + try: + files.write_file(file, json_data, mode = "w") + return True + except: return False + + +# ***************************************************************************************************************** +# ***** **** +# *** MAIN PROGRAM *** +# ***** **** +# ***************************************************************************************************************** + + +if __name__ == "__main__": + + pass diff --git a/string/regex.py b/string/regex.py new file mode 100644 index 0000000..988ea56 --- /dev/null +++ b/string/regex.py @@ -0,0 +1,290 @@ +""" + + AUTHOR: + + Khushal P Soonderji + + DATE: + + Sunday, 28th Apr., 2024 + + OBJECTIVE: + + To provide a convenient way to perform RegEx operations like finding patterns and substituting them. + + REFERENCES: + + 1) https://www.w3schools.com/python/python_regex.asp + + DOWNLOADS: + + N/A + +""" + +# ***************************************************************************************************************** +# ***** **** +# *** IMPORT *** +# ***** **** +# ***************************************************************************************************************** + + +# To make sibling directories accessible for imports: +import sys +sys.path.append(".") +sys.path.append("..") + +# To work with RegEx: +import re + + +# ***************************************************************************************************************** +# ***** **** +# *** MACROS / ONE-TIME INIT *** +# ***** **** +# ***************************************************************************************************************** + + +# Common RegEx patterns: +REGEX_EMAIL_ID = r"[\d\w\-_.+]*@[\d\w\-_]*.[\d\w]{2,}" +REGEX_URL = r"^http[s]?:\/\/([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(?:\/[a-zA-Z0-9-_.~%]*)*(?:\?[a-zA-Z0-9-_&=%.]*)?$" +REGEX_HTTPS_URL = r"^https:\/\/([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(?:\/[a-zA-Z0-9-_.~%]*)*(?:\?[a-zA-Z0-9-_&=%.]*)?$" +REGEX_PASSWORD = r"^(?=.*[a-z])(?=.*[A-Z])(?=.*[\d])(?=.*[!@#$%^&*()_+{}\[\]:;<>,.?~\\\/-]).{8,}$" +REGEX_NAME = r"^[\d\w .\-]{1,30}$" +REGEX_USERNAME = r"^[\d\w_]{8,25}$" +REGEX_CONTACT_NUMBER = r"\+?\d{0,3}\s*\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}" +REGEX_DATE = r"\b(?:\d{4}-\d{2}-\d{2}|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+\d{1,2},?\s+\d{4}|\d{1,2}\/\d{1,2}\/\d{4}|\d{1,2}-\d{1,2}-\d{2}|\d{1,2}(?:st|nd|rd|th)\s+(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?),?\s+\d{4})\b" +REGEX_GSTIN = r"[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}" +REGEX_PAN = r"[A-Z]{5}[0-9]{4}[A-Z]{1}" +REGEX_IPV4 = (r"[0-9]{1,3}\." * 3) + r"[0-9]{1,3}" +REGEX_IPV6 = (r"[0-9a-fA-F]{1,4}:" * 7) + r"[0-9a-fA-F]{1,4}" +REGEX_IFSC = r"[A-Z]{4}0[A-Z0-9]{6}" +REGEX_UPI = r"[a-zA-Z0-9\.\-]{2,256}@[a-zA-Z][a-zA-Z]{2,64}" +REGEX_MAC_ADDRESS = r"([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})|([0-9a-fA-F]{4}\\.[0-9a-fA-F]{4}\\.[0-9a-fA-F]{4})" +REGEX_METRIC_WEIGHT = r"[\d\.]+[ ]?[k]?g" + + +# RegEx chars (append them to the patterns if needed): +REGEX_START = "^" +REGEX_END = "$" + + +# ***************************************************************************************************************** +# ***** **** +# *** VARIABLES *** +# ***** **** +# ***************************************************************************************************************** + + +# --- Nothing Yet + + +# ***************************************************************************************************************** +# ***** **** +# *** FUNCTIONS *** +# ***** **** +# ***************************************************************************************************************** + + +def find(text, pattern, case_sensitive = True, dot_all = False): + + """ + Returns a list of substrings that match the given RegEx pattern in the input text. + :param text: The text in which the pattern needs to be found. + :param pattern: The RegEx pattern to look for. + :param case_sensitive: Whether, or not, you want the operation to be case-sensitive. + :param dot_all: Allow all characters to be matched in ".". + :return: An array (list) of substring that match the pattern. Can be an empty list as well. + """ + + # Prepare the flags: + flags = 0 + if not case_sensitive: flags |= re.IGNORECASE + if dot_all: flags |= re.DOTALL + + # Perform the RegEx operation, and clean the results: + matches = [match if type(match) is str else match[1] for match in re.findall(pattern, text, flags = flags)] + matches = [match for match in matches if len(match) > 0] + + # Return the results: + return matches + + +# --------------------------------------------------------------------------------------------------------------------- + + +def find_first(text, pattern, case_sensitive = True, dot_all = False): + + """ + Returns the first substring that matches the given RegEx pattern in the input text. + :param text: The text in which the pattern needs to be found. + :param pattern: The RegEx pattern to look for. + :param case_sensitive: Whether, or not, you want the operation to be case-sensitive. + :param dot_all: Allow all characters to be matched in ".". + :return: The first match as a string, or None if no match was found.. + """ + + matches = find( + text = text, + pattern = pattern, + case_sensitive = case_sensitive, + dot_all = dot_all + ) + + if not matches: return None + else: return matches[0] + + +# --------------------------------------------------------------------------------------------------------------------- + + +def replace(text, pattern, substitute_text, case_sensitive = True, dot_all = False): + + """ + Replaces any substring in the text that matches the RegEx pattern. + :param text: The text in which the substitutions need to be made. + :param pattern: The RegEx pattern that needs to be substituted. + :param substitute_text: The text that will replace the matches that were found. + :param case_sensitive: Whether, or not, you want the operation to be case-sensitive. + :param dot_all: Allow all characters to be matched in ".". + :return: The text with the substitutions. If no matches are found, the original string is returned. + """ + + # Prepare the flags: + flags = 0 + if not case_sensitive: flags |= re.IGNORECASE + if dot_all: flags |= re.DOTALL + + # Perform the RegEx operation, and return the results: + return re.sub(pattern, substitute_text, text, flags = flags) + + +# --------------------------------------------------------------------------------------------------------------------- + + +def search(text, pattern, case_sensitive = True, dot_all = False): + + """ + Checks if the given RegEx pattern occurs ANYWHERE in the text that was provided. + :param text: The text that needs to be matched against the pattern. + :param pattern: The RegEx pattern to look for. + :param case_sensitive: Whether, or not, you want the operation to be case-sensitive. + :param dot_all: Allow all characters to be matched in ".". + :return: True if the pattern matches, else False. + """ + + # Prepare the flags: + flags = 0 + if not case_sensitive: flags |= re.IGNORECASE + if dot_all: flags |= re.DOTALL + + # Perform the RegEx operation, and return the results: + if re.search(pattern, text, flags = flags): return True + else: return False + + +# --------------------------------------------------------------------------------------------------------------------- + + +def match(text, pattern, case_sensitive = True, dot_all = False): + + """ + Checks if the given text matches the RegEx pattern that was provided. The check is made only at the start of the + input string. + :param text: The text that needs to be matched against the pattern. + :param pattern: The RegEx pattern to look for. + :param case_sensitive: Whether, or not, you want the operation to be case-sensitive. + :param dot_all: Allow all characters to be matched in ".". + :return: True if the pattern matches, else False. + """ + + # Prepare the flags: + flags = 0 + if not case_sensitive: flags |= re.IGNORECASE + if dot_all: flags |= re.DOTALL + + # Perform the RegEx operation, and return the results: + if re.match(pattern, text, flags = flags): return True + else: return False + + +# --------------------------------------------------------------------------------------------------------------------- + + +def split(text, pattern, case_sensitive = True, dot_all = False): + + """ + Splits an input string based on the pattern that is being matched. + :param text: The text that needs to be matched against the pattern. + :param pattern: The RegEx pattern to look for. + :param case_sensitive: Whether, or not, you want the operation to be case-sensitive. + :param dot_all: Allow all characters to be matched in ".". + :return: True if the pattern matches, else False. + """ + + # Prepare the flags: + flags = 0 + if not case_sensitive: flags |= re.IGNORECASE + if dot_all: flags |= re.DOTALL + + # Perform the RegEx operation, and return the results: + substrings = re.split(pattern, text, flags = flags) + if len(substrings) > 0 and substrings[0] == "": substrings.pop(0) + return substrings + + +# --------------------------------------------------------------------------------------------------------------------- + + +def to_json(text, pattern, case_sensitive = True, dot_all = False): + + """ + Gives out a dict from the extracted features in a string. It is based on the concept of Named Groups. + Consider the following example (assuming the search is case-insensitive): + TEXT: "UPI/309258561479/14:17:35/UPI/omsainurses@okhdfc" + PATTERN: "upi/.*/(?P