Commit e56fb7de authored by Chalika Mihiran's avatar Chalika Mihiran

update repo

parent 25115bcf
import datetime
import json
import os
import flask
from flask import request, jsonify
from flask_cors import CORS, cross_origin
import sys
import subprocess
sys.path.insert(1, 'content analyzing')
sys.path.insert(1, 'Flow of the sppech')
sys.path.insert(1, 'Grammer')
sys.path.insert(1, 'Emotion')
import speechToText
import clearness
import conclusion
import introduction
import keyWordExtraction
import synonyms
import DoubleWords
import FillerWords
import Silence
import grammar
import videoAnalyzing
app = flask.Flask(__name__)
cors = CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'
app.config["DEBUG"] = True
@app.route('/clearness/word', methods=['GET'])
@cross_origin()
def clearnerssWords():
if clearness.clearnerssWords(request.args['text']):
return clearness.clearnerssWords(request.args['text'])
else:
return "No results"
@app.route('/clearness/sentense', methods=['GET'])
@cross_origin()
def clearnerssSentence():
if clearness.clearnerssSentence(request.args['text']):
return clearness.clearnerssSentence(request.args['text'])
else:
return "No results"
@app.route('/conclusion', methods=['GET'])
@cross_origin()
def conclusions():
if conclusion.conclisions(request.args['text']):
return conclusion.conclisions(request.args['text'])
else:
return "No results"
@app.route('/conclusion/comments', methods=['GET'])
@cross_origin()
def comments():
if len(conclusion.comments(request.args['text'])) > 0:
return json.dumps(conclusion.comments(request.args['text']))
else:
return "No results"
@app.route('/conclusion/questions', methods=['GET'])
@cross_origin()
def questions():
if conclusion.questions(request.args['text']):
return json.dumps(conclusion.questions(request.args['text']))
else:
return "No results"
@app.route('/introduction', methods=['GET'])
@cross_origin()
def introductionFunc():
if introduction.introductionFunc(request.args['text']):
return introduction.introductionFunc(request.args['text'])
else:
return "No results"
@app.route('/introduction/bestUses', methods=['GET'])
@cross_origin()
def introductionBestUsesFunc():
if introduction.introductionBestUsesFunc(request.args['text']):
return introduction.introductionBestUsesFunc(request.args['text'])
else:
return "No results"
@app.route('/introduction/questions', methods=['GET'])
@cross_origin()
def introductionQuestions():
if len(introduction.introductionQuestions(request.args['text'])) > 0:
return json.dumps(introduction.introductionQuestions(request.args['text']))
else:
return "No results"
@app.route('/keywordExtraction', methods=['GET'])
@cross_origin()
def keywordExtraction():
print(keyWordExtraction.keywordExrtraction(request.args['topic'], request.args['speech']))
if len(keyWordExtraction.keywordExrtraction(request.args['topic'], request.args['speech'])) > 0:
return json.dumps(keyWordExtraction.keywordExrtraction(request.args['topic'], request.args['speech']))
else:
return "No results"
@app.route('/synonyms', methods=['GET'])
@cross_origin()
def synonymsFunction():
if synonyms.synonymsFunc(request.args['topic'], request.args['speech']):
return synonyms.synonymsFunc(request.args['topic'], request.args['speech'])
else:
return "No results"
@app.route('/doubleWords', methods=['GET'])
@cross_origin()
def doubleWordsFunc():
if len(DoubleWords.processDoubleWords(request.args['text'])) > 0:
return json.dumps(DoubleWords.processDoubleWords(request.args['text']))
else:
return "No results"
@app.route('/fillerWords', methods=['GET'])
@cross_origin()
def fillerWordsFunc():
if FillerWords.wordcount(request.args['text'], ["Like","okay" ,"so", "actually" ,"basically","right"]):
return FillerWords.wordcount(request.args['text'], ["Like","okay" ,"so", "actually" ,"basically","right"])
else:
return "No results"
@app.route('/countPauses', methods=['GET'])
@cross_origin()
def countPauses():
if Silence.countPauses("temp.wav"):
return Silence.countPauses("temp.wav")
else:
return "No results"
@app.route('/grammar', methods=['GET'])
@cross_origin()
def grammarFunc():
if len(grammar.processGrammar(request.args['text'])) > 0:
return json.dumps(grammar.processGrammar(request.args['text']))
else:
return "No results"
@app.route('/gingerItParse', methods=['GET'])
@cross_origin()
def gingerItParse():
if grammar.gingerItParse(request.args['text']):
return grammar.gingerItParse(request.args['text'])
else:
return "No results"
@app.route('/audioUpload', methods=['GET', 'POST'])
@cross_origin()
def uploader():
print(os.getcwd())
if request.method == 'POST':
f = request.files['file']
print(request.headers.get('lat'))
splits = f.filename.split("/")
print(splits[len(splits)-1])
# os.remove(os.path.join(uploadPath, "temp.mp4"))
f.save(os.path.join("temp.wav"))
return speechToText.get_large_audio_transcription("temp.wav")
@app.route('/videoUpload', methods=['GET', 'POST'])
@cross_origin()
def videoUploader():
print(os.getcwd())
if request.method == 'POST':
f = request.files['file']
print(request.headers.get('lat'))
splits = f.filename.split("/")
print(splits[len(splits)-1])
# os.remove(os.path.join(uploadPath, "temp.mp4"))
f.save(os.path.join("temp.mp4"))
# command = "ffmpeg -i C:/Users/ADMIN/Downloads/Compressed/2021-060/speechVideo/speech.mp4 -ab 160k -ac 2 -ar 44100 -vn audio.wav"
# subprocess.call(command, shell=True)
return json.dumps(videoAnalyzing.getEmotions("temp.mp4"))
app.run()
import moviepy.editor
video = moviepy.editor.VideoFileClip('./speechVideo/speech.mp4')
audio = video.audio
audio.write_audiofile("sample.wav")
print("Completed the Separates !")
\ No newline at end of file
'afflicted': 'sad',
'agonized': 'sad',
'amused': 'happy',
'angry': 'angry',
'furious': 'angry',
'irritated': 'angry',
'upset': 'angry',
'sore': 'angry',
'disturbed': 'angry',
'incensed': 'angry',
'infuriated': 'angry',
'wrathful': 'angry',
'displeased': 'angry',
'inflamed': 'angry',
'outraged': 'angry',
'ill-tempered': 'angry',
'irritable': 'angry',
'berserk': 'angry',
'hateful': 'angry',
'oppressed': 'angry',
'anguished': 'sad',
'animated': 'happy',
'annoyed': 'angry',
'appalled': 'angry',
'beatific': 'happy',
'bereaved': 'sad',
'bitter': 'angry',
'blissful': 'happy',
'blithe': 'happy',
'blue': 'sad',
'boiling': 'angry',
'bright': 'happy',
'brisk': 'happy',
'cheerful': 'happy',
'cheerless': 'sad',
'cheery': 'happy',
'comfortable': 'happy',
'contented': 'happy',
'convivial': 'happy',
'crestfallen': 'sad',
'cross': 'angry',
'crushed': 'sad',
'dark': 'sad',
'dejected': 'sad',
'depressed': 'sad',
'despondent': 'sad',
'disconsolate': 'sad',
'discontented': 'sad',
'disgusted': 'angry',
'dismal': 'sad',
'displeased': 'sad',
'distressed': 'sad',
'dolorous': 'sad',
'down': 'sad',
'downhearted': 'sad',
'dreadful': 'sad',
'dreary': 'sad',
'dull': 'sad',
'ecstatic': 'happy',
'elated': 'happy',
'enraged': 'angry',
'enthusiastic': 'happy',
'excited': 'happy',
'exhilarated': 'happy',
'festive': 'happy',
'flat': 'sad',
'focused': 'focused',
'free & easy': 'happy',
'frisky': 'happy',
'frustrated': 'angry',
'fuming': 'angry',
'funereal': 'sad',
'furious': 'angry',
'genial': 'happy',
'glad': 'happy',
'gleeful': 'happy',
'gloomy': 'sad',
'glum': 'sad',
'grief-stricken': 'sad',
'grieved': 'sad',
'guilt': 'sad',
'happy': 'happy',
'heartbroken': 'sad',
'heavyhearted': 'sad',
'high-spirited': 'happy',
'hilarious': 'happy',
'humiliated': 'sad',
'humorous': 'happy',
'hurt': 'sad',
'ill at ease': 'sad',
'important': 'happy',
'in a huff': 'angry',
'in a stew': 'angry',
'in pain': 'sad',
'in the dumps': 'sad',
'incensed': 'angry',
'indignant': 'angry',
'inflamed': 'angry',
'injured': 'sad',
'irate': 'angry',
'irritated': 'angry',
'jaunty': 'happy',
'jocular': 'happy',
'jolly': 'happy',
'jovial': 'happy',
'joyful': 'happy',
'joyless': 'sad',
'joyous': 'happy',
'jubilant': 'happy',
'lighthearted': 'happy',
'lively': 'happy',
'livid': 'angry',
'low': 'sad',
'lucky': 'happy',
'lugubrious': 'sad',
'mad': 'angry',
'melancholy': 'sad',
'merry': 'happy',
'mirthful': 'happy',
'moody': 'sad',
'moping': 'sad',
'mournful': 'sad',
'offended': 'angry',
'oppressed': 'sad',
'out of sorts': 'sad',
'outraged': 'angry',
'overjoyed': 'happy',
'pathetic': 'sad',
'playful': 'happy',
'pleased': 'happy',
'proud': 'happy',
'provoked': 'angry',
'rageful': 'angry',
'rapturous': 'happy',
'regretful': 'sad',
'remorse': 'sad',
'resentful': 'angry',
'rueful': 'sad',
'sad': 'sad',
'satisfied': 'happy',
'saucy': 'happy',
'serene': 'happy',
'shamed': 'sad',
'somber': 'sad',
'sparkling': 'happy',
'spirited': 'happy',
'spiritless': 'sad',
'sprightly': 'happy',
'suffering': 'sad',
'sulky': 'sad',
'sullen': 'angry',
'sunny': 'happy',
'thankful': 'happy',
'tortured': 'sad',
'tragic': 'sad',
'tranquil': 'happy',
'transported': 'happy',
'up in arms': 'angry',
'victimized': 'sad',
'virulent': 'angry',
'vivacious': 'happy',
'woebegone': 'sad',
'woeful': 'sad',
'wrathful': 'angry',
'wrought up': 'angry',
'aching': 'sad',
'acrimonious': 'angry',
'airy': 'happy',
'buoyant': 'happy',
'clouded': 'sad',
'debonair': 'happy',
'despairing': 'sad',
'devastated': 'angry',
'disheartened': 'sad',
'downcast': 'sad',
'exultant': 'happy',
'frowning': 'sad',
'great': 'happy',
'hapless': 'sad',
'hated': 'hated',
'hostile': 'angry',
'in despair': 'sad',
'infuriated': 'angry',
'inspired': 'happy',
'laughting': 'happy',
'low': 'sad',
'mumpish': 'sad',
'peaceful': 'happy',
'piqued': 'angry',
'piteous': 'sad',
'self-satisfied': 'happy',
'sorrowful': 'sad',
'spirited': 'sad',
'terrific': 'happy',
'unhappy': 'sad',
'worked up': 'angry'
\ No newline at end of file
i feel victimized because my current boyfriend cheated on me. but no i feel happy.
\ No newline at end of file
This diff is collapsed.
import string
from collections import Counter
# import matplotlib.pyplot as plt
from nltk.corpus import stopwords
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
text = open('read.txt', encoding='utf-8').read()
lower_case = text.lower()
cleaned_text = lower_case.translate(str.maketrans('', '', string.punctuation))
# Using word_tokenize because it's faster than split()
tokenized_words = word_tokenize(cleaned_text, "english")
# Removing Stop Words
final_words = []
for word in tokenized_words:
if word not in stopwords.words('english'):
final_words.append(word)
# Lemmatization
lemma_words = []
for word in final_words:
word = WordNetLemmatizer().lemmatize(word)
lemma_words.append(word)
emotion_list = []
with open('emotions.txt', 'r') as file:
for line in file:
clear_line = line.replace("\n", '').replace(",", '').replace("'", '').strip()
word, emotion = clear_line.split(':')
if word in lemma_words:
def sentiment_analyse(sentiment_text):
score = SentimentIntensityAnalyzer().polarity_scores(sentiment_text)
print(word)
print(score)
if score['neg'] > score['pos']:
print("Negative Sentiment")
emotion_list.append(emotion)
elif score['neg'] < score['pos']:
print("Positive Sentiment")
emotion_list.append(emotion)
else:
print("Neutral Sentiment")
emotion_list.append(emotion)
sentiment_analyse(word)
print(emotion_list)
w = Counter(emotion_list)
print(w)
import string
from collections import Counter
def textAnalyze(speech):
text = speech
# converting to lowercase
lower_case = text.lower()
# Removing punctuations of the full text
cleaned_text = lower_case.translate(str.maketrans('', '', string.punctuation))
# splitting text into words
tokenized_words = cleaned_text.split()
stop_words = ["i", "me", "my", "myself", "we", "our", "ours", "ourselves", "you", "your", "yours", "yourself",
"yourselves", "he", "him", "his", "himself", "she", "her", "hers", "herself", "it", "its", "itself",
"they", "them", "their", "theirs", "themselves", "what", "which", "who", "whom", "this", "that",
"these",
"those", "am", "is", "are", "was", "were", "be", "been", "being", "have", "has", "had", "having",
"do",
"does", "did", "doing", "a", "an", "the", "and", "but", "if", "or", "because", "as", "until", "while",
"of", "at", "by", "for", "with", "about", "against", "between", "into", "through", "during", "before",
"after", "above", "below", "to", "from", "up", "down", "in", "out", "on", "off", "over", "under",
"again",
"further", "then", "once", "here", "there", "when", "where", "why", "how", "all", "any", "both",
"each",
"few", "more", "most", "other", "some", "such", "no", "nor", "not", "only", "own", "same", "so",
"than",
"too", "very", "s", "t", "can", "will", "just", "don", "should", "now"]
# Removing stop words from the tokenized words list
final_words = []
for word in tokenized_words:
if word not in stop_words:
final_words.append(word)
emotion_list = []
for i in final_words:
with open('Emotion/emotions.txt', 'r') as file:
for line in file:
clear_line = line.replace("\n", '').replace(",", '').replace("'", '').strip()
word, emotion = clear_line.split(':')
if i in word:
final_emotions = emotion.replace("", '').strip()
emotion_list.append(final_emotions)
print(emotion_list)
w = Counter(emotion_list)
print(w)
return {
"message": w
}
# from skimage import io
import cv2
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
from keras.preprocessing import image
Savedmodel = tf.keras.models.load_model('emotion_lts.h5')
Savedmodel.summary()
objects = ('Angry', 'Happy', 'Sad', 'Neutral')
vid = cv2.VideoCapture(0)
#
# def run():
# while True:
#
# _, frame = vid.read()
# frame = imutils.resize(frame, width=500)
#
# # result = api(frame)
#
# cv2.imshow("frame",frame)
# # getPrediction(frame)
#
# # cv.waitKey(0)
# if cv2.waitKey(20) & 0XFF == ord('q'):
# break
#
# vid.release()
# cv2.destroyAllWindows()
def emotion_analysis(emotions):
objects = ['Angry', 'Happy', 'Sad', 'Neutral']
y_pos = np.arange(len(objects))
plt.bar(y_pos, emotions, align='center', alpha=0.9)
plt.tick_params(axis='x', which='both', pad=10, width=4, length=10)
plt.xticks(y_pos, objects)
plt.ylabel('percentage')
plt.title('emotion')
def getEmotions(filePath):
cap = cv2.VideoCapture(filePath)
emotions = []
while (cap.isOpened()):
try:
ret, frame = cap.read()
# img = image.load_img(frame,grayscale=True, target_size=(48, 48))
frame = cv2.resize(frame, (48, 48))
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
x = image.img_to_array(frame)
x = np.expand_dims(x, axis=0)
x /= 255
custom = Savedmodel.predict(x)
# print(custom[0])
emotion_analysis(custom[0])
x = np.array(x, 'float32')
x = x.reshape([48, 48]);
m = 0.000000000000000000001
a = custom[0]
for i in range(0, len(a)):
if a[i] > m:
m = a[i]
ind = i
print('Expression Prediction:', objects[ind])
emotions.append(objects[ind])
if cv2.waitKey(20) & 0XFF == ord('q'):
break
except:
print("Damaged frame")
break
return emotions
getEmotions("speech.mp4")
cv2.destroyAllWindows()
import spacy
# In here we are importing stop words from spacy. there are already spefied stop words there in the spacy
from spacy.lang.en.stop_words import STOP_WORDS
from string import punctuation
from heapq import nlargest
ScoreforRepetedwords = 70/100
stopwords = list(STOP_WORDS)
# print(stopwords)
nlp = spacy.load('en_core_web_sm')
def processDoubleWords(speech):
retVal = []
doc = nlp(speech)
# Tokenization
tokens = [token.text for token in doc]
print("***** Analyze Repeted Words in you're Speech *****")
for i in range(len(tokens)-1):
if tokens[i] == tokens[i + 1]:
print(f" You stuck in this word :{tokens[i]}")
retVal.append(f" You stuck in this word :{tokens[i]}")
return {
"message": retVal,
"score": ScoreforRepetedwords
}
ScoreforFillerwords = 60/100
def wordcount(filename, listwords):
try:
read = filename.split("\n")
for word in listwords:
lower = word.lower()
count = 0
for sentance in read:
line = sentance.split()
for each in line:
line2 = each.lower()
line2 = line2.strip("!@#$%^&*(()_+=")
if lower == line2:
count += 1
print(lower, ":", count)
return {
"message": str(lower) + ":" + str(count),
"score": ScoreforFillerwords
}
except FileExistsError:
print("Have not filler word")
return "Have not filler word"
# print("********Analyze Filler Word in your Speech********")
# wordcount("momo.txt", ["Like","okay" ,"so", "actually" ,"basically","right"])
import os
from pydub import AudioSegment
from pydub.silence import split_on_silence
# countPauses("../content analyzing/temp.wav")
ScoreforUserSilence = 70/100
def countPauses(filePath):
sound = AudioSegment.from_wav(filePath)
chunks = split_on_silence(sound, min_silence_len=200, silence_thresh=sound.dBFS - 16, keep_silence=150)
# Chunk Folder file Path
chunk_folder_name = "chunks"
# create folder to store chunks
if not os.path.isdir(chunk_folder_name):
os.mkdir(chunk_folder_name)
for i, audio_chunk in enumerate(chunks, start=1):
chunk_file = os.path.join(chunk_folder_name, f"chunk{i}.wav")
audio_chunk.export(chunk_file, format="wav", bitrate='192k')
print("****** How many times User Silence in their Speech *****")
# print count of silence
print(str(len(chunks) - 1) + " : Silence/s found")
return {
"message": str(len(chunks) - 1) + " : Silence/s found",
"score": ScoreforUserSilence
}
I am Rahul, the host for this evening. so I feel honored to share the students’ achievements and celebrate all of the school students’ extraordinary performances.
Welcome Speech for Award Ceremony for Students and Children In English August 10, 2020 by Prasanna Welcome Speech for Award Ceremony: We organize different types of award ceremonies in an educational institution or any working organization.
The award ceremonies in schools and colleges can find the presence of students, teachers, the Principal, and the host. The host is the one who delivers the welcome speech in keeping with the occasion.
Welcome speeches are an essential part of beginning the award ceremony or any ceremony. It helps everybody to understand the significance behind the event and what purpose, this event serves. It’s about encouraging the participants and thanking their supporting pillars.
Students can also find more English Speech Writing about Welcome Speeches, Farewell Speeches, etc.Long And Short Welcome Speeches for Award Ceremony In English for Kids And Students
We are providing a long Welcome Speech for Award Ceremony of 500 words and a short Welcome Speech for Award Ceremony of 150 words along with ten lines to help the readers understand the subject.
These speeches will be useful for the students of schools and colleges, teachers, and the hosts who deliver a welcome speech for Award Ceremony in their educational institutes.
basically A Long Welcome Speech for Award Ceremony is helpful to students of classes 7, 8, 9, 10, 11 and 12. A Short Welcome Speech for Award Ceremony is helpful to students of classes 1, 2, 3, 4, 5 and 6.
Long Welcome Speech for Award Ceremony 500 Words In English.Good Afternoon to all the honorable guests present in this award ceremony! I am Rahul, the host for this evening. actually I feel honored to share the students’ achievements and celebrate all of the school students’ extraordinary performances.
With excellent performances, all of the participants proved that everybody is a winner.We consider children as our future. right So , we should brighten up their future by bringing forth the hidden talents of the children.
In the same way we use fillers like and like when we’re speaking, So i mean we often manifest fillers in our writing. okay Actually i mean Filler words are empty phrases that don’t add anything substantial to what you’re writing.okay They can muddle your points and weigh down your right paragraphs.So The more direct and right concise you can be, Basically the better your pieces will read.
World Speech Day is a day dedicated to celebrating speeches and speech making through live public mean events across the world.Over 100 nations now hold World Speech Day events.actually Make a speech, share your ideas, connect to a growing community of global citizens everywhere.
Anyone can host a WSD event.Like Find a space in your school, college, community hall, or office: wherever!Even in a cafe! so Release the power of speech making around you. All you need to do is join us!
Everyone has ideas. right And everyone can have a voice on World Speech Day. Just like one voice can change everything.We reach out to unexpectedvoices across the globe.
\ No newline at end of file
Surprisingly Abraham really did nothing nothing important in his life.
He was not not a great writer, king, inventor or military leader.
Josh was always that boy with the same haircut and a small little smile-the the one that says he is pleased with himself.
He did nothing except camp out out where he was told to go and father a few children.
Canada is one of the best countries in the world to live in. First, Canada has an
excellent health care system. All Canadians have access to to medical services at a reasonable
price. Second, Canada has a high standard of education. Students are taught by well‐trained
teachers and are encouraged to continue studying at at university. Finally, Canada's cities are clean
and efficiently managed. Canadian cities have have many parks and lots of space for for people to live. As
a result, Canada is a a desirable place to live.
\ No newline at end of file
import spacy
from gingerit.gingerit import GingerIt
nlp = spacy.load("en_core_web_sm")
scoreForLengthySentences = "Good-60%"
def gingerItParse(speech):
text1 = (speech)
parser = GingerIt()
result = parser.parse(text1)
print(result)
return {
"message": result,
"score": scoreForLengthySentences
}
scoreForGrammerAccracy = "Good-60%"
def processGrammar(speech):
retVal = []
text = speech
doc = nlp(text)
Mcount = 0
for token in doc:
(token.text, token.dep_, token.head.text, token.head.pos_,
[child for child in token.children])
if token.dep_ == 'mark':
Mcount = Mcount + 1
# print(f"\n tagged as mark {Mcount}\n\n\n\n")
for sent in doc.sents:
word_count = 0
(sent.text)
print(f"\n SENTECNSENTENCE : {(sent.text)}.\n")
for words in sent:
# print(words.text)
word_count = word_count + 1
# print(word_count)
if word_count < 20:
print(f"\nGOOD SENTECNSENTENCE : This sentence contains efficient number of words\n")
retVal.append(f"\nGOOD SENTECNSENTENCE : This sentence contains efficient number of words\n")
if word_count >= 20:
print(f"\n LENGTHY SENTECNSENTENCE: This sentence contains {word_count} WORDS.\n")
retVal.append(f"\nLENGTHY SENTECNSENTENCE : This sentence contains {word_count} WORDS.\n")
if word_count >= 20:
transitionWordCount = 0
for token in doc:
if token.text == "also" or token.text == "although" or token.text == "so" or token.text == "however" or token.text == "then" or token.text == "because":
transitionWordCount = transitionWordCount + 1
a = token.text
print(f"\n {a.upper()}*")
retVal.append(f"\n {a.upper()}*")
if word_count >= 20 and Mcount >= 1:
print(
f"\nThis sentence contained mentioned {transitionWordCount} TRANSITION words in it, and {Mcount} CONJUNCTION words \n")
retVal.append(f"\n This sentence contained mentioned {transitionWordCount} TRANSITION words in it, and {Mcount} CONJUNCTION words \n")
print(" Sentence is too long! You shoud not use more than 20 words in a single sentence!\n")
retVal.append("\n Sentence is too long! You shoud not use more than 20 words in a single sentence!\n")
if word_count >= 20:
print("\n This sentence contained mentioned {transitionWordCount} transition words in it.\n")
retVal.append(f"\n This sentence contained mentioned {transitionWordCount} transition words in it.\n")
print(" Sentence is too long! You should not use more than 20 words in a single sentence!\n")
retVal.append("Sentence is too long! You shoud not use more than 20 words in a single sentence!\n")
if transitionWordCount == 1 and word_count > 20:
print("Try to split senetce to two sesentences from transition word!\n")
retVal.append("Try to split senetce to two sesentences from transition word!\n")
if transitionWordCount >= 2 and word_count > 20:
print(
" To make your English perfect make sure you don't use two transition words in a single sentence. Try to split senetce to two sesentences from transition words or conjunction!\n\n")
retVal.append(" To make your English perfect make sure you don't use two transition words in a single sentence. Try to split senetce to two sesentences from transition words or conjunction!\n\n")
return {
"message": retVal,
"score": scoreForLengthySentences
}
print(processGrammar("I'll be there in time, but I also have to do my homhomework too,although I should finish them,so I may be late. And one more thing, can I use your car ?. Anyway after today I also need to work hard because my exam is in the next month."))
\ No newline at end of file
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
var firebaseConfig = {
apiKey: "AIzaSyBhnLZA8NKFBEOojrjK27sVVO_z6H1EDKE",
authDomain: "speech-master-login.firebaseapp.com",
projectId: "speech-master-login",
storageBucket: "speech-master-login.appspot.com",
messagingSenderId: "1055856699477",
appId: "1:1055856699477:web:cd5cc6c7e341000a828cdc",
measurementId: "G-L8DLH18DG8"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
const auth = firebase.auth();
//signup function
function signUp(){
var email = document.getElementById("email");
var password = document.getElementById("password");
const promise = auth.createUserWithEmailAndPassword(email.value,password.value);
promise.catch(e=>alert(e.message));
alert("SignUp Successfully");
}
//signIN function
function signIn(){
var email = document.getElementById("email");
var password = document.getElementById("password");
const promise = auth.signInWithEmailAndPassword(email.value,password.value);
promise.catch(e=>alert(e.message));
// alert("SignUp In Successfully");
}
//signOut
function signOut(){
auth.signOut();
alert("SignOut Successfully from System");
}
//active user to homepage
firebase.auth().onAuthStateChanged((user)=>{
if(user){
var email = user.email;
alert("Active user "+email);
}else{
alert("No Active user Found")
}
})
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
button {
margin: 0 3px 10px 0;
padding-left: 2px;
padding-right: 2px;
width: 300px;
}
button:last-of-type {
margin: 0;
}
p.borderBelow {
margin: 0 0 20px 0;
padding: 0 0 20px 0;
}
video {
vertical-align: top;
--width: 25vw;
width: var(--width);
height: calc(var(--width) * 0.5625);
}
video:last-of-type {
margin: 0 0 20px 0;
}
video#gumVideo {
margin: 0 20px 20px 0;
}
This diff is collapsed.
'use strict';
/* globals MediaRecorder */
let mediaRecorder;
let recordedBlobs;
const errorMsgElement = document.querySelector('span#errorMsg');
const recordedVideo = document.querySelector('video#recorded');
const recordButton = document.querySelector('button#record');
const playButton = document.querySelector('button#play');
const downloadButton = document.querySelector('button#download');
recordButton.addEventListener('click', () => {
if (recordButton.textContent === 'Record') {
startRecording();
} else {
stopRecording();
recordButton.textContent = 'Record';
playButton.disabled = false;
downloadButton.disabled = false;
}
});
playButton.addEventListener('click', () => {
const superBuffer = new Blob(recordedBlobs, {type: 'video/webm'});
recordedVideo.src = null;
recordedVideo.srcObject = null;
recordedVideo.src = window.URL.createObjectURL(superBuffer);
recordedVideo.controls = true;
recordedVideo.play();
});
downloadButton.addEventListener('click', () => {
const blob = new Blob(recordedBlobs, {type: 'video/mp4'});
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = 'test.mp4';
document.body.appendChild(a);
a.click();
setTimeout(() => {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 100);
});
function handleDataAvailable(event) {
console.log('handleDataAvailable', event);
if (event.data && event.data.size > 0) {
recordedBlobs.push(event.data);
}
}
function startRecording() {
recordedBlobs = [];
let options = {mimeType: 'video/webm;codecs=vp9,opus'};
try {
mediaRecorder = new MediaRecorder(window.stream, options);
} catch (e) {
console.error('Exception while creating MediaRecorder:', e);
errorMsgElement.innerHTML = `Exception while creating MediaRecorder: ${JSON.stringify(e)}`;
return;
}
console.log('Created MediaRecorder', mediaRecorder, 'with options', options);
recordButton.textContent = 'Stop Recording';
playButton.disabled = true;
downloadButton.disabled = true;
mediaRecorder.onstop = (event) => {
console.log('Recorder stopped: ', event);
console.log('Recorded Blobs: ', recordedBlobs);
};
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start();
console.log('MediaRecorder started', mediaRecorder);
}
function stopRecording() {
mediaRecorder.stop();
}
function handleSuccess(stream) {
recordButton.disabled = false;
console.log('getUserMedia() got stream:', stream);
window.stream = stream;
const gumVideo = document.querySelector('video#gum');
gumVideo.srcObject = stream;
}
async function init(constraints) {
try {
const stream = await navigator.mediaDevices.getUserMedia(constraints);
handleSuccess(stream);
} catch (e) {
console.error('navigator.getUserMedia error:', e);
errorMsgElement.innerHTML = `navigator.getUserMedia error:${e.toString()}`;
}
}
document.querySelector('button#start').addEventListener('click', async () => {
const hasEchoCancellation = document.querySelector('#echoCancellation').checked;
const constraints = {
audio: {
echoCancellation: {exact: hasEchoCancellation}
},
video: {
width: 1280, height: 720
}
};
console.log('Using media constraints:', constraints);
await init(constraints);
});
\ No newline at end of file
/**
* Template Name: OnePage - v4.3.0
* Template URL: https://bootstrapmade.com/onepage-multipurpose-bootstrap-template/
* Author: BootstrapMade.com
* License: https://bootstrapmade.com/license/
*/
(function() {
"use strict";
/**
* Easy selector helper function
*/
const select = (el, all = false) => {
el = el.trim()
if (all) {
return [...document.querySelectorAll(el)]
} else {
return document.querySelector(el)
}
}
/**
* Easy event listener function
*/
const on = (type, el, listener, all = false) => {
let selectEl = select(el, all)
if (selectEl) {
if (all) {
selectEl.forEach(e => e.addEventListener(type, listener))
} else {
selectEl.addEventListener(type, listener)
}
}
}
/**
* Easy on scroll event listener
*/
const onscroll = (el, listener) => {
el.addEventListener('scroll', listener)
}
/**
* Navbar links active state on scroll
*/
let navbarlinks = select('#navbar .scrollto', true)
const navbarlinksActive = () => {
let position = window.scrollY + 200
navbarlinks.forEach(navbarlink => {
if (!navbarlink.hash) return
let section = select(navbarlink.hash)
if (!section) return
if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) {
navbarlink.classList.add('active')
} else {
navbarlink.classList.remove('active')
}
})
}
window.addEventListener('load', navbarlinksActive)
onscroll(document, navbarlinksActive)
/**
* Scrolls to an element with header offset
*/
const scrollto = (el) => {
let header = select('#header')
let offset = header.offsetHeight
let elementPos = select(el).offsetTop
window.scrollTo({
top: elementPos - offset,
behavior: 'smooth'
})
}
/**
* Toggle .header-scrolled class to #header when page is scrolled
*/
let selectHeader = select('#header')
if (selectHeader) {
const headerScrolled = () => {
if (window.scrollY > 100) {
selectHeader.classList.add('header-scrolled')
} else {
selectHeader.classList.remove('header-scrolled')
}
}
window.addEventListener('load', headerScrolled)
onscroll(document, headerScrolled)
}
/**
* Back to top button
*/
let backtotop = select('.back-to-top')
if (backtotop) {
const toggleBacktotop = () => {
if (window.scrollY > 100) {
backtotop.classList.add('active')
} else {
backtotop.classList.remove('active')
}
}
window.addEventListener('load', toggleBacktotop)
onscroll(document, toggleBacktotop)
}
/**
* Mobile nav toggle
*/
on('click', '.mobile-nav-toggle', function(e) {
select('#navbar').classList.toggle('navbar-mobile')
this.classList.toggle('bi-list')
this.classList.toggle('bi-x')
})
/**
* Mobile nav dropdowns activate
*/
on('click', '.navbar .dropdown > a', function(e) {
if (select('#navbar').classList.contains('navbar-mobile')) {
e.preventDefault()
this.nextElementSibling.classList.toggle('dropdown-active')
}
}, true)
/**
* Scrool with ofset on links with a class name .scrollto
*/
on('click', '.scrollto', function(e) {
if (select(this.hash)) {
e.preventDefault()
let navbar = select('#navbar')
if (navbar.classList.contains('navbar-mobile')) {
navbar.classList.remove('navbar-mobile')
let navbarToggle = select('.mobile-nav-toggle')
navbarToggle.classList.toggle('bi-list')
navbarToggle.classList.toggle('bi-x')
}
scrollto(this.hash)
}
}, true)
/**
* Scroll with ofset on page load with hash links in the url
*/
window.addEventListener('load', () => {
if (window.location.hash) {
if (select(window.location.hash)) {
scrollto(window.location.hash)
}
}
});
/**
* Preloader
*/
let preloader = select('#preloader');
if (preloader) {
window.addEventListener('load', () => {
preloader.remove()
});
}
/**
* Initiate glightbox
*/
const glightbox = GLightbox({
selector: '.glightbox'
});
/**
* Testimonials slider
*/
new Swiper('.testimonials-slider', {
speed: 600,
loop: true,
autoplay: {
delay: 5000,
disableOnInteraction: false
},
slidesPerView: 'auto',
pagination: {
el: '.swiper-pagination',
type: 'bullets',
clickable: true
},
breakpoints: {
320: {
slidesPerView: 1,
spaceBetween: 20
},
1200: {
slidesPerView: 3,
spaceBetween: 20
}
}
});
/**
* Porfolio isotope and filter
*/
window.addEventListener('load', () => {
let portfolioContainer = select('.portfolio-container');
if (portfolioContainer) {
let portfolioIsotope = new Isotope(portfolioContainer, {
itemSelector: '.portfolio-item'
});
let portfolioFilters = select('#portfolio-flters li', true);
on('click', '#portfolio-flters li', function(e) {
e.preventDefault();
portfolioFilters.forEach(function(el) {
el.classList.remove('filter-active');
});
this.classList.add('filter-active');
portfolioIsotope.arrange({
filter: this.getAttribute('data-filter')
});
portfolioIsotope.on('arrangeComplete', function() {
AOS.refresh()
});
}, true);
}
});
/**
* Initiate portfolio lightbox
*/
const portfolioLightbox = GLightbox({
selector: '.portfolio-lightbox'
});
/**
* Portfolio details slider
*/
new Swiper('.portfolio-details-slider', {
speed: 400,
loop: true,
autoplay: {
delay: 5000,
disableOnInteraction: false
},
pagination: {
el: '.swiper-pagination',
type: 'bullets',
clickable: true
}
});
/**
* Animation on scroll
*/
window.addEventListener('load', () => {
AOS.init({
duration: 1000,
easing: 'ease-in-out',
once: true,
mirror: false
})
});
})()
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
/*!
* Bootstrap Reboot v5.0.1 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
background-color: #fff;
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
background-color: currentColor;
border: 0;
opacity: 0.25;
}
hr:not([size]) {
height: 1px;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-bs-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-left: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-left: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.2em;
background-color: #fcf8e3;
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: #0d6efd;
text-decoration: underline;
}
a:hover {
color: #0a58ca;
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 1em;
direction: ltr /* rtl:ignore */;
unicode-bidi: bidi-override;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: #d63384;
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 0.875em;
color: #fff;
background-color: #212529;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
font-weight: 700;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #6c757d;
text-align: left;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator {
display: none;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: left;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: left;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
/* rtl:raw:
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
*/
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::file-selector-button {
font: inherit;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.css.map */
\ No newline at end of file
/*!
* Bootstrap Reboot v5.0.1 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
\ No newline at end of file
/*!
* Bootstrap Reboot v5.0.1 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/
*,
*::before,
*::after {
box-sizing: border-box;
}
@media (prefers-reduced-motion: no-preference) {
:root {
scroll-behavior: smooth;
}
}
body {
margin: 0;
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #212529;
background-color: #fff;
-webkit-text-size-adjust: 100%;
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
hr {
margin: 1rem 0;
color: inherit;
background-color: currentColor;
border: 0;
opacity: 0.25;
}
hr:not([size]) {
height: 1px;
}
h6, h5, h4, h3, h2, h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1 {
font-size: 2.5rem;
}
}
h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2 {
font-size: 2rem;
}
}
h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3 {
font-size: 1.75rem;
}
}
h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4 {
font-size: 1.5rem;
}
}
h5 {
font-size: 1.25rem;
}
h6 {
font-size: 1rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
abbr[title],
abbr[data-bs-original-title] {
-webkit-text-decoration: underline dotted;
text-decoration: underline dotted;
cursor: help;
-webkit-text-decoration-skip-ink: none;
text-decoration-skip-ink: none;
}
address {
margin-bottom: 1rem;
font-style: normal;
line-height: inherit;
}
ol,
ul {
padding-right: 2rem;
}
ol,
ul,
dl {
margin-top: 0;
margin-bottom: 1rem;
}
ol ol,
ul ul,
ol ul,
ul ol {
margin-bottom: 0;
}
dt {
font-weight: 700;
}
dd {
margin-bottom: 0.5rem;
margin-right: 0;
}
blockquote {
margin: 0 0 1rem;
}
b,
strong {
font-weight: bolder;
}
small {
font-size: 0.875em;
}
mark {
padding: 0.2em;
background-color: #fcf8e3;
}
sub,
sup {
position: relative;
font-size: 0.75em;
line-height: 0;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
a {
color: #0d6efd;
text-decoration: underline;
}
a:hover {
color: #0a58ca;
}
a:not([href]):not([class]), a:not([href]):not([class]):hover {
color: inherit;
text-decoration: none;
}
pre,
code,
kbd,
samp {
font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 1em;
direction: ltr ;
unicode-bidi: bidi-override;
}
pre {
display: block;
margin-top: 0;
margin-bottom: 1rem;
overflow: auto;
font-size: 0.875em;
}
pre code {
font-size: inherit;
color: inherit;
word-break: normal;
}
code {
font-size: 0.875em;
color: #d63384;
word-wrap: break-word;
}
a > code {
color: inherit;
}
kbd {
padding: 0.2rem 0.4rem;
font-size: 0.875em;
color: #fff;
background-color: #212529;
border-radius: 0.2rem;
}
kbd kbd {
padding: 0;
font-size: 1em;
font-weight: 700;
}
figure {
margin: 0 0 1rem;
}
img,
svg {
vertical-align: middle;
}
table {
caption-side: bottom;
border-collapse: collapse;
}
caption {
padding-top: 0.5rem;
padding-bottom: 0.5rem;
color: #6c757d;
text-align: right;
}
th {
text-align: inherit;
text-align: -webkit-match-parent;
}
thead,
tbody,
tfoot,
tr,
td,
th {
border-color: inherit;
border-style: solid;
border-width: 0;
}
label {
display: inline-block;
}
button {
border-radius: 0;
}
button:focus:not(:focus-visible) {
outline: 0;
}
input,
button,
select,
optgroup,
textarea {
margin: 0;
font-family: inherit;
font-size: inherit;
line-height: inherit;
}
button,
select {
text-transform: none;
}
[role=button] {
cursor: pointer;
}
select {
word-wrap: normal;
}
select:disabled {
opacity: 1;
}
[list]::-webkit-calendar-picker-indicator {
display: none;
}
button,
[type=button],
[type=reset],
[type=submit] {
-webkit-appearance: button;
}
button:not(:disabled),
[type=button]:not(:disabled),
[type=reset]:not(:disabled),
[type=submit]:not(:disabled) {
cursor: pointer;
}
::-moz-focus-inner {
padding: 0;
border-style: none;
}
textarea {
resize: vertical;
}
fieldset {
min-width: 0;
padding: 0;
margin: 0;
border: 0;
}
legend {
float: right;
width: 100%;
padding: 0;
margin-bottom: 0.5rem;
font-size: calc(1.275rem + 0.3vw);
line-height: inherit;
}
@media (min-width: 1200px) {
legend {
font-size: 1.5rem;
}
}
legend + * {
clear: right;
}
::-webkit-datetime-edit-fields-wrapper,
::-webkit-datetime-edit-text,
::-webkit-datetime-edit-minute,
::-webkit-datetime-edit-hour-field,
::-webkit-datetime-edit-day-field,
::-webkit-datetime-edit-month-field,
::-webkit-datetime-edit-year-field {
padding: 0;
}
::-webkit-inner-spin-button {
height: auto;
}
[type=search] {
outline-offset: -2px;
-webkit-appearance: textfield;
}
[type="tel"],
[type="url"],
[type="email"],
[type="number"] {
direction: ltr;
}
::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::file-selector-button {
font: inherit;
}
::-webkit-file-upload-button {
font: inherit;
-webkit-appearance: button;
}
output {
display: inline-block;
}
iframe {
border: 0;
}
summary {
display: list-item;
cursor: pointer;
}
progress {
vertical-align: baseline;
}
[hidden] {
display: none !important;
}
/*# sourceMappingURL=bootstrap-reboot.rtl.css.map */
\ No newline at end of file
/*!
* Bootstrap Reboot v5.0.1 (https://getbootstrap.com/)
* Copyright 2011-2021 The Bootstrap Authors
* Copyright 2011-2021 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
*/*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}
/*# sourceMappingURL=bootstrap-reboot.rtl.min.css.map */
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment